ども、VR部員のゼロです。
今回は今更かもしれませんがUnityにあるネットワーク機能UNET を初めて触ったので備忘録として書こうと思います。 といってもほんとに触りの部分だけです。
- NetworkManagerの設定
まず、Scene上でCreateEmptyで空のゲームオブジェクトを作成し、名前をNetworkManagerとします。 その後AddComponetでNetworkManagerとNetworkManager HDDをアタッチ。 これでNetworkManagerの設定は終わりみたいですね。
- プレイヤーを同期させる設定
今回はCubeの移動を同期させました。 CreateでCubeを作成 その後以下の移動のコードをCubeにつける
using System.Collections; using System.Collections.Generic; using UnityEngine; public class Movement : MonoBehaviour { [SerializeField] Rigidbody rig; [SerializeField] float speed = 2f; void Update () { float x = Input.GetAxis("Horizontal"); float z = Input.GetAxis("Vertical"); this.transform.position += new Vector3(x,0,z)*Time.deltaTime * speed; } }
Add ComponetでNetwork IdenityとNetwork Transformをアタッチ Network TransformのTransformSyncModeをSync Transformに変更 Network IdentityのLocal Player Authorit にチェック
今回は操作を反映させるのは自分自身(ローカルのもの)なのでそれを判定するスクリプトをCube追加します。(自分の操作で相手のプレイヤーまで動いてしまわないように)
using System.Collections; using System.Collections.Generic; using UnityEngine; using UnityEngine.Networking; public class DisableScript : NetworkBehaviour { [SerializeField] Behaviour behaviors; void Start () { if (!isLocalPlayer) { behaviors.enabled = false; } } }
isLocalPlayerで自分自身かどうかを判定しているのと今回はネットワークの機能を使うので MonoBehaiviourではなく、NetworkBehaviourを継承するのが注意点ですね。
その後InspectorでbehaviorsにCubeのMovement.csを設定します。 最後にCubeをプレハブ化してNetworkManagerのSpawn InfoのPlayerPrefabを先ほどプレハブ化した Cubeに設定して終わりとなります。
あとはエディタ側で再生しLanHost(H)ボタンを押す。 ビルドしたアプリ側でLanClient©を押してそれぞれで移動してみると Cubeが同期するはずです。
最後にすごく簡単にまとめると
NetworkManagerはネットワークの状態を管理するもの
Scriptでネットワークの機能を使いたいときにはNetworkBehaviourを継承
ネットワークゲームでは他のPlayerを操作できてはまずいのでその判定をisLocalPlayerで行う
といった感じでしょうか。
今回はほんの触り程度だったので、そのうち変数のやり取りやアニメーションの同期なども やってみます。