众所周知,Unity游戏引擎的UNET网络模块,主要思路服务器权威的。所有客户端到服务端的数据发送只能从玩家的游戏对象上发出。但是如果玩家突然掉线,同步的数据怎么办呢?本经验介绍了一点技巧。
工具/原料
Unity
方法/步骤
1
要进行多人游戏的数据同步,首先我们1.要在场景中有一个物体上,带有Network Manager组件(改组件可以被继承和修改)2.需要有一个表示玩家对象的预制体,且该玩光海戴家预制体带有NetworkIdentity组件。
2
我们首先用一张图简要说明使用玩家对象进行同步的流程。绿色是无所不能的绝对权威,蓝色是可以发送数据和命令的,灰色是只有接收数据王颂的份。黄色箭头是[Command]方法调用,橙色箭头是[ClientRpc]方法调用。
3
而现在,我们想要一个“灰色”的对象,可以接受数据,但是又不希望玩家掉线这个对象也消失。实际上,我们只需要新建一个游戏物体,给它一个NetworkIdentity组件。
4
我们给它添加一个脚本,这个脚本要继承自NetworkBehaviour, 里面储存所有想同步的变量。
6
这个游戏对象是不会因为玩家掉线而清除的,只是会被禁用。当再次连线的时候,这个对象里面的数据不会改变。当然,它真的没办法和服务器通讯吗?显然不是。我们只要搞到一个本地玩家对象的引用,就可以迂回的发送数据到服务器了。如图所示。
注意事项
如果我们想要实现断线重连等复杂功能,可以自己继承NetworkManager, 重载一些事件方法。