这是一个可添加到 NetworkBehaviour 类的方法上,以允许它们能够在服务器上通过从客户端发送命令进行调用的属性。
[Command] 函数在与连接关联的玩家游戏对象上调用。此函数经过设置,通过将玩家游戏对象传递给 NetworkServer.PlayerIsReady() 函数以响应“准备就绪”消息。命令调用的参数通过网络进行序列化,因此服务器函数可使用与客户端上的函数相同的值进行调用。这些函数必须以前缀“Cmd”开头,并且不能为静态。
using UnityEngine; using UnityEngine.Networking;
public class Player : NetworkBehaviour { int moveX = 0; int moveY = 0; float moveSpeed = 0.2f; bool isDirty = false;
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); } } }
允许的参数类型为:
• Basic type (byte, int, float, string, UInt64, etc)
• Built-in Unity math type (Vector3, Quaternion, etc),
• Arrays of basic types
• Structs containing allowable types
• NetworkIdentity
• NetworkInstanceId
• NetworkHash128
• GameObject with a NetworkIdentity component attached.
channel | 有关用于发送此命令的 QoS 通道信息,请参阅 QosType。 |