クライアントからサーバーへ送られるコマンドによって、サーバー上にある NetworkBehaviour クラスのメソッドを呼び出すための属性です。
[Command] 機能は接続されているプレイヤー上で実行されます。プレイヤーのオブジェクトを NetworkServer.PlayerIsReady() 関数に渡すことによって発生する "ready" メッセージに応えてセットアップをします。コマンド呼び出しで使用する引数はシリアライズされ、ネットワークを介し、クライアント上にある同じ引数を持つ関数を実行します。コマンドとなるメソッドは、必ず接頭辞として "Cmd" から始まるメソッド名にしなければいけません。
#pragma strict public class Player extends NetworkBehaviour { var moveX: int = 0; var moveY: int = 0; var moveSpeed: float = 0.2f; function Update() { if (!isLocalPlayer) { return ; } // input handling for local player only var oldMoveX: int = moveX; var oldMoveY: int = moveY; moveX = 0; moveY = 0; if (Input.GetKey(KeyCode.LeftArrow)) { moveX -= 1; } if (Input.GetKey(KeyCode.RightArrow)) { moveX += 1; } if (Input.GetKey(KeyCode.UpArrow)) { moveY += 1; } if (Input.GetKey(KeyCode.DownArrow)) { moveY -= 1; } if (moveX != oldMoveX || moveY != oldMoveY) { CmdMove(moveX, moveY); } } @Command public function CmdMove(x: int, y: int) { moveX = x; moveY = y; isDirty = true; } public function FixedUpdate() { if (NetworkServer.active) { transform.Translate(moveX * moveSpeed, moveY * moveSpeed, 0); } } }
using UnityEngine; using UnityEngine.Networking;
public class Player : NetworkBehaviour {
int moveX = 0; int moveY = 0; float moveSpeed = 0.2f; void Update () { if (!isLocalPlayer) { return; } // input handling for local player only int oldMoveX = moveX; int oldMoveY = moveY; moveX = 0; moveY = 0; if (Input.GetKey(KeyCode.LeftArrow)) { moveX -= 1; } if (Input.GetKey(KeyCode.RightArrow)) { moveX += 1; } if (Input.GetKey(KeyCode.UpArrow)) { moveY += 1; } if (Input.GetKey(KeyCode.DownArrow)) { moveY -= 1; } if (moveX != oldMoveX || moveY != oldMoveY) { CmdMove(moveX, moveY); } } [Command] public void CmdMove(int x, int y) { moveX = x; moveY = y; isDirty = true; } public void FixedUpdate() { if (NetworkServer.active) { transform.Translate(moveX * moveSpeed, moveY * moveSpeed, 0); } } }
channel | コマンドを送信するのに使用する QoS チャンネル。詳細は QosType を参照してください。 |