【Unity】モノビットエンジンで通信同期 その1
モノビットエンジンを使った通信同期についてざくっとメモ。
とりあえずシンプルなオブジェクトの移動を同期させる、という部分まで。
■モノビットエンジン(MUN)のアセットをDL先
Monobit Unity Networking 2.0 (MUN) - モノビットエンジン公式サイト
■資料
Monobit Unity Networking (MUN) official document
■手順 ※基本的には上記資料がベース
1.アセットをインポート
2.自動接続スクリプトをシーンに組み込む
シーンに空のGameObjectを追加し、「Monobit Auto Login Templete」をアタッチ。
「Monobit View」の「MonobitView ID」を変更(仮に1)
3.プレイヤーの設定
プレイヤーの代わりとして「Cube」オブジェクトをシーンに追加。名前を「Player」に変更する。
プレイヤーを移動させるスクリプト「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」も追加される。
ProjectビューのAssetsに「Resources」フォルダを作成し、シーン上のPlayerをD&Dしてプレハブ化する。
シーン上のPlayerオブジェクトは削除。
4.生成するプレイヤーとして登録
2で追加した「Monobit Auto Login Templete」の「Instantiate Prefab」に3で作成したプレハブを登録。
5.実行確認
「Connect」「GameStart」の後にプレイヤーが生成されて動かせていればここまではOK。
ビルドしたアプリと通信する場合はPlayerSettingsの「Run In Background」をONにする。
ただしまだ問題があるので設定していく。
※「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」に登録する。
8.実行確認
ビルドしてエディターと通信同期を実行確認する。
きちんと同期されていればOK。
とりあえず今回はここまで。