Network Mecanim Animator
概述
NetworkMecanimAnimator
同步由相關Unity mecanim Animator
元件保存的參數的狀態和值。
重要的是,由於Unity的Animator
元件不能倒帶和重新模擬(它僅設計為向前運行),並且因為不能準確設定為刷新的狀態,因此不能依賴它來製作刷新準確的動畫。
由於這種「僅向前」的限制,NetworkMecanimAnimator
不會嘗試重新模擬,並且NetworkMecanimAnimator
只會將Animator
元件從狀態授權同步到代理。輸入授權還應在向前刷新時對動畫器應用更改。
注意: 在許多情況下,使用NetworkMecanimAnimator
可能不是同步動畫的理想答案。請務必參照動畫概念與模式部分以獲取更多資訊。
用途
任何控制器程式碼都應將輸入應用於狀態授權和輸入授權,而不是代理。如果您使用Fusion的輸入系統,則會自動執行此操作。
C#
void FixedUpdateNetwork()
{
// Only apply changes to the Animator if input is available
// (which is true for StateAuthority and InputAuthority),
// and only on Forward ticks (resimulation should be ignored).
if (GetInput(out var input) && Runner.IsForward)
{
// Apply inputs to Animator
}
}
不使用Fusion輸入處理的共享模式
共享模式不需要使用Fusion輸入系統,您可以自己處理輸入收集和應用程式。在這種情況下,一定要將輸入限制為僅適用於狀態授權。
C#
void FixedUpdateNetwork()
{
// In Shared Mode:
// Only apply changes to the Animator on the StateAuthority.
if (HasStateAuthority)
{
// Apply inputs to Animator
}
}
SetTrigger()
使用穿過NetworkMecanimAnimator.SetTrigger()
方法而不是Animator.SetTrigger()
調用,因為觸發器是瞬態的,在NetworkMecanimAnimator
捕獲Animator
元件的值之前,後備布林值可能會重置為偽。NetworkMecanimAnimator.SetTrigger()
還有一個passThroughOnInputAuthority
選項,它會立即傳遞到輸入授權上的Animator.SetTrigger()
,這是為了方便起見。