我有一个客户端服务器构建在团结5。我想发送一个命令从客户端到服务器通过一个GUI按钮点击,这是为了测试目的。因此,在我的客户机上,我想要的只是点击一个按钮,然后让服务器在其控制台窗口上显示一条消息。通过http://docs.unity3d.com/Manual/UNetActions.html阅读,这似乎需要一个player对象。有了演示,我正在尝试创建没有播放器。因此,我创建了一个空的游戏对象,并将其命名为player,并为它分配了一个player脚本:
public class Player : NetworkBehaviour {
void Update ()
{ //receive message from camera follow script to run command from client to server
if (isServer)
return;
if (GameObject.Find("Main Camera").GetComponent<CameraFollow>().sendCommand)
{
CmdTurnOnNetworkTransformOnServer ();
}
}
[Command]
void CmdTurnOnNetworkTransformOnServer()
{
UnityEngine.Debug.Log ("Received");
}
}
此脚本检查另一个脚本上的布尔值是否为真(该脚本包含单击时将bool设置为true的GUI按钮)。如果是真的,那么我希望服务器在编辑器的控制台上显示“接收”。然而,我得到的错误“试图发送命令给非本地玩家。”从我所看到的,我正在正确地遵循上面的链接,只显示一个简单的消息。我意识到使用http://docs.unity3d.com/Manual/UNetMessages.html还有另一条途径,但是我想看看我是否可以让一个命令工作。
完全错误:试图为非本地玩家发送命令。UnityEngine.Networking.NetworkBehaviour:SendCommandInternal(NetworkWriter,Int32,String) Player:CallCmdTurnOnNetworkTransformOnServer() Player:Update() (位于资产/Player.cs:37)
我怎么会有这个错误?
此错误出现在“客户端控制台”窗口中。
发布于 2016-02-23 06:47:59
通过http://docs.unity3d.com/Manual/UNetActions.html读取播放器对象是必需的。这个player对象应该是一个预制件,并在编辑器中的网络管理器脚本中的生成信息下填充播放器预制件旁边的空间。我创建了一个不可见的player对象,所以它可能不存在,但是为了发送命令的目的,它应该是。这避免了为非本地玩家发送命令的错误。
https://gamedev.stackexchange.com/questions/115962
复制相似问题