搞了整整两周之后,彻底的把rpc和gameplay通了一遍,玩法层面的需求也都实现了,结果打包出来测试的时候大失所望。
1,因为延迟问题,新客户端加入后,原有场景内的actor会同一时间一起把数据传递过来。结果导致有时候角色的初始化不成功。解决办法暂时是加个delay延迟一下,并且在角色初始化完成前禁用用户输入,能解决很大问题。并且相应的在不同阶段重复加了确保执行的函数,比如动态材质没设置成功,就delay一下再设置。武器什么的都同样。
2,delay造成了一些理所应当的逻辑不成立,很简单的overlap事件,子弹击中角色发射粒子并自毁。就不能用rpc逻辑来做。我之前的逻辑是用has aurthor确保overlap事件在服务器端执行,然后“服务端—》组播”执行“发射粒子—〉销毁”事件。这个逻辑看起来没有问题,但是客户端就是发射不了粒子。
后来直接把粒子事件改成单组播就解决了。经过思索,造成这个结果的原因是,事件发送服务端是有时间差的,服务端接受事件并执行然后把结果同步给客户端(粒子发射并自毁),但是这里面可能有个优化,引擎发现接下来要执行的命令主体要被销毁了,所以发射粒子这个命令也被消除。所以这里的rpc不经过服务器,直接组播出去,就可以让客户端接收到的是执行命令,不会被服务器端的删除物体覆盖。
3,打包后实际测试时,延迟的影响巨大,而且造成的结果与本地模拟的完全不同。
之前为了解决视野外动画不同步的问题,把强制动画同步开启了,结果造