Re: [请益] Unity 队友显示问题

楼主: wix3000 (痒,好吃)   2019-09-09 04:32:10
好吧
半夜睡不着觉,对这个问题写了简单的测试研究了一下
我的结论是这样:
这个 BUG 的原因是‘编号较前的玩家在同步后面玩家的 tag 之前,就先执行了
切换颜色的方法’导致。
当然你会觉得说:啊我不是先呼叫了所有玩家的 TagSet() ,才呼叫每个玩家的
SetBool() 吗?
理论上是这样啦,但实际上 RPC 的执行顺序会受到很多方面影响。
当然我没有认真研究过 UNET 的原始码,所以不保证一定正确。
不过这样也能解释为什么只有当 Host 也是人狼时,才不会出现 BUG。
因为所有玩家的 Tag 是由 Host 直接计算的,所以 Host 不会有延迟问题
然后你的人狼数量刚好是 2 ,所以第 2 个人狼也不会发现他之后的玩家 tag 有错
针对这个问题我的建议如下
最简单的方法,在 TagSet() 跟 SetBool() 之间设定一个延迟
大概 0.5 ~ 1 秒就很足够了。
又或是在设定每个玩家角色时,直接将每个玩家的对应角色都传给各个玩家
这样就不会有先后问题,可以确保在切换颜色时所有玩家的角色都是正确的。
这个功能你可以使用 ClientRpc 完成,又或是偷懒一点用 SyncBoolList 来同步。
以上两个方法提供你参考
最后要提的一点是
UNET 已经被 Unity 官方弃用了
建议你改用 Photon (喂
作者: dreamnook (亚龙)   2019-09-09 14:53:00
推结论www
作者: mois9432 (鱿鱼)   2019-09-10 16:08:00
谢谢回复 延迟是用sleep吗?我用sleep还是会出现这个问题
楼主: wix3000 (痒,好吃)   2019-09-11 13:10:00
延迟简单的方法两种 Coroutine 或 Invoke

Links booklink

Contact Us: admin [ a t ] ucptt.com