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