
캐릭터의 애니메이터 컨트롤러를 스크립트처럼 만들면 개발 주기 전반에 걸쳐 간단하게 재사용하고 지원하고 디버깅할 수 있습니다.
아래의 모든 스크린샷은 Campo Santo의 파이어워치에서 캐릭터 헨리의 애니메이션에서 온 것입니다.

블렌드 트리는 복잡도를 숨기기에 적합합니다. 블렌드 트리는 코드로 다시 호출하지 않으므로 상태가 없습니다. 정의한 파라미터에 따라 여러 클립을 블렌딩합니다.
이는 게임의 나머지 부분을 손상시키지 않도록 걱정하지 않고도 Blend Trees에서 반복 작업을 수행할 수 있다는 의미입니다. Blend Tree의 대부분의 애니메이션에 동작을 연결할 수 없기 때문에 복잡한 상태 웹을 숨기고 실시간으로 버그를 방지할 수 있습니다.

스크립트에서 레이어를 클래스로 생각하는 것이 좋습니다. 하나의 레이어에 있는 모든 요소가 동일한 논리적 기능과 동작 함수를 모두 제공하도록 합니다. 이는 각 개별 레이어가 어떤 다른 레이어를 오버라이드할지 제어하기 때문입니다. 특정 뼈대에 영향을 주는지, 해당 레이어가 추가되는지 등.
상태 및 서브셋 머신에서 재사용 가능한 논리적 패턴을 사용하면 개발 속도를 높이고, 디버깅을 용이하게 하고, 버그를 줄일 수 있으므로 여러 사람이 유사한 콘텐츠를 만들 수 있습니다.
다음 섹션에서는 레이어를 구조화하는 데 유용한 패턴을 소개합니다.

이 패턴을 사용하면 전환이 벗어나 빈 상태로 돌아오는 것을 명확하게 볼 수 있으므로 디버깅이 더 쉬워집니다. 허브의 모든 스피크는 터치하는 상태를 초기화해야 합니다.
스포크는 다음 패턴을 사용하여 서브셋 머신을 만드는 데 유용합니다.

상태를 'intro'(실행/루프)의 'outro' 패턴으로 그룹화하면 모든 애니메이션 이벤트나 상태 머신 동작을 Intro 상태와 Outro 상태에 깔끔하게 연결할 수 있습니다. 블렌드 트리와 마찬가지로 게임 손상에 대해 걱정하지 않고도 내부 실행/ 루프 상태를 반복하고 변경할 수 있습니다.

중단 가능한 애니메이션, 특히 플레이어 입력 기반 애니메이션의 경우 클립을 두 부분으로 나눌 수 있습니다. 먼저 모든 상태 변경 사항, 효과, 데미지를 포함하는 중요 섹션을 유지하세요. 이 섹션은 항상 재생되어야 합니다. 둘째, 대기 상태로 되돌아가고 새로운 입력으로 인해 중단될 수 있는 안정적인 애니메이션을 설계합니다.
애니메이션이 원하는 대로 작동하고 표시되면, 애니메이터의 상태를 게임 상태로 다시 반영해야 합니다. 다음 섹션에서 몇 가지 주요 사항을 기억하세요.
상태 머신 동작은 모든 애니메이션 상태에 연결할 수 있는 코드 조각입니다. 이를 통해 애니메이터 자체의 상태에 동작을 직접 연결할 수 있습니다.
상태의 변경 사항이 어디에서 발생하는지 추적하기 어려워지므로 복잡한 게임플레이 코드를 작성하지 마세요. State Machine Behaviour를 사용하여 게임플레이 코드를 구동하는 경우, 메시징 시스템을 활용하거나, 관리자 클래스에 문의하거나, 상위 수준의 파라미터에서 코드를 트리거하세요.
Debug.Break()는 가장 효과적인 상태 머신 동작 중 하나입니다. 애니메이션 설정의 어느 위치에든 연결하면 비주얼 스크립팅 시스템과 유사한 중단점이 생깁니다.
적절한 경우 C# 코드를 사용하세요. 수백 또는 수천 개의 전환을 관리하거나 모든 곳에 AnyState 전환을 연결하는 대신 Animator.Play 또는 Animator.CrossFade를 사용하여 코드에서 직접 전환을 동적으로 생성하세요. 여전히 충분히 제어할 수 없다면 Unity Playables API 코드를 사용하여 애니메이션화하는 더 많은 방법을 알아보세요. 몇 가지 예는 여기에서 볼 수 있습니다.

애니메이션 이벤트는 애니메이션 클립의 특정 순간을 게임의 특정 상태 변경에 연결합니다. 시각 및 음향 효과와 같은 요소를 설정하는 데 사용할 수 있습니다. 하지만 클립이 발사되기 전에 클립에서 전환하지 않으면 결코 발사되지 않습니다. 이 문제를 해결하는 한 가지 방법은 특정 시점에 도달했을 때 게임에서 어떤 일이 일어나거나 일어나지 않는지에 관계없이 항상 이벤트가 발사되는 상태 머신 동작을 추가하는 것입니다.