Posted at

モノビットエンジンでリアルタイム通信のオンラインゲームを作る:ボールを跳ね返す

どうもnisokaです。

前回はシンプルなPingPongゲームに、座標のリアルタイム同期処理を実装しました。

今回も引き続き、モノビットエンジンを使ってオンライン化を目指していきたいと思います。

環境は以下の通りです

win10 64bit, Unity2018.3.3f1, Monobit Unity Networking2.0 v2.6


やること

パドルに当たったボールを相手に跳ね返せるようにしたいと思います。

各クライアントとの同期をおこない、ラリーをしている様子を確認するところまで作ります。

image1.PNG


考え方

ホストは自分とゲスト両方のパドル情報を持っています。

ということは、ホストはゲストのパドルが球に当たったことも検知できます。

なのであとは、ゲストが球に当たったらホスト側で球の進行方向を逆向きに変えればよいです。

これが簡単な跳ね返し処理の考え方です。


座標同期する

まず、前回やったようにボールの座標を同期させます。

手順は以下の通りです。

1. 該当するボールコンポーネントへMonobitView.cs&MonobitViewTransform.cs追加

2. MonobitView.csへMonobitViewTransform.csをアタッチ

3. 該当するボールコンポーネントのスクリプトでMonobitEngine.MonoBehaviourを継承

詳しい手順は<前回の記事>をお読みください。

注意点として、ボールはホストが生成したので、所有権はホストが持っています。

その為、Update内はすべてMonobitNetwork.isHostまたはmonobitView.isMineのif文で囲むべきです。


はね返す

private void OnTriggerEnter2D(Collider2D collision) {

if(MonobitNetwork.isHost) {
if (collision.tag == "Paddle") {
// 向きを変える
direction.x = -direction.x;
}
}
}

ホスト側では両方のパドルの当たり判定を監視します。

いずれのパドルに当たってもボールの進行方向を逆にするだけです。


最後に

いかがだったでしょうか。

モノビットエンジンが大体のことをやってくれるので、なんとこれだけで実装完了です。

次回はRPCメッセージについて少し触れたいと思います。