1. 언리얼 엔진 State Tree 소개 및 기본 설정 [0]

thumbnail

State Tree는 행동 트리와 상태 머신을 결합하여 AI 행동을 구현하는 새로운 방식이다. AI 컨트롤러 없이 액터 자체에 적용 가능하며, 복잡한 AI 로직을 모듈화하고 재사용성을 높이는 데 유용하다.

1.1. State Tree 플러그인 활성화 및 프로젝트 설정 [0]

  1. 플러그인 활성화:
    • Edit 메뉴에서 Plugins 탭을 연다.
    • State Tree 플러그인을 검색하여 Gameplay State Tree와 State Tree를 모두 활성화한다.
    • 프로젝트를 재시작하여 플러그인을 로드한다.

1.2. State Tree와 Behavior Tree의 유사점 및 차이점 [5]

  • 유사점: State Tree는 Behavior Tree와 유사하게 상태 간 전환 및 작업 실행 방식을 지원한다.
  • 차이점: State Tree는 상태 머신과 행동 트리의 장점을 결합한 형태로, 더 많은 유연성을 제공한다.

2. State Tree 컴포넌트 종류 및 스키마 [8]

thumbnail

State Tree는 두 가지 주요 컴포넌트와 스키마를 통해 작동한다.

2.1. State Tree 컴포넌트 종류 [8]

  • State Tree Component:
    • 액터 자체에 직접 부착된다.
    • AI 컨트롤러 없이 작동하므로 일반 액터에서도 사용 가능하다.
    • 이 시리즈에서는 주로 이 컴포넌트를 사용한다.
  • State Tree AI Component:
    • AI 컨트롤러에 부착된다.
    • 여러 액터에 동일한 행동을 부여해야 할 때 유용하다.

2.2. 스키마(Schema)의 역할 [9]

  • 스키마는 State Tree 컴포넌트와 State Tree AI 컴포넌트의 유일한 차이점이다.
  • 스키마는 State Tree가 사용할 기본 데이터와 실행될 객체 유형을 결정한다.
  • State Tree Component Schema: 액터 자체의 State Tree 컴포넌트에서 실행되며, AI 컨트롤러가 필요 없다.
  • State Tree AI Component Schema: AI 컨트롤러에서 실행되며, AI 컨트롤러와 액터 정보를 모두 활용한다.
  • 커스텀 스키마: C++로 제작 가능하며, 특정 액터 타입에 필요한 고유 데이터를 자동으로 제공할 수 있다.

2.3. 컨텍스트 변수(Context Variables) [36]

  • 컨텍스트 변수는 State Tree의 태스크에서 자동으로 제공되는 참조 변수이다.
  • 스키마에서 설정한 액터 클래스에 따라 접근 가능한 변수가 달라진다.
    • 일반적인 Actor 스키마: Actor 컨텍스트 변수만 제공된다.
    • 특정 액터 클래스(예: StateTreeCharacter) 스키마: 해당 클래스의 변수에 접근 가능하다.
  • 이 개념은 다음 영상에서 커스텀 태스크 제작 시 더 명확해질 것이다.

3. State Tree의 주요 설정 항목 [45]

thumbnail

State Tree 에디터에서 설정할 수 있는 다양한 항목들을 살펴본다.

3.1. 파라미터(Parameters) [45]

  • State Tree 전반에 사용되는 변수이다.
  • Behavior Tree의 블랙보드 키와 달리, 주로 한 번 설정되면 변경되지 않는 값이다.
  • 런타임 시 설정하는 것은 불안정할 수 있으며, 패키지 빌드 시 충돌을 유발할 수 있다.
  • 에디터 내에서 설정하거나 C++ 또는 블루프린트를 통해 설정할 수 있다.

3.2. 테마(Themes) [61]

  • State Tree 내 각 상태에 시각적인 색상을 지정하여 가독성을 높이는 기능이다.
  • 기능적인 영향은 없으며, 개발자의 편의를 위한 것이다.

3.3. 상태(States)의 세부 설정 [70]

  • 각 상태는 자체 파라미터를 가질 수 있다. (런타임 시 설정은 불안정)
  • Enter Condition: 상태 진입 조건을 설정한다.
  • Transitions: 다른 상태로 전환하는 조건을 설정한다.
  • Tasks: 상태가 활성화되었을 때 실행될 실제 로직(코드)이다.

