天天看點

Unity幀同步的探索之路二 不靠譜的Unity實體引擎1.為何不靠譜?2.測試環境3.碰撞示範4.測試結果

Unity幀同步的探索之路二 不靠譜的Unity實體引擎

  • 1.為何不靠譜?
  • 2.測試環境
  • 3.碰撞示範
  • 4.測試結果

1.為何不靠譜?

衆所周知,在使用幀同步的情況下最好不要使用Unity自帶的實體引擎。

具體為什麼不同步,網上給出的答案全都是會造成不同步。

因為Unity自帶的實體引擎内部是由浮點數參與計算的,而浮點數在不同平台産生的結果也不一樣,就導緻了結果有所浮動,且不一緻,是以就造成了不同步。

是以就衍生出了定點數。

而幀同步為了保證各平台同步的情況下,則必須使用定點數。

雖然說網上都說要使用定點實體庫來保各平台的一緻性。

但肯定會有不少人會去巧妙的構想:在使用定點數保證兩名玩家位置一緻,旋轉一直,操作一緻(在同一幀)的情況下,也就是絕對同步的情況下,使用Unity自帶的實體引擎,進行碰撞,會不會得到相同的結果。

帶着這個思想,咱們就去探究一番Unity實體系統的計算會不會造成不同步。

2.測試環境

1.首先保證兩個用戶端:

  • 位置一緻
  • 旋轉一緻
  • 輸入一緻

2.然後在角色的武器上添加Unity的BoxCollider,在角色身上添加剛體,達成碰撞條件。

3.攻擊時通過武器碰撞敵方玩家的回調,來播放對方玩家的受擊動畫。目的就是為了測試碰撞算法的準确率。

3.碰撞示範

下面是測試效果:

Unity幀同步的探索之路二 不靠譜的Unity實體引擎1.為何不靠譜?2.測試環境3.碰撞示範4.測試結果
Unity幀同步的探索之路二 不靠譜的Unity實體引擎1.為何不靠譜?2.測試環境3.碰撞示範4.測試結果

4.測試結果

在同一台電腦的模拟器上 進行了多次測試,保證兩個玩家位置、旋轉、輸入、一緻的情況下,碰撞算法得到的結果卻不穩定,有不小的浮動性。有時結果一緻,有時結果不同,甚至在一緻結果的情況下會出現兩種不同的表現結果。

猜測是實體系統内部浮點數導緻計算結果具有上下浮動值,進而産生了在一台裝置上的結果不同。

是以幀同步最好還是要使用定點數實體庫,否則遊戲過程中出現一個不同步,就會影響後續的計算。

或者在擊中判定采取定點實體計算的方式,來保證不同不平台下的結果一緻性。

是以在幀同步中,還是要避免掉一切有關于float浮點數相關的計算,否則會造成不同步問題。

努力積才能,壹葉便成名。

喜歡我關注我,更多幹貨知識等着你!

繼續閱讀