Behavior Tree 개념 - TeamCrazyPerformance/Game_study GitHub Wiki

Reference:

  • ChatGPT

왜 쓰는가?

  • 나름 복잡한 ai를 만들 수 있다
  • 모듈화가 잘 되어 있어서 유지 보수 + 기능 추가가 쉽다

Concept of Behavior Tree

  • 행동을 트리 구조로 기술함

    • 트리 구조 image
  • 깊이 우선 탐색

    • (무식하게 말하자면 ) 왼쪽 -> 오른쪽
  • 3가지 종류의 노드가 있음

    • Root Node : 루트 노드
    • Control Flow Node: 모든 Nodes between Root and Leaf
    • Execution Node: Leaf Node - runs 'actions'
  • '탐색'의 결과는 3가지 상태가 있음 - 그리고 그 결과는 부모 노드에 전달함

    • Success
    • Failure
    • Running

Control Flow Node

  • 크게 두 가지 종류의 Flow Node가 있음
    • Composite: 여러 자식 노드 Bunch Of Child
    • Decorator: 자식 노드가 하나 Single Child, Condition Node

Composite

  • 여러 개의 자식 노드를 가지고 있으며, 다음 두 가지 종류가 있다
    • Selector: Or gate와 비슷하게 작동
    • Sequence: And gate와 비슷하게 작동

Selector

  • Or 게이트와 비슷하게 작동함

  • 자식 노드 중 하나가 'SUCCESS' 혹은 'RUNNING'을 반환 -> 부모 노드에게 'SUCCESS' 혹은 'RUNNING'을 반환

  • 모든 자식 노드가 'FAILURE'를 반환 -> 부모 노드에게 'FAILURE' 반환

  • 자식 노드의 결과가 어쨌던 간에 - 오른쪽으로 진행

  • 'Running'을 받으면 다음 깊이 노드로 진행

Sequence

  • And 게이트와 비슷하게 작동함

  • 모든 자식 노드가 'SUCCESS' 반환 -> 부모 노드에게 'SUCCESS' 반환

  • 자식 노드 중 하나가 'FAILURE' or 'RUNNING' 반환 -> 부모 노드에게 'FAILURE' or 'RUNNING' 반환

  • 자식 노드가 'SUCCESS'를 반환해야만 오른쪽으로 진행 - 아님 State값 바로 반환

  • 'Runnig'을 받으면 부모 노드로 돌아감

Decorator

  • 하나의 자식 노드를 가지고 있음

  • 제어문 Condition으로 분류되기도 함

  • 대표적인 조건식

    • While
    • If
    • Loop

Execution Node

  • Leaf Node
  • 실제 액션을 수행하는 노드

Example

image image

20김다은