4. State Tree의 선택 행동(Selection Behavior) [76]

thumbnail

State Tree 노드가 자식 상태를 선택하는 방식에 대한 설정이다.

4.1. 선택 행동 종류 [77]

  • Try Select Children in Order: 자식 상태들을 순서대로 시도하며, 진입 조건이 만족되는 첫 번째 상태를 선택한다. Behavior Tree와 유사하게 작동한다.
  • None: 해당 상태를 선택 불가능하게 만든다. (사용 빈도 낮음)
  • Try Enter: 해당 상태를 즉시 진입하며, 자식 상태를 활성화하지 않는다. 해당 상태 자체의 태스크만 실행된다.
  • Try Follow Transitions: 해당 상태의 자체 태스크 대신, 설정된 전환 조건을 우선적으로 시도한다. 전환이 가능하면 해당 전환을 따르고, 불가능하면 자체 태스크를 실행한다.

4.2. 상태 선택 시 계층 구조 [78]

  • 자식 상태가 선택되면 부모 상태도 함께 활성화된 것으로 간주된다.
  • 명시적으로 자식 상태를 선택하면 해당 상태의 모든 부모 상태도 활성화된다.

5. State Tree의 상태 종류(Types of States) [114]

thumbnail

State Tree 내에서 사용할 수 있는 다양한 상태 유형이다.

5.1. 상태 유형 [114]

  • State: 가장 기본적인 상태로, 자식 상태와 태스크를 포함할 수 있다. 깊게 중첩 가능하다.
  • Group: 태스크가 없는 상태로, 순수하게 조직화 목적으로 사용된다.
  • Linked: 다른 State Tree 에셋(Subtree) 또는 독립적인 State Tree 에셋(Linked Asset)을 연결하여 실행한다.
    • Subtree: 현재 State Tree 내에서 마킹된 특정 상태를 서브 트리로 지정하고 연결한다.
    • Linked Asset: 별도의 State Tree 에셋을 연결하여 실행한다. 모듈화 및 재사용성이 높다.

6. State Tree 태스크(Tasks) 제작 및 활용 [146]

thumbnail

State Tree에서 실제 로직을 수행하는 태스크를 제작하고 활용하는 방법을 설명한다.

6.1. 태스크 제작 기본 [146]

  • State Tree Task Blueprint Base를 상속받아 새로운 태스크 블루프린트를 생성한다.
  • 주요 오버라이드 함수:
    • Enter State: 상태 진입 시 실행된다.
    • Exit State: 상태 종료 시 실행된다.
    • State Completed: 상태 완료 시 실행된다.
    • Tick: 상태가 활성화된 동안 매 프레임 실행된다.
  • 태스크는 Actor 컨텍스트 변수를 통해 현재 실행 중인 액터를 참조할 수 있다.
  • Finish Task (실제로는 Finish State): 태스크 완료를 알리고 성공/실패 여부를 설정한다.

6.2. 커스텀 태스크 제작 예시: AI 이동 태스크 [178]

  • ST Move To Non-AI: AI 컨트롤러 없이 액터 자체에서 이동 기능을 구현하는 태스크이다.
    • Move To Location or Actor 함수를 사용하여 이동을 실행한다.
    • On Request Failed 및 On Move Finished 핀을 통해 이동 결과를 처리한다.
    • Actor 컨텍스트 변수와 Move To Location 파라미터를 사용한다.

6.3. 태스크 간 데이터 공유 및 바인딩 [220]

  • 컨텍스트 변수 활용: Context 카테고리를 사용하여 액터 컨텍스트 변수를 태스크에 자동으로 바인딩한다.
  • 파라미터 바인딩: State Tree의 파라미터를 태스크의 변수에 바인딩하여 동적으로 값을 전달한다.
  • 출력(Output) 변수: 태스크에서 계산된 값을 출력 변수로 설정하여 다른 태스크나 상태에서 참조할 수 있게 한다.
  • 입력(Input) 변수: 태스크 실행 시 반드시 외부에서 값을 받아야 하는 변수로 설정하여, 누락 없이 값을 전달하도록 강제한다.

7. State Tree 전환(Transitions) 및 조건(Conditions) [326]

thumbnail

