행동 트리 (Behavior Tree)

manmarru·2024년 7월 8일

c++

목록 보기
18/24

행동을 제어하는 트리
모든 상태를 각각 제어해야 하는 fsm과 다르게 함수를 어느정도 재사용하기 때문에 많은 상태를 제어해야 하는 경우에 유리하다.

노드에다가 함수 포인터를 넣는 방식으로 구현했다.

  • Composite Node: 여러 자식 노드를 가질 수 있으며, 대표적으로 Selector와 Sequence가 있음.

    Selector : 자식 노드들 중 하나만 성공해도 즉시 성공을 반환
    -> 자식 노드들 중 성공이 나올때까지 실행
    Sequence : 모든 자식 노드들이 성공을 반환해야 성공을 반환
    -> 자식 노드들 중 실패가 나올때까지 실행
    ( * 노드들의 실행 순서가 항상 동일하다는걸 기억하자)

  • Decorator Node: 하나의 자식 노드만 가지며, 그 행동을 수정하거나 조건을 추가함.

    BlackBoard : 지정된 키에 값이 설정돼어있는지 확인하는 노드
    CompareBBEbtries : 두 블랙보드 키 값을 비교한 결과에 따라 통과시킨다.
    cooldown : 일정 시간동안 노드를 잠근다.
    ConditionSelectorNode: 조건을 평가하고, 참/거짓에 따라 다른 행동 노드를 실행하는 노드

  • 리프 노드에 실제 행동(Action)이나 조건(Condition)을 정의.
    여기에 우리가 실제 구현하려는 함수들이 들어가겠지?

구현 (깃허브 링크)

0개의 댓글