State Pattern 캐릭터 상태 관리 - cheona-thousand-man/Unity-myBasics-Wiki GitHub Wiki

1. 상태 패턴: 객체가 내부 상태를 기반으로 움직이게 하는 시스템

  • Context 클래스 클라이언트가 객체 내부 상태를 변경할 수 있도록 요청하는 인터페이스 정의, 현재 상태 포인터 보유
  • Istate 인터페이스 구체적인 상태 클래스로 연결할 수 있도록 설정
  • ConcreteState 클래스 Istate 인터페이스 구현, Context 오브젝트가 상태 동작을 트리거하기 위해 호출하는 public handle() 메서드 보유

2. 구현 예제 UML

image

3. 장·단점

  • 장점
    • 캡슐화
      • 상태가 변할 때 개체에 동적으로 할당할 수 있는 컴포넌트의 집합
      • 개체의 상태별 행동 구현
    • 유지 및 관리
      • 긴 조건문이나 방대한 클래스의 수정 없이, 새로운 상태 구현 용이
  • 단점 → Unity Animator로 극복 가능
    • 블렌딩
      • 기본 형태에서 애니메이션 블렌드 방법 미제공
      • 캐릭터 애니메이션 상태 간 시각적 전환이 원활하지 않을 수 있음
    • 전환
      • 패턴 구현에서 상태 간 관계 미정의
      • 관계와 조건에 따른 상태간 전환을 위한 코드 작성 필요(코드 복잡 가능성O)

4. 대안

  • 블랙보드/행동 트리 NPC의 복잡한 AI 구현 등
  • 유한 상태 기계(FSM; Finite State Machine) 특정 입력 트리거 기반으로 유한 상태 간 전환 / 자동 기계 시스템 구현 등
  • 메멘토 개체의 이전 상태로 돌아가는 기능 제공