2017-06-29 57 views
4

我的玩家角色使用動畫根移動世界各地的動作。基本上,AI系統在動畫製作器上設置速度,進而控制控制角色動作的動畫片段。由於這是一個標準功能,可以確保非常逼真的動畫而不會顯着滑動,所以我認爲這是一個好主意......直到我添加了網絡同步。流利的移動與NetworkTransform&NetworkAnimator

Synching比使用NetworkTransform和NetworkAnimation使這兩個部件以衝突網絡中的字符:

  • NetworkTransform移動人物取其位置主機的命令。
  • NetworkAnimator會同步動畫變量,並在主機指示它播放動畫片段,而這些動畫片段也會應用根運動。

結果是準確的(意味着角色到達確切的目標目的地),但非常口吃的運動(明顯的跳躍)。

刪除NetworkTransform,字符的主機和客戶機實例失步而很快,這意味着他們將在世界上不同的位置結束時僅由與時間相關的動畫控制。

如果刪除NetworkAnimator,客戶端實例將不會播放與主機相同的動畫(如果有動畫的話)。

我試着保留這兩個組件,同時禁用Animator的根運動(僅限客戶端)。然而,在那種情況下,NetworkTransform似乎根本沒有內插。角色從同步位置跳到同步位置,步長約爲0.02個單位。與旋轉一樣。

NetworkTransform配置爲「Sync Transform」,因爲該字符既沒有RigidBody也沒有CharacterController。所有其他值均爲默認設置:同步比率爲9(同時嘗試更高的值),運動閾值爲0.001,捕捉閾值爲5,插值運動爲1.

如何在網絡上獲得流暢的基於根音運動?我期望這是一個標準的場景......

回答

0

你需要的是在非本地實例上使根運動標誌不可用,但也可以插入旋轉,而不僅僅是運動。

此外,1的插值似乎很高,與5的閾值相同:除非您不使用1單位= 1米的Unity標準,否則這些插值似乎不太實際。我會有一個25釐米(0.25)的插值運動和3度的旋轉。 9的同步速率可能就足夠了,但根據我的經驗,它必須根據數據包丟失重新計算。