[UE5] 이득우 Part 2. 11강 행동트리 모델의 이해

공부 스파이럴·2024년 1월 28일
0

행동 트리(Behavior Tree)

행동 트리의 역사

  • 2004년 개발사 번지의 헤일로2에서 인공지능을 설계하는데 사용됨
  • 2005 GDC에서 발표 : "Handling Complexity in the Halo 2 AI"
  • 우선순위와 트리 구조를 사용해 인공지능을 설계하는 기법
  • 게임 산업에서 개량해 널리 사용하고 있음

행동 트리 모델의 장점

  • FSM이 가지고 있던 문제를 해결하는 새로운 게임 인공지능 모델의 수립
  • 행동 트리 모델의 장점
    • 모듈화가 잘 되어 있어 확장이 자유로움
    • 트리 기반으로 계층화가 잘 되어 있어, 복잡한 인공지능 모델을 쉽게 설계할 수 있음
    • 다이어그램으로 인공지능 모델을 효과적으로 표현할 수 있음
    • 제공되는 여러 편리한 부가 기능을 활용해 다양한 상황에 대해 손쉽게 제어할 수 있음

행동 트리 모델의 구성 요소

  • 트리에서 항상 왼쪽에 있는 노드에 우선 순위를 부여
  • 시작 상태를 설정할 필요 없이 왼쪽에서부터 깊이 우선 탐색을 시작
  • 행동을 중심으로 설계
  • 단, 부모 노드에서 다수의 행동을 컨트롤 함
    • 이를 컴포짓(Composite)이라고 함
    • 셀렉터 : 여러 행동 중 하나의 행동을 지정
    • 시퀀스 : 여러 행동을 모두 수행
    • 패러렐 : 여러 행동을 함께 수행
  • 행동에 대한 다양한 결과
    • 성공(Succeeded) : 행동의 성공
    • 실패(Failed) : 행동의 실패
    • 중지(Aborted) : 외부 요인으로 인한 행동의 실패
    • 진행 중(InProgress) : 행동 결과를 홀딩
  • 컴포짓 노드마다 다른 행동 결과 처리
    • 예)
      셀렉터 노드 : 성공 시 종료, 실패 시 다음 행동
      스퀀스 노드 : 실패 노드가 나올 때까지 진행
  • 컴포짓 노드에 부착하는 다양한 추가 기능
    • 데코레이터(Decorator) : 컴포짓 노드가 실행되는 조건을 지정
    • 서비스(Service) : 컴포짓 노드가 활성화될 때 주기적으로 실행하는 부가 명령
    • 관찰자 중단(Abort) : 데코레이터 조건에 부합되면 컴포짓 내 활동을 모두 중단

행동 트리 모델의 구현 예시

  • 전형적인 RPG 게임 NPC에 대한 행동 트리 모델 예시
  • 쉬기(IDLE)와 정찰(PATROL) 상태에 대한 행동 트리
루트 - 정찰(Sequence) - 쉼 / 목적지 선택 / 이동

  • 추가적으로 추격(CHASE)와 공격(ATTACK) 상태에 대한 행동 트리
루트
  - 공격(Selector) + 침입자 감지(Decorator)
    - 공격 / 추격
  - 정찰(Sequence) + 침입자 발견(Abort)
    - 쉼 / 목적지 선택 / 이동

실습

  • NPC 캐릭터 속성 - Auto Possess AI
    • 월드에 배치된 캐릭터인지 SpawnActor를 통한 캐릭터인지 둘 다 인지 설정
  • AI Controller 상속 받은 클래스 생성

  • 에디터에서 Blackboard와 Behavior Tree 에셋을 생성

  • AI Controller 클래스
    • RunAI 함수
      • UseBlackboard를 통해 Blackboard 초기화
      • RunBehaviorTree로 구동
    • StopAI 함수
      • BrainComponent 를 UBehaviorTreeComponent 로 캐스팅
      • StopTree 호출
    • OnPossess 오버라이드
      • 컨트롤러가 폰에 빙의해서 조종할 때 발생되는 이벤트 함수
    • Blackboard와 Behavior Tree 에셋을 변수로 저장

0개의 댓글