Perl日記

PerlとかRubyとかPHPとかPythonとか

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 が動くようになった。

f:id:rightgo09:20201204233649g:plain

参考
http://sasanon.hatenablog.jp/entry/2017/09/17/041612