这是一个可添加到 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); } } }
允许的参数类型为:
• 基本类型(byte、int、float、string 和 UInt64 等)\
• 内置 Unity 数学类型(Vector3、四元数等)\
• 基本类型数组\
• 包含允许类型的结构\
• NetworkIdentity \
• NetworkInstanceId\
• NetworkHash128\
• 附加 NetworkIdentity 组件的游戏对象。
channel | 有关用于发送此命令的 QoS 通道信息,请参阅 QosType。 |