상태 간 전환을 제어하고 특정 조건에 따라 상태 진입을 결정하는 방법을 설명한다.

7.1. 전환(Transitions) 설정 [326]

  • On State Completed: 상태 완료 시 전환을 트리거한다.
  • On Tick: 매 프레임 조건을 확인하여 전환을 트리거한다.
  • On Event: 특정 게임플레이 태그 이벤트 발생 시 전환을 트리거한다.
  • 전환 대상:
    • None: 전환 없음.
    • Next State: 다음 형제 상태로 전환한다.
    • Next Selectable State: 다음 선택 가능한 형제 상태로 전환한다.
    • Succeed/Fail: State Tree 전체의 성공 또는 실패를 표시한다. (Subtree 활용 시 유용)

7.2. 조건(Conditions) 활용 [370]

  • 기본 제공 조건:
    • Compare Bool, Distance Compare, Float Compare, Integer Compare 등 다양한 비교 조건을 제공한다.
    • Random Chance: 특정 확률로 전환을 트리거한다.
  • 커스텀 조건 제작: State Tree Condition Blueprint Base를 상속받아 Receive Test Condition 함수를 오버라이드하여 사용자 정의 조건을 만든다.
    • 예시: STC Distance To Player - 플레이어와의 거리를 비교하는 커스텀 조건.
  • 진입 조건(Entry Condition): 특정 상태에 진입하기 위한 조건을 설정한다. 조건이 만족되지 않으면 해당 상태는 진입할 수 없다.

8. State Tree의 평가자(Evaluators) 및 전역 태스크(Global Tasks) [463]

thumbnail

State Tree 전체에 걸쳐 작동하는 로직을 구현하는 방법을 설명한다.

8.1. 평가자(Evaluators) [463]

  • State Tree 전체의 상태에 걸쳐 실행되는 태스크이다.
  • 주로 Tick 함수를 통해 주기적으로 값을 업데이트하거나 계산하는 데 사용된다.
  • State Tree Evaluator Blueprint Base를 상속받아 제작한다.
  • Tree Start, Tree Stop, Tick 함수를 오버라이드할 수 있다.
  • 예시: 시작 위치를 저장하는 ST Get Start Location 평가자.

8.2. 전역 태스크(Global Tasks) [463]

  • 평가자와 유사하게 State Tree 전체에 걸쳐 작동하지만, 일반 태스크를 전역적으로 사용할 수 있게 한다.
  • 평가자는 주로 값 계산 및 업데이트에 특화되어 있으며, 전역 태스크는 더 일반적인 태스크 기능을 전역적으로 제공한다.
  • 평가자가 더 최신 기능이며, 전역 태스크보다 유연성이 높다.

8.3. 평가자 및 전역 태스크 활용 예시 [489]

  • 시작 위치를 저장하는 평가자를 사용하여 AI가 특정 반경 내에서만 순찰하도록 제어한다.
  • 평가자에서 계산된 값을 다른 태스크(예: 이동 태스크)의 파라미터에 바인딩하여 사용한다.

9. State Tree의 유틸리티 기반 선택(Utility-Based Selection) (Unreal Engine 5.5+) [700]

thumbnail

Unreal Engine 5.5부터 추가된 기능으로, State Tree 노드의 선택 로직을 더욱 지능적으로 만드는 방법이다.

9.1. 유틸리티 점수(Utility Scores) [700]

  • 각 노드에 가중치(Weight)와 점수(Score)를 부여하여, 가장 높은 점수를 가진 노드를 선택하도록 한다.
  • 점수는 상수 값, 다른 변수 바인딩, 또는 응답 곡선(Response Curve)을 통해 동적으로 결정될 수 있다.

9.2. 선택 방법 [705]

  • Try Select Children in Order: 기존 방식대로 순서대로 선택한다.
  • Try Select by Highest Utility: 가장 높은 유틸리티 점수를 가진 노드를 선택한다.
  • Select Randomly Weighted by Utility Scores: 유틸리티 점수에 따라 확률적으로 노드를 선택한다.

