アウトドアとかゲーム開発とか

ロードバイクやキャンプなどアウトドアとUnityでの開発とか

【Unity】モノビットエンジンで通信同期 その1

モノビットエンジンを使った通信同期についてざくっとメモ。
とりあえずシンプルなオブジェクトの移動を同期させる、という部分まで。

■モノビットエンジン(MUN)のアセットをDL先
Monobit Unity Networking 2.0 (MUN) - モノビットエンジン公式サイト

■資料
Monobit Unity Networking (MUN) official document

■手順 ※基本的には上記資料がベース

1.アセットをインポート
f:id:vrcycling:20170513123608p:plain
2.自動接続スクリプトをシーンに組み込む
シーンに空のGameObjectを追加し、「Monobit Auto Login Templete」をアタッチ。
「Monobit View」の「MonobitView ID」を変更(仮に1)
f:id:vrcycling:20170513123714p:plain
3.プレイヤーの設定
プレイヤーの代わりとして「Cube」オブジェクトをシーンに追加。名前を「Player」に変更する。
f:id:vrcycling:20170513125003p:plain
プレイヤーを移動させるスクリプト「Player」を作り、移動させるスクリプトを記述。

void Update ()
{
    transform.position += transform.TransformDirection(Vector3.forward) * Input.GetAxis("Vertical") * Time.deltaTime;
    transform.Rotate(0,Input.GetAxis("Horizontal") * Time.deltaTime * 50,0);
}

「Player」に「Monobit Transform View」スクリプトをアタッチ。同時に「Monobit View」も追加される。
f:id:vrcycling:20170513125157p:plain
ProjectビューのAssetsに「Resources」フォルダを作成し、シーン上のPlayerをD&Dしてプレハブ化する。
シーン上のPlayerオブジェクトは削除。
f:id:vrcycling:20170513125232p:plain

4.生成するプレイヤーとして登録
2で追加した「Monobit Auto Login Templete」の「Instantiate Prefab」に3で作成したプレハブを登録。
f:id:vrcycling:20170513125255p:plain

5.実行確認
「Connect」「GameStart」の後にプレイヤーが生成されて動かせていればここまではOK。

ビルドしたアプリと通信する場合はPlayerSettingsの「Run In Background」をONにする。
f:id:vrcycling:20170513125936p:plain
ただしまだ問題があるので設定していく。
※「Monobit Auto Login Templete」によってカメラが自動でプレイヤーの後方視点になるのが嫌な場合は、「Monobit Auto Login Templete」を開いて「if (go != null)」のコードをコメントアウトしておく。
尚、以前Photonでテストしていたとき、最初からプレイヤーに子として後方視点カメラをつけていた際、後から生成されたプレイヤーのカメラに切り替わってしまったので同様のコードを自分で入れたことがある。

6.問題解決:通信時に他のプレイヤーも動いてしまう
「自身が所有権を持つプレイヤー」だけを動かすようにする。
http://www.monobitengine.com/doc/mun/contents/Tutorial/IsMine.htm

上記に詳しいことは書いてあるので修正箇所のみ。
3で作成したコードに変更や追記を行う。

public class Player : MonoBehaviour {

public class Player : MonobitEngine.MonoBehaviour {

Update内の冒頭に下記を追記

if( !monobitView.isMine )
{
    return;
}

これで自分のプレイヤーのみが動くようになる。

7.問題解決:他のプレイヤーの動きが同期していない
Transformの同期を取る設定を行う。
http://www.monobitengine.com/doc/mun/contents/Tutorial/AddSynchronizedComponent.htm

上記に詳しいことは書いてあるので修正箇所のみ。
3で追加した「Player」にアタッチされている「Monobit Transform View」を、同じく「Player」にアタッチされている「Monobit View」の「Observed Component Registration List」に登録する。
f:id:vrcycling:20170513130205p:plain

8.実行確認
ビルドしてエディターと通信同期を実行確認する。
きちんと同期されていればOK。
f:id:vrcycling:20170513130450p:plain

とりあえず今回はここまで。