1、要进行多人游戏的数据同步,首先我们1.要在场景中有一个物体上,带有Network Manager组件(改组件可以被继承和修改)2.需要有一个表示玩家对象的预制体,且该玩家预制体带有NetworkIdentity组件。
2、我们首先用一张图简要说明使用玩家对象进行同步的流程。绿色是无所不能的绝对权威,蓝色是可以发送数据和命令的,灰色是只有接收数据的份。黄色箭头是[Command]方法调用,橙色箭头是[ClientRpc]方法调用。
3、而现在,我们想要一个“灰色”的对象,可以接受数据,但是又不希望玩家掉线这个对象也消失。实际上,我们只需要新建一个游戏物体,给它一个NetworkIdentity组件。
4、我们给它添加一个脚本,这个脚本要继承自NetworkBehaviour, 里面储存所有想同步的变量。
5、而且,这个脚本本身只有ClientRpc方法。因为没有客户端有办法通过这个非玩家对象发送Command. 但是服务器调用了ClientRpc,这个调用确会传达到所有客户端。原理图如下。
6、这个游戏对象是不会因为玩家掉线而清除的,只是会被禁用。当再次连线的时候,这个对象里面的数据不会改变。当然,它真的没办法和服务器通讯吗?显然不是。我们只要搞到一个本地玩家对象的引用,就可以迂回的发送数据到服务器了。如图所示。