9.3. 유틸리티 점수 활용 예시 [712]

  • HP 기반 행동 결정: 캐릭터의 HP 비율에 따라 공격(Run to Player) 또는 도주(Run Away) 행동을 선택하도록 설정한다.
  • 거리 기반 행동 결정: 플레이어와의 거리에 따라 공격 또는 도주 행동의 우선순위를 동적으로 조절한다.
  • Enum 기반 행동 결정: 캐릭터의 감정 상태(Aggression State: Angry, Neutral, Scared)에 따라 행동을 다르게 결정한다.
  • 응답 곡선(Response Curve): 입력 값(예: 거리)을 0~1 스케일로 정규화하여 유틸리티 점수에 적용한다.

9.4. Unreal Engine 5.5의 개선 사항 [793]

  • 벡터 변수 바인딩 개선: Get Actor Location 함수를 사용하여 벡터 파라미터를 쉽게 바인딩할 수 있다.
  • 기본 제공 조건 강화: Distance Compare와 같은 조건에서 액터 위치를 쉽게 가져와 비교할 수 있다.

10. State Tree의 링크 에셋(Linked Assets) 및 재사용성 [803]

thumbnail

State Tree를 모듈화하고 재사용 가능한 방식으로 구성하는 방법을 설명한다.

10.1. 링크 에셋의 개념 및 장점 [803]

  • State Tree의 특정 부분을 별도의 에셋으로 분리하여 재사용성을 높인다.
  • Subtree와 유사하지만, Linked Asset이 더 체계적인 관리 방식을 제공한다.
  • 주요 장점:
    • 코드 중복 감소 및 유지보수 용이성 증대.
    • 메인 State Tree의 가독성 향상.

10.2. 링크 에셋 제작 및 연결 [811]

  • 기존 State Tree를 복사하여 Patrol 및 Chase Target과 같은 별도의 에셋으로 만든다.
  • 각 링크 에셋은 해당 기능에 필요한 로직만 포함하도록 정리한다.
  • 메인 State Tree에서 해당 링크 에셋을 Linked Asset으로 연결한다.
  • 파라미터(예: Walk Distance, Origin Location)를 통해 메인 State Tree와 링크 에셋 간에 데이터를 전달한다.

10.3. 링크 에셋 활용 시 주의사항 [841]

  • 링크 에셋 간의 직접적인 상태 전환은 불가능하다. 전환은 메인 State Tree 또는 각 링크 에셋 내에서 관리해야 한다.
  • 불필요한 전환이나 조건을 제거하여 충돌을 방지해야 한다.

11. State Tree의 이벤트(Events) 및 전환 활용 [883]

thumbnail

외부에서 State Tree로 메시지를 보내 상태 전환을 트리거하는 방법을 설명한다.

11.1. 이벤트 기반 전환 [883]

  • On Event 전환은 특정 게임플레이 태그 이벤트 발생 시 트리거된다.
  • 이벤트 태그(예: event.scene, event.unseen)를 설정하여 특정 상황을 감지한다.
  • 이벤트 발생 시 페이로드(Payload)를 통해 추가 정보를 전달할 수 있다.
  • 이벤트 우선순위(Priority) 및 지연(Delay) 설정이 가능하다.

11.2. 이벤트 시스템 구현 [923]

  • AI 컨트롤러 및 지각 컴포넌트:
    • AI 컨트롤러에 AI Perception Component를 추가하여 시야 감지를 설정한다.
    • On Target Perception Updated 이벤트를 통해 감지된 액터 정보를 얻는다.
    • 감지된 액터가 플레이어인지 확인하고, 시야에 들어오거나 사라졌을 때 State Tree로 이벤트를 전송한다.
  • 이벤트 전송:
    • State Tree Component의 Send Event 함수를 사용하여 event.scene (감지됨) 또는 event.unseen (감지되지 않음) 이벤트를 전송한다.
  • 활용 예시:
    • 플레이어가 시야에 들어오면 event.scene을 보내 추격 상태로 전환한다.
    • 플레이어가 시야에서 사라지면 event.unseen을 보내 순찰 상태로 복귀한다.

11.3. State Tree의 확장성 및 활용 분야 [962]

  • State Tree는 AI뿐만 아니라 대화 트리, 퀘스트 진행 시스템 등 다양한 게임 로직 구현에 활용될 수 있다.
  • 기존 시스템을 대체하거나 보완하는 강력하고 유연한 도구이다.
  • 지속적인 업데이트를 통해 기능이 개선되고 있으므로, 최신 버전을 활용하는 것이 좋다.