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()に即時に値が渡されるようになります。