WWolves Den

애니메이션 · 약 3분

Idle과 이동 상태를 전환하는 애니메이션 상태 머신

상태, 단방향 전이, 조건, 블렌드 시간을 나누어 걷기와 정지의 연결을 설계합니다.

Wolfgadeok · 업데이트

상태와 전이는 다른 책임을 갖는다

애니메이션 상태 머신에서 State는 그 상태에 있을 때 어떤 포즈를 만들지 정의한다. Idle 안에는 정지 시퀀스가, Walk/Run 안에는 이동 Blend Space가 들어갈 수 있다. Transition은 언제 다른 상태로 넘어갈 수 있는지 정한다. 상태 이름만 Walk라고 지어도 걷기 동작이 자동으로 생기지는 않는다.

Idle에서 Walk/Run으로 가는 화살표와 되돌아오는 화살표는 각각 다른 전이다. 기초 예제로는 ShouldMove가 참이면 이동 상태로, 거짓이면 Idle로 복귀하도록 구성할 수 있다. 간단하지만 상태 내용, 전이 방향, 조건의 세 부분을 따로 확인하기 좋다.

Idle과 Walk Run을 양방향 전이로 연결한 애니메이션 상태 머신
Idle과 Walk / Run의 전이는 각 화살표에 조건을 따로 설정합니다. 선을 연결하는 것만으로 이동 조건이 완성되지는 않습니다. 이전 버전의 에디터 화면으로, 현재 버전과 메뉴 배치가 다를 수 있습니다. 이미지를 누르면 크게 볼 수 있습니다.

최소 상태 머신 구성하기

학습용 상태 머신은 많은 상태를 한꺼번에 만들기보다 두 상태만 정확히 연결해 보는 편이 좋다. 캐릭터의 실제 이동 로직은 그대로 두고 애니메이션 출력만 바꾸면 검증 범위를 좁힐 수 있다.

  1. AnimGraph에 상태 머신을 추가하고 결과를 Output Pose로 연결한다.
  2. 상태 머신 안에 Idle과 Move를 만들고 Entry를 초기 상태에 연결한다.
  3. Idle 안에서 정지 시퀀스를, Move 안에서 이동 시퀀스 또는 Blend Space를 해당 상태의 Output Pose에 연결한다.
  4. Idle → Move와 Move → Idle 전이를 각각 만든다. 전자에는 ShouldMove, 후자에는 그 반대 조건을 연결한다.
  5. 짧은 이동과 정지, 연속 방향 전환을 시험하며 활성 상태와 블렌드 과정을 함께 관찰한다.

조건이 맞는데도 어색한 경우

전이 조건은 '넘어갈 수 있는가'를 판단하고 블렌드 설정은 '어떻게 섞여 넘어가는가'를 결정한다. 조건은 정확한데 동작이 튀면 두 시퀀스의 자세와 전이 시간을 확인해야 한다. 반대로 전이 시간을 길게 주어도 조건이 참과 거짓을 빠르게 오가면 근본적인 떨림은 남을 수 있다.

상태 이름과 변수 이름이 충분히 설명적인지도 본다. IsMoving이 실제 속도를 뜻하는지 입력 의도를 뜻하는지 모호하면 전이를 읽기 어렵다. 각 변수가 어디에서 갱신되는지 주석이나 작은 함수 이름으로 드러내면 그래프를 열지 않은 사람도 규칙을 파악하기 좋다.

게임 상태 머신과 동일하게 취급하지 않기

애니메이션 상태 머신이 이동 포즈를 선택한다고 게임의 AI나 공격 판정 전체를 반드시 이곳에서 관리해야 하는 것은 아니다. 게임플레이의 사실과 화면 표현의 상태를 연결하되 책임을 나누어야 한다. 예를 들어 사망 여부는 게임 로직의 확정 상태이고 사망 모션의 블렌드 시간은 표현의 선택일 수 있다.

상태가 늘어나면 지상 이동을 다루는 Locomotion, 공중, 무기 자세처럼 책임을 나누는 구성이 도움이 된다. 모든 상태를 하나의 거대한 상태 머신에 넣을 필요는 없다. 재사용과 디버깅이 쉬운 단위로 분리하고, 실제 출력까지의 연결이 명확한 구조를 선택한다.

참고 자료