1 분 소요

State Tree TIL

금일 작업한 내용에 대하여
State Tree 관련된 TIL을 작성해보려 한다

StateTree의 Schema

작업 중, 갑자기 StateTree가 종료한 경우가 존재하였다
(심지어 StartTree를 제대로 호출했음에도!)

원인?

  • Schema가 StateTree AI Component!
    • StateTree AI Component는 초기화 시점에서
      자신의 주인이 AIController이거나,
      자신을 가진 Pawn이 AIController를 가진지 확인
      • AIController가 없으면 스스로 종료…
    • 그렇기에 이러한 StateTree AI Component
      AIController 내부에서 관리하는 것이 권장됨
    • 그렇지 않으면 최소한 PossessedBy Event 타이밍 이후에 시도
  • 다만 내 경우는 PossessedBy에 설정하였지만
    여전히 꺼졌기에 StateTree Component로 스키마를 바꾸어 해결하였다
    • PossessedBy에 설정하여도 꺼지는 경우라면
      StartLogic()을 2번 호출하거나
      처음 시작시 바로 AutoStart를 켜준 상황 등을 체크하는 것을 권장

StateTree는 Root부터 시작하지만 매번 시도 되는 것이 아님

BT에 다소 익숙해져 있기에 착각한 가장 큰 오해!

  • BT는 매번 틱마다 Root에서부터 ‘다시’ 내려오며
    ‘현재 실행할 노드’를 찾음
    (그렇기에 중간에 ‘우선순위’가 높은 노드가 있다면 그쪽으로 갈아탐)

  • ST는 한번 State에 진입시, ‘계속’ 머무름

    • 다음 프레임이 되어도…
    • 정의된 Transition 조건이 만족될때만 떠난다!
    • 그럼 Root가 왜있는걸까?
      • 최초 진입용
      • ‘전역 조건’ (Global Transition)의 정의
        Root에 ‘체력 0’ 일시 Dead 상태로
        라는 Transition이 있다면
        어떤 상태건 이 조건이 감시 됨
        • 이러한 내용은
          ‘부모 상태의 조건’이 ‘자식 상태’에서도 유효하기에
          체크가 가능한 점을 알아둘 것!

StateTree의 Transition이 ‘시도’되는 타이밍

StateTree의 Transition(상태 이동)이 시도되는 경우는
크게 다음과 같은 3가지가 존재한다

  • On State Completed (기본)
    • 현재 Task의 상태가 Succeeded or Failed로 종료되었을 때 호출
    • 만약 Running 상태의 Task가 FinishTask를 호출하지 않는다면
      이 트리거는 발동하지 않음
  • On Tick(매 프레임)
    • 매 프레임 조건을 검사하는 방식
    • ‘즉시 전환’ 같은 로직에 사용 가능하다
  • On Event
    • 외부에서 SendStateTreeEvent 같은 이벤트를 보냈을 때 즉시 검사
  • StateTree의 상태변환 조건 (Transition Condition)
    • 현재 상태에서 ‘탈출 할 수 있는지를 검사’
    • Detail > Transition 항목 내의 섹션에서 결정 가능함
    • 이 조건이 True여야 ‘타겟’으로 지정된 상태로의 이동 시도
  • 만약 Transition이 설정 안되어 있다면?
    • ‘부모 상태’로 이동하여 Completed Transition이 있는지 검사
      (따로 전이 조건이 없다면 점점 상위로 올라가버림)
      • 결국 Root까지 올라간 후, Root에도 없다면 StateTree 자체가 ‘종료’됨
        (Stopped)
    • 그렇기에 ‘꺼지지 않게’하려면 계속 명시적인 Transition을 설정해주어야 함

Enter Condition은??

  • ‘상태 선택’의 ‘문지기’ 역할
    • Transition 시도하기 전, 마지막으로 검사
  • 이 녀석 자체는 ‘이동’과는 관련이 없음!
    • ‘검증’에 가까운 개념

댓글남기기