LoginSignup
1
1

More than 3 years have passed since last update.

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

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メッセージについて少し触れたいと思います。

1
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
1