icon안동민 개발노트

스테이트 머신의 기본 활용


 스테이트 머신은 애니메이션 블루프린트에서 복잡한 캐릭터 동작을 관리하는 강력한 도구입니다.

 이를 통해 다양한 애니메이션 상태와 그 사이의 전환을 효과적으로 제어할 수 있습니다.

스테이트 머신의 기본 개념

 스테이트 머신은 다음과 같은 주요 요소로 구성됩니다.

  1. 스테이트 : 특정 애니메이션 상태를 나타냄 (예 : 대기, 걷기, 달리기)
  2. 트랜지션 : 한 스테이트에서 다른 스테이트로의 전환 규칙
  3. 조건 : 트랜지션이 발생하기 위한 조건
  4. 블렌드 타임 : 스테이트 간 전환 시 애니메이션 블렌딩 시간

스테이트 생성 및 설정

  1. 애니메이션 블루프린트의 애님 그래프 열기
  2. '새 스테이트 머신 추가' 버튼 클릭
  3. 스테이트 머신 내에서 우클릭하여 새 스테이트 추가
  4. 각 스테이트에 해당하는 애니메이션 시퀀스 또는 블렌드 스페이스 연결

 예시 : 기본 이동 스테이트 머신

[Idle State] --- 속도 > 10 ---> [Walk State]
    ^                               |
    |                               |
    +--------- 속도 < 10 ------------+

트랜지션 규칙 설정

  1. 두 스테이트 사이에 화살표를 드래그하여 트랜지션 생성
  2. 트랜지션을 더블클릭하여 규칙 편집 창 열기
  3. 조건 노드를 추가하여 전환 조건 설정

 예시 : 걷기에서 달리기로의 전환

[Get Character Speed] --> [> (Greater Than)] --> [Result]
                              |
         [Threshold Value] ---+

블렌드 타임 조정

  1. 트랜지션 규칙 편집 창에서 '상세 설정' 섹션 확장
  2. 블렌드 타임 값 설정 (초 단위)
블렌드 인 시간: 0.2
블렌드 아웃 시간: 0.2

 이렇게 설정하면 스테이트 전환 시 0.2초 동안 부드럽게 블렌딩됩니다.

조건부 트랜지션 구현

 복잡한 전환 조건을 구현하기 위해 여러 조건을 조합할 수 있습니다.

 예시 : 점프 상태로의 전환

[Is On Ground] AND [Jump Button Pressed] --> [Can Transit to Jump]

스테이트 노티파이 이벤트 활용

 스테이트 노티파이를 사용하여 특정 애니메이션 지점에서 이벤트를 발생시킬 수 있습니다.

  1. 애니메이션 시퀀스에서 노티파이 추가
  2. 애니메이션 블루프린트의 이벤트 그래프에서 해당 노티파이 이벤트 처리

 예시 : 발소리 효과 추가

Event AnimNotify_FootStep
    |
[Play Sound] --> [Spawn Particle Effect]

복잡한 애니메이션 로직 구현

 스테이트 머신을 활용하여 복잡한 캐릭터 동작을 구현할 수 있습니다.

 예시 : 전투 시스템 스테이트 머신

[Idle Combat] ---> [Light Attack]
      ^               |
      |               v
      |        [Heavy Attack]
      ^               |
      |               v
[Block/Parry] <--- [Dodge]

 이 구조에서 각 공격 스테이트는 다른 공격으로 연계되거나 회피나 방어 동작으로 전환될 수 있습니다.

성능 고려사항 및 최적화

 1. 스테이트 수 최적화

  • 너무 많은 스테이트는 성능 저하를 초래할 수 있음
  • 유사한 스테이트는 블렌드 스페이스로 통합 고려

 2. 트랜지션 조건 최적화

  • 복잡한 조건은 성능에 영향을 줄 수 있음
  • 가능한 간단한 조건 사용, 필요시 사전 계산 값 활용

 3. 캐싱 활용

  • 자주 사용되는 변수나 계산 결과 캐싱
[Calculate Complex Value] --> [Cache Result]
                           --> [Use in Transitions]

 4. 레이어드 스테이트 머신 사용

  • 신체 부위별로 별도의 스테이트 머신 사용
  • 예 : 하체 이동, 상체 동작 분리

 5. 불필요한 업데이트 방지

  • 관련 없는 스테이트의 불필요한 평가 방지
[Is Relevant State Active?] --> [Branch]
                                    |
            [Evaluate Conditions] <-- [True]

고급 스테이트 머신 테크닉

 1. 서브 스테이트 머신

  • 복잡한 로직을 캡슐화하여 관리 용이성 향상
[Main State Machine]
      |
[Combat Sub-State Machine]
      |
[Weapon Specific Sub-State Machine]

 2. 스테이트 태그 시스템

  • 스테이트에 태그를 할당하여 그룹화 및 쉬운 참조 가능
태그: "공중 동작"
스테이트: 점프, 낙하, 공중 공격

 3. 동적 트랜지션 규칙

  • 게임플레이 상황에 따라 트랜지션 규칙 동적 변경
[Check Player Skill Level] --> [Set Transition Difficulty]

 4. 블렌드 프로파일 활용

  • 스테이트 전환 시 세밀한 블렌딩 제어
  • 신체 부위별 다른 블렌드 타임 적용 가능

예제 : 종합적인 캐릭터 동작 시스템

[Idle] ---> [Movement] ---> [Combat]
  ^           |  ^           |
  |           v  |           v
  +----- [Interaction] <--- [Special Abilities]
 
Movement Sub-State Machine:
[Walk] <--> [Run] <--> [Sprint]
  ^           ^
  |           |
  v           v
[Crouch] <--> [Prone]
 
Combat Sub-State Machine:
[Combat Idle] --> [Light Attack] --> [Heavy Attack]
     ^                  ^                 |
     |                  |                 v
     +------ [Block] <--+---- [Dodge] <---+

 이 예제는 기본 동작, 이동, 전투, 상호작용, 특수 능력 등 다양한 캐릭터 상태를 포괄하는 종합적인 스테이트 머신 구조를 보여줍니다.

 각 주요 스테이트는 자체적인 서브 스테이트 머신을 가질 수 있어 복잡한 동작을 체계적으로 관리할 수 있습니다.