这是一个可添加到 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 组件的游戏对象。
Did you find this page useful? Please give it a rating:
Thanks for rating this page!
What kind of problem would you like to report?
Thanks for letting us know! This page has been marked for review based on your feedback.
If you have time, you can provide more information to help us fix the problem faster.
Provide more information
You've told us this page needs code samples. If you'd like to help us further, you could provide a code sample, or tell us about what kind of code sample you'd like to see:
You've told us there are code samples on this page which don't work. If you know how to fix it, or have something better we could use instead, please let us know:
You've told us there is information missing from this page. Please tell us more about what's missing:
You've told us there is incorrect information on this page. If you know what we should change to make it correct, please tell us:
You've told us this page has unclear or confusing information. Please tell us more about what you found unclear or confusing, or let us know how we could make it clearer:
You've told us there is a spelling or grammar error on this page. Please tell us what's wrong:
You've told us this page has a problem. Please tell us more about what's wrong:
Thank you for helping to make the Unity documentation better!
Your feedback has been submitted as a ticket for our documentation team to review.
We are not able to reply to every ticket submitted.