Network Mecanim Animator
개요
NetworkMecanimAnimator
는 Unity의 메카님(Animator
) 컴포넌트에 설정된 상태 및 파라미터 값을 동기화하는 역할을 합니다.
Unity의 Animator
컴포넌트는 시간의 역방향으로 되감거나 재시뮬레이션되는 것이 불가능하며, 특정 틱의 상태로 정확하게 설정할 수 없기 때문에 틱 단위의 정확한 애니메이션 처리를 보장할 수 없습니다.
이러한 "순방향 전용" 한계로 인해, 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 입력 시스템을 사용하지 않는 Shared Mode
Shared Mode에서는 Fusion 입력 시스템을 반드시 사용할 필요는 없으며, 입력 수집 및 적용을 직접 처리할 수 있습니다. 이 경우, 입력은 State Authority에서만 Animator에 적용되도록 제한해야 합니다.
C#
void FixedUpdateNetwork()
{
// In Shared Mode:
// Only apply changes to the Animator on the StateAuthority.
if (HasStateAuthority)
{
// Apply inputs to Animator
}
}
SetTrigger()
트리거는 일시적인 값이기 때문에 Animator.SetTrigger()
대신 NetworkMecanimAnimator.SetTrigger()
메소드를 사용하는 것이 권장됩니다. 일반적으로 트리거에 대응하는 내부 bool 값이 NetworkMecanimAnimator
가 값을 캡처하기 전에 false로 초기화될 수 있기 때문입니다.
또한, NetworkMecanimAnimator.SetTrigger()
에는 passThroughOnInputAuthority
옵션이 있어서 Input Authority에서는 Animator.SetTrigger()
를 즉시 호출하도록 처리할 수 있어 편리합니다.