UnityNetwork [Command]问题

来源:互联网 发布:淘宝优惠券采集器 编辑:程序博客网 时间:2024/06/05 08:58

Unity NetworkBehaviour [Command] 的问题

标有[Command]属性的函数,在客户端上调用,在服务器端运行,函数参数会通过网络传到服务器。

在客户端上的脚本调用[Command]属性的函数需要权限,否则会报错:Trying to send command for object without authority.

NetworkManager 自动生成的玩家(PlayerPrefab)游戏物体自带权限,挂在它身上的脚本可以随意调用[Command]属性的函数。

除此之外,客户端上的物体一般都不会自动拥有权限。也就是说,挂在其他物体上的脚本调用[Command]属性函数前要先手动给予该物体权限。

给予物体权限(Authority)的操作只能在服务器上进行。共有两种方法:

    1.在服务器端生成该物体时给予权限:[Command]void CmdSpawn(){    var theObject = (GameObject)Instantiate(otherPrefab, Vector3.zero,Quaternion.identity);    //生成物体并给予Authority    NetworkServer.SpawnWithClientAuthority(theObject, connectionToClient);}otherPrefab是要生成的预制体。这些代码放在挂在PlayerPrefab上的脚本中,在客户端上调用,在服务器上执行生成操作。此物体身上的[Command]属性的函数也就可以在客户端调用了。2.在服务器端给予物体权限:NetworkIdentity.AssignClientAuthority(Networking.NetworkConnection conn);大概使用方法:otherPrefab.GetComponent<NetworkIdentity>().AssignClientAuthority(connectionToClient);3.在服务器端移除物体权限:NetworkIdentity.RemoveClientAuthority(Networking.NetworkConnection conn);用法与上面类似。

参考网页:
https://stackoverflow.com/questions/36107855/unity3d-trying-to-send-command-for-object-without-authority

https://forum.unity.com/threads/spawn-objects-from-clients-unet.332942/

参考和Unity Network相关(很详细):
http://blog.csdn.net/tonnychu/article/details/50803485

原创粉丝点击