This document is about: FUSION 2
SWITCH TO

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()

トリガーは一時的なため、NetworkMecanimAnimatorAnimatorコンポーネントの値を捕捉する前に、ブール値がfalseにリセットされてしまう可能性があります。そのため、Animator.SetTrigger()のかわりに、NetworkMecanimAnimator.SetTrigger()メソッドを使用してください。NetworkMecanimAnimator.SetTrigger()には、便利なpassThrouhOnInputAuthorityオプションもあり、入力権限者ではAnimator.SetTrigger()に即時に値が渡されるようになります。

Back to top