본문으로 이동

행동 트리

카노위키

행동 트리(Behavior Tree, BEHAVIOR TREE)는 인공지능(AI) 캐릭터의 행동을 모듈식으로 모델링하는 데 사용되는 수학적 모델이다. 비디오 게임에서 NPC(Non-Player Character)의 복잡하고 유연한 행동 로직을 만드는 데 널리 활용된다.

전통적인 유한 상태 머신(Finite State Machine, FSM)이 특정 조건에 따라 하나의 '상태'에서 다른 '상태'로 완전히 전환되는 방식인 반면, 행동 트리는 계층적인 노드 구조를 통해 여러 행동을 조합하고 우선순위를 정하여 훨씬 더 동적이고 확장 가능한 AI를 구현할 수 있게 해준다.

개요

행동 트리는 루트(Root) 노드에서부터 시작하여 자식 노드로 매 틱(tick)마다 신호를 보내는 방식으로 동작한다. 각 노드는 신호를 받아 자신의 로직을 실행하고, 부모 노드에게 자신의 상태(성공, 실패, 실행 중)를 반환한다. 이 반환된 상태에 따라 부모 노드는 다음 행동을 결정한다.

  • 성공 (Success): 노드의 임무가 성공적으로 완료되었음을 의미한다.
  • 실패 (Failure): 노드가 임무를 완수하지 못했음을 의미한다.
  • 실행 중 (Running): 노드의 임무가 아직 진행 중이며, 완료되기까지 시간이 더 필요함을 의미한다. (예: '플레이어에게 다가가기' 행동)

노드의 종류

행동 트리의 노드는 크게 복합 노드, 데코레이터 노드, 리프 노드의 세 가지로 분류할 수 있다.

복합 노드 (Composite Nodes)

하나 이상의 자식 노드를 가지며, 자식들을 어떤 순서와 조건으로 실행할지 결정하는 제어 흐름 노드다.

  • 시퀀스 (Sequence): 자식 노드를 순서대로 왼쪽에서 오른쪽으로 실행한다. 자식 중 하나가 '실패' 또는 '실행 중'을 반환하면 즉시 멈추고 그 상태를 부모에게 반환한다. 모든 자식이 '성공'해야만 '성공'을 반환한다. (AND 연산과 유사)
  • 셀렉터 (Selector): 자식 노드를 순서대로 실행하다가, 자식 중 하나가 '성공' 또는 '실행 중'을 반환하면 즉시 멈추고 그 상태를 부모에게 반환한다. 모든 자식이 '실패'해야만 '실패'를 반환한다. (OR 연산과 유사)
  • 병렬 (Parallel): 모든 자식 노드를 동시에 실행한다. 자식들의 성공/실패 조건에 따라 특정 수의 자식이 성공하거나 실패했을 때 부모의 상태가 결정되는 정책을 설정할 수 있다.

데코레이터 노드 (Decorator Nodes)

단 하나의 자식 노드만 가지며, 자식 노드가 반환하는 결과를 바꾸거나 특정 조건에 따라 자식의 실행 여부를 결정하는 등 자식 노드를 꾸며주는 역할을 한다.

  • 인버터 (Inverter): 자식 노드가 '성공'을 반환하면 '실패'로, '실패'를 반환하면 '성공'으로 상태를 뒤집는다. '실행 중'은 그대로 반환한다.
  • 성공할 때까지 (Succeeder): 자식 노드의 결과와 상관없이 항상 '성공'을 반환한다. (실행 중 제외)
  • 반복 (Repeater): 자식 노드를 지정된 횟수만큼 또는 무한히 반복 실행한다.
  • 조건 (Condition): 특정 조건이 참일 때만 자식 노드를 실행한다.

리프 노드 (Leaf Nodes)

행동 트리의 가장 마지막에 위치하는 노드로, 실제 행동이나 조건을 검사하는 로직을 수행한다.

  • 행동 (Action): AI 캐릭터가 수행하는 구체적인 동작. (예: '공격하기', '숨기', '순찰하기')
  • 조건 (Condition): 특정 게임 세계의 상태를 확인하는 역할. (예: '플레이어가 보이는가?', '체력이 50% 이하인가?')

특징

  • 모듈성 및 재사용성: 각각의 행동을 독립된 노드로 만들어 재사용하기 용이하며, 트리의 일부를 다른 AI에 쉽게 이식할 수 있다.
  • 가독성: AI의 행동 로직이 시각적인 트리 구조로 표현되어, 기획자나 디자이너가 쉽게 이해하고 수정할 수 있다.
  • 확장성: 새로운 행동을 추가하거나 기존 행동의 우선순위를 변경하는 것이 유한 상태 머신에 비해 훨씬 간단하다.

응용 분야

  • 게임 AI: NPC의 전투, 순찰, 상호작용 등 거의 모든 종류의 AI 로직에 사용된다. 특히 복잡한 결정을 내려야 하는 보스 몬스터나 동료 AI 구현에 효과적이다.
  • 로보틱스: 로봇의 작업 계획 및 자율 행동 제어 시스템에 적용된다.

같이 보기