作者wix3000 (痒,好吃)
看板GameDesign
标题Re: [请益] Unity 队友显示问题
时间Mon Sep 9 04:32:10 2019
好吧
半夜睡不着觉,对这个问题写了简单的测试研究了一下
我的结论是这样:
这个 BUG 的原因是『编号较前的玩家在同步後面玩家的 tag 之前,就先执行了
切换颜色的方法』导致。
当然你会觉得说:啊我不是先呼叫了所有玩家的 TagSet() ,才呼叫每个玩家的
SetBool() 吗?
理论上是这样啦,但实际上 RPC 的执行顺序会受到很多方面影响。
当然我没有认真研究过 UNET 的原始码,所以不保证一定正确。
不过这样也能解释为什麽只有当 Host 也是人狼时,才不会出现 BUG。
因为所有玩家的 Tag 是由 Host 直接计算的,所以 Host 不会有延迟问题
然後你的人狼数量刚好是 2 ,所以第 2 个人狼也不会发现他之後的玩家 tag 有错
针对这个问题我的建议如下
最简单的方法,在 TagSet() 跟 SetBool() 之间设定一个延迟
大概 0.5 ~ 1 秒就很足够了。
又或是在设定每个玩家角色时,直接将每个玩家的对应角色都传给各个玩家
这样就不会有先後问题,可以确保在切换颜色时所有玩家的角色都是正确的。
这个功能你可以使用 ClientRpc 完成,又或是偷懒一点用 SyncBoolList 来同步。
以上两个方法提供你参考
最後要提的一点是
UNET 已经被 Unity 官方弃用了
建议你改用 Photon (喂
--
███ ︵︵︵︵ █◤ ◢█◤ ちから
██ /\|||█ ◢█◤ 「ひとりでは耐え切れぬ 雷 でもきっと、
▄█│‵╯︶︶| ██◤ # ふたりなら大丈夫私は信じる!」
▔█ ╲ ) ∕█████◣ +
+ █ ╮ - │██◣ ◥◥█◣ ◢ 第四巻 27ページ…
▂▄▆█│ │██◤* ◢████◣ 雷神の系谱 ψWix
--
※ 发信站: 批踢踢实业坊(ptt.cc), 来自: 220.129.192.61 (台湾)
※ 文章网址: https://webptt.com/cn.aspx?n=bbs/GameDesign/M.1567974734.A.2E2.html
※ 编辑: wix3000 (220.129.192.61 台湾), 09/09/2019 04:34:10
1F:推 dreamnook: 推结论www 09/09 14:53
2F:推 mois9432: 谢谢回覆 延迟是用sleep吗? 09/10 16:08
3F:→ mois9432: 我用sleep还是会出现这个问题 09/10 16:08
4F:→ wix3000: 延迟简单的方法两种 Coroutine 或 Invoke 09/11 13:10