Network Mecanim Animator
概要
NetworkMecanimAnimator
は、UnityのAnimator
コンポーネントが持つパラメーターの状態と値を同期します。
重要な注意点として、UnityのAnimator
コンポーネントは、ロールバックや再シミュレーションができないため(前方に再生することのみを想定した設計のため)、あるティックの状態に正確な設定はできません。そのため、ティック正確なアニメーションでは、このコンポーネントに依存することはできません。
「前方にしか再生できない(Forward Only)」という制限のため、NetworkMecanimAnimator
は、再シミュレーションは試みずに、状態権限者のAnimator
をプロキシへ同期するのみを行います。入力権限者も、前進ティックで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
がAnimator
コンポーネントの値を捕捉する前に、ブール値がfalse
にリセットされてしまう可能性があります。そのため、Animator.SetTrigger()
のかわりに、NetworkMecanimAnimator.SetTrigger()
メソッドを使用してください。NetworkMecanimAnimator.SetTrigger()
には、便利なpassThrouhOnInputAuthority
オプションもあり、入力権限者ではAnimator.SetTrigger()
に即時に値が渡されるようになります。