스크립트처럼 캐릭터용 애니메이터 컨트롤러를 만들면 개발 주기 내내 재사용, 지원, 디버깅이 간편해집니다.
아래 스크린샷은 모두 헨리 캐릭터의 애니메이션에서 가져온 것입니다. Firewatch 의 헨리 캐릭터 애니메이션에서 가져온 것입니다.
블렌드 트리는 복잡성을 숨기는 데 유용합니다. 블렌드 트리는 코드로 다시 호출하지 않으므로 상태가 없습니다. 정의한 매개변수에 따라 여러 클립을 블렌딩합니다.
이 기능의 중요한 점은 게임의 나머지 부분을 망칠 걱정 없이 블렌드 트리를 반복할 수 있다는 것입니다. 블렌드 트리의 대부분의 애니메이션에 동작을 연결할 수 없으므로 복잡한 상태 웹을 숨기고 향후 버그를 방지할 수 있습니다.
레이어를 스크립트의 클래스로 생각하면 도움이 됩니다. 레이어의 모든 항목이 동일한 논리적 기능과 동작 기능을 모두 제공해야 합니다. 이는 각 개별 레이어가 특정 뼈에 영향을 미치는지 여부, 해당 레이어가 부가적인지 여부 등 다른 레이어에 재정의하는 항목을 제어하기 때문입니다.
상태 및 대체 머신의 재사용 가능한 논리적 패턴은 개발 속도를 높이고 디버깅을 용이하게 하며 버그를 줄이는 동시에 여러 사람이 유사한 콘텐츠를 만들 수 있게 해줍니다.
다음 섹션에서는 레이어를 구성하는 데 유용한 패턴을 소개합니다.
이 패턴을 사용하면 전환이 나갔다가 다시 빈 상태로 돌아오는 것을 명확하게 볼 수 있으므로 디버깅이 더 쉬워집니다. 허브의 모든 스포크는 닿는 모든 상태를 초기화해야 합니다.
스포크는 다음 패턴을 사용하여 대체 기계를 만들 수 있는 확실한 후보입니다.
상태를 '인트로 - 실행/루프 - 아웃트로'의 패턴으로 그룹화하면 애니메이션 이벤트나 스테이트 머신 동작을 인트로와 아웃트로 상태에 깔끔하게 연결할 수 있습니다. 블렌드 트리와 마찬가지로 게임 중단에 대한 걱정 없이 내부 실행/루프 상태를 반복하고 변경할 수 있습니다.
인터랙티브 애니메이션, 특히 플레이어 입력 기반 애니메이션의 경우 클립을 두 부분으로 나누세요. 먼저, 모든 상태 변경, 효과, 대미지가 포함된 중요한 섹션을 유지하여 항상 완료까지 재생해야 합니다. 둘째, 유휴 상태로 돌아갈 때 보기 좋으면서도 새로운 입력으로 중단할 수 있는 정착 애니메이션을 고안하세요.
애니메이션이 원하는 대로 작동하고 나타나면 애니메이터의 상태를 게임 상태에 피드백해야 합니다. 다음 섹션에서 유의해야 할 몇 가지 주요 사항을 확인하세요.
스테이트 머신 비헤이비어는 모든 애니메이션 스테이트에 첨부할 수 있는 코드 조각입니다. 이를 사용하여 동작을 애니메이터 자체의 상태에 직접 연결할 수 있습니다.
복잡한 게임플레이 코드를 내부에 작성하면 상태 변경의 출처를 추적하기 어려워질 수 있으므로 피하세요. 스테이트 머신 동작을 사용하여 게임플레이 코드를 구동하는 경우 메시징 시스템을 활용하거나, 매니저 클래스와 대화하거나, 상위 레벨의 파라미터에서 코드를 트리거하세요.
Debug.Break()는 사용할 수 있는 가장 효과적인 상태 머신 동작 중 하나입니다. 애니메이션 설정의 아무 곳에나 부착하면 비주얼 스크립팅 시스템과 유사한 중단점을 갖게 됩니다.
적절한 경우 C# 코드를 사용합니다. 수백, 수천 개의 트랜지션을 관리하거나 애니스테이트 트랜지션을 여기저기 연결하는 대신 Animator.Play 또는 Animator.CrossFade를 사용하여 코드에서 직접 트랜지션을 동적으로 생성할 수 있습니다. 그래도 제어가 충분하지 않다면 코드를 사용하여 애니메이션을 구현하는 더 많은 방법을 알아보려면 Unity의 Playables API를 살펴보세요. 몇 가지 예는 여기에서 확인할 수 있습니다.
애니메이션 이벤트는 애니메이션 클립의 특정 순간을 게임 내 특정 상태 변화에 연결합니다. 시각 효과 및 음향 효과와 같은 요소를 설정하는 데 사용할 수 있습니다. 그러나 클립이 발사되기 전에 클립에서 전환하면 클립이 발사되지 않습니다. 이 문제를 해결하는 한 가지 방법은 게임에서 다른 어떤 일이 발생하거나 발생하지 않더라도 특정 시점에 도달하면 이벤트가 항상 실행되도록 하는 상태 머신 비헤이비어를 추가하는 것입니다.