CommandAttribute

class in UnityEngine.Networking

切换到手册

描述

这是一个可添加到 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。