1. 언리얼 엔진 State Tree 소개 및 작동 방식 [0]

thumbnail 언리얼 엔진의 State Tree는 행동 트리와 상태 머신의 장점을 결합하여 AI 행동을 구현하는 강력한 시스템이다.

1.1. State Tree 활성화 및 기본 개념 [0]

  1. State Tree 플러그인 활성화 [0]
    1. Edit 메뉴에서 Plugins 탭을 열어 State Tree 관련 플러그인 (Gameplay State Tree, Normal State Tree)을 활성화한다. [1]
    2. 프로젝트를 재시작하여 플러그인을 로드한다. [3]
  2. State Tree의 작동 방식 [4]
    1. 행동 트리와 유사성: 많은 부분에서 행동 트리와 유사하게 작동한다. [4]
    2. 유연성 및 상태 전환: 상태 머신처럼 다양한 상태 간 전환을 지원하여 더 큰 유연성을 제공한다. [4]
    3. 정의: 행동 트리와 상태 머신의 장점을 결합한 시스템이다. [5]

1.2. State Tree 컴포넌트 종류 및 스키마 [7]

  1. State Tree 생성 및 스키마 선택 [7]
    1. Artificial Intelligence 메뉴에서 State Tree를 생성한다. [7]
    2. 생성 시 Normal State Tree 컴포넌트 또는 State Tree AI 컴포넌트 스키마를 선택할 수 있다. [8]
    3. C++로 커스텀 스키마를 만들어 추가할 수도 있다. [10]
  2. State Tree 컴포넌트 vs State Tree AI 컴포넌트 [14]
    1. State Tree 컴포넌트: [15]
      • Story Component Schema를 사용하며, 액터 자체에 있는 컴포넌트에서 실행된다. [16]
      • AI 컨트롤러가 필요 없어 일반 액터에서도 작동한다. [17]
    2. State Tree AI 컴포넌트: [19]
      • AI 컨트롤러에서 실행되며, 여러 액터에 동일한 행동을 부여할 때 유용하다. [19]
      • 예시: 여러 동물이 같은 AI 컨트롤러를 공유하여 돌아다니고 플레이어를 피해 도망치게 할 수 있다. [20]
  3. 스키마와 컨텍스트 변수 [23]
    1. 스키마의 역할: State Tree 컴포넌트와 State Tree AI 컴포넌트의 주요 차이점은 사용하는 스키마이다. [23]
    2. 컨텍스트 변수: [27]
      • 스키마는 Context Variables를 제공하며, 이는 태스크에서 참조할 액터와 같은 정보를 자동으로 공급한다. [27]
      • 예시: Actor 클래스 또는 AI Controller 클래스 등을 지정할 수 있다. [26]
    3. 스키마의 유연성: [29]
      • 일반적인 스키마를 사용하여 다양한 액터에서 작동하게 하거나, 특정 클래스(State Tree Character 등)에 맞춰 커스텀 스키마를 만들어 해당 클래스의 변수에 접근할 수 있다. [29]
      • 이는 다음 영상에서 커스텀 태스크 제작 시 더 명확해질 것이다. [28]

1.3. State Tree의 주요 설정 항목 [36]

  1. 파라미터 (Parameters) [36]
    1. 역할: State Tree 내에서 사용되는 변수이며, 블랙보드 키와 유사하지만 주로 한 번 설정되고 변경되지 않는 값이다. [36]
    2. 주의사항: [39]
      • 런타임 시 값을 변경하는 것은 불안정하며 크래시를 유발할 수 있다. [39]
      • 패키지 빌드에서 에디터와 다르게 작동할 수 있으므로, 런타임 시 변경을 시도할 경우 독립적인 빌드로 테스트해야 한다. [44]
      • 현재는 파라미터를 읽는 용도로만 사용하는 것이 권장된다. [41]
    3. 설정: 인터페이스에서 직접 값을 설정할 수 있으며, Walk Distance와 같은 이름으로 지정할 수 있다. [42]
  2. 테마 (Themes) [45]
    1. 기능: State Tree의 각 상태에 색상을 지정하여 시각적으로 구분하는 기능이다. [45]
    2. 목적: 개발자의 가독성을 높이기 위한 시각적 보조 수단이며, 기능적인 영향은 없다. [48]
    3. 예시: Angry 상태에 빨간색, Scared 상태에 노란색을 지정할 수 있다. [46]
  3. 상태 내 파라미터 및 조건 [49]
    1. 상태별 파라미터: 각 상태는 자체적인 파라미터를 가질 수 있으며, 이는 해당 상태 내의 로컬 변수처럼 활용될 수 있다. [51]
      • 런타임 시 설정은 여전히 불안정하다. [54]
    2. 주요 구성 요소: [55]
      • Enter Condition: 상태 진입 조건을 설정한다.
      • Transitions: 다른 상태로 전환하는 로직을 설정한다. (별도 영상에서 다룸)
      • Good Tasks: 상태 내에서 실행될 실제 코드를 정의한다. (별도 영상에서 다룸)

1.4. State Tree의 선택 행동 (Selection Behavior) [59]

  1. 선택 행동의 정의 [60]
    1. State Tree가 어떤 상태를 선택하고 실행할지에 대한 규칙을 정의한다. [60]
    2. 루트 상태부터 시작하여 자식 상태들을 선택하는 방식에 영향을 준다. [61]
  2. 선택 행동 종류 [68]
    1. Try Select Children in Order: [68]
      • 자식 상태들을 순서대로 시도하여 진입 조건을 만족하는 첫 번째 상태를 선택한다. [69]
      • 기본적으로 행동 트리처럼 작동하며, 상태 완료 후 루트로 돌아가 다시 시작한다. [70]
      • State Tree는 상태 머신처럼 작동하는 행동 트리이다. [71]
    2. None: [72]
      • 해당 상태를 선택 불가능하게 만든다. [72]
      • 명시적으로 특정 상태를 진입시키면서 해당 상태 자체는 선택되지 않도록 할 때 사용될 수 있다. [76]
      • 이 설정 시 오류가 발생할 수 있다. [75]
    3. Try Enter: [78]
      • 해당 상태를 진입시키지만, 자식 상태를 활성화하지는 않는다. [78]
      • 해당 상태의 태스크만 실행하며, 자식 상태는 별도로 진입해야 한다. [79]
      • 상태 또는 자식 상태 중 먼저 완료되는 쪽이 전환을 실행한다. [81]
    4. Try Follow Transitions: [82]
      • 자체 태스크를 실행하기 전에, 설정된 전환 조건을 만족하는 다른 상태로 먼저 이동하려고 시도한다.

1.5. State Tree의 상태 종류 (Types of States) [83]

  1. State: [83]
    1. 가장 기본적인 상태 유형이다. [83]
    2. 자식 상태를 포함할 수 있으며, 깊게 중첩될 수 있다. [84]
    3. 실제 코드를 실행하는 Tasks를 포함할 수 있다. [85]
  2. Group: [86]
    1. Tasks를 포함하지 않는 상태이다. [87]
    2. 순수하게 조직화 목적으로 사용된다. [89]
    3. 코드 없이 다른 자식 상태로 리디렉션하는 용도로 활용될 수 있다. [92]
  3. Linked: [93]
    1. 다른 State Tree를 링크하여 실행하는 방식이다. [97]
    2. Sub Tree: [94]
      • 현재 State Tree 내에서 특정 상태를 Sub Tree로 지정하고, 다른 Linked 상태에서 이를 참조한다. [95]
      • Sub Tree가 완료되면 해당 상태도 완료 처리된다. [98]
    3. Linked Asset: [99]
      • 별도의 State Tree 에셋을 링크하여 실행한다. [100]
      • 모듈화되고 재사용 가능한 코드를 만드는 데 유리하다. [101]
      • 예시: 캐릭터의 순찰 로직을 별도의 State Tree로 만들어 여러 캐릭터에서 재사용할 수 있다. [101]

1.6. State Tree 컴포넌트 추가 및 테스트 [104]

  1. State Tree 컴포넌트 추가 [106]
    1. 캐릭터 클래스에 State Tree Component를 추가한다. [107]
    2. State Tree AI Component를 사용하는 경우, AI 컨트롤러에 추가해야 한다. [108]
    3. 추가된 컴포넌트에서 스키마를 선택할 수 있다. [109]
  2. 파라미터 설정 및 태스크 실행 [110]
    1. 컴포넌트에서 Walk Distance와 같은 파라미터에 커스텀 값을 설정할 수 있다. [110]
    2. 자동 시작 로직 등을 설정할 수 있다. [112]
    3. Debug Text Task를 추가하여 State Tree가 실행되는 것을 확인할 수 있다. [113]
    4. "hello"라는 디버그 텍스트가 월드에 표시되는 것을 통해 State Tree가 정상적으로 작동함을 확인한다. [115]

1.7. 요약 및 향후 학습 방향 [116]

  1. 기본 이해: [116]
    1. 현재까지 State Tree의 구성 요소와 작동 방식에 대한 기본적인 이해를 마쳤다. [116]
    2. 세부적인 내용이 아직 명확하지 않더라도, 앞으로 실제 기능을 구현하면서 자연스럽게 이해될 것이다. [117]
  2. 향후 학습: [119]
    1. 다음 영상에서는 Tasks에 대해 더 자세히 다룰 예정이다. [117]
    2. 이후 Conditions 등 다른 기능들에 대해서도 학습할 것이다. [117]
    3. 채널 지원 및 프로젝트 파일 다운로드에 대한 감사 인사가 전달된다. [119]