我有一个多人回合制战略游戏,需要一个游戏经理,控制当前的游戏状态(轮到谁了).这个管理器应该对每个客户端都是通用的,它的状态应该在服务器上同步.
我是这样做的:游戏管理器对象是NetworkBehaviour,它有NetworkIdentity,它不是本地玩家权限,也不是服务器权限.我已经制作了一个自定义的NetworkManager,它在客户端连接上生成游戏管理器,还测试它是否是服务器.这是一个代码:
public override void OnClientConnect(NetworkConnection conn)
{
ClientScene.Ready(conn);
if (NetworkServer.active)
{
var manager = Instantiate(MultiplayerManagerPrefab, Vector3.zero, Quaternion.identity) as GameObject;
var tacticsManager = manager.GetComponent<MultiplayerManagerModel>();
NetworkServer.RegisterHandler(MsgType.AddPlayer, tacticsManager.CreatePlayerOnServer);
NetworkServer.Spawn(manager);
}
ClientScene.AddPlayer(0);
}
Run Code Online (Sandbox Code Playgroud)
当我在服务器上运行它工作正常时,它在客户端上创建一个实例并同步从服务器到客户端的变量.但是当我尝试从客户端运行命令时它会忽略它们,抛出这个警告:
试图在没有权限的情况下发送对象的命令.UnityEngine.Networking.NetworkBehaviour:SendCommandInternal(NetworkWriter,Int32,String)
请注意,此游戏管理器是在任何玩家之前生成的,因为它必须负责产生玩家.我究竟做错了什么?