MLAPI その4
カメラがアレなので、上空から映すように位置をいい感じに移動する。
プレイヤの Cube に PlayerCubeController のスクリプトを作ってアタッチしておく。
通常の MonoBehaviour クラスではなくて、MLAPI.NetworkedBehaviour を継承しておく。
NetworkedObject をアタッチしているので、これでいろいろ操作する。
public class PlayerCubeController : MLAPI.NetworkedBehaviour { }
プレイヤの Cube が中央に埋まった形で出現してしまうので、ランダムに出てくるようにする。
public class PlayerCubeController : MLAPI.NetworkedBehaviour { private void Start() { transform.position = new Vector3(Random.Range(-9, 9), 0.5f, Random.Range(-9, 9)); } }
Awake() だと、クライアントの 2 台目としてつながったとき、ホストの PlayerCube も移動してしまい、それぞれの画面で見た目が変わってしまった。
Start() なら大丈夫だった。
WASD で移動できるようにする
普通に Update() に書くと、他の PlayerCube にも影響するので、自分だけの PlayerCube だけを動かすようにする必要がある。
private Vector3 velocity; private float moveSpeed = 5.0f; private void Update() { // これが大事 if (!IsOwner) { return; } velocity = Vector3.zero; if (Input.GetKey(KeyCode.W)) velocity.z += 1; if (Input.GetKey(KeyCode.A)) velocity.x -= 1; if (Input.GetKey(KeyCode.S)) velocity.z -= 1; if (Input.GetKey(KeyCode.D)) velocity.x += 1; velocity = velocity.normalized * moveSpeed * Time.deltaTime; if (velocity.magnitude > 0) { transform.position += velocity; } }
これでそれぞれの画面で、それぞれの PlayerCube が動くようになった。