SimpleBehaviorTree

프로젝트 개요

기능

  1. 핵심 기능:
    • Tree 구조를 활용한 AI 행동 트리 구현
    • 시작, 일시정지, 정지 기능 제공
    • 노드 별 카테고리 분류 기능
  2. 추가 구현 내용:
    • 블랙보드 시스템 추가
    • BTRunnerComponent에 Tree 컨트롤러 제공
    • Tree 기능 추가
      • 정렬 기능 : 백트래킹 알고리즘
      • 루트 노드 복귀 기능
      • 트리 파일 탐색 기능
    • 런타임 디버그 기능
      • 행동 트리의 진행 상황 실시간 확인.
      • 노드 추가 및 실행 가능
      • 현재 행동 트리 진행 상황 표시

🆕효과

  • 행동 트리 제작 및 유사 패턴 재사용 과정의 효율성 증가.
  • 런타임 디버깅을 통해 문제를 신속히 발견 및 수정 가능.
  • AI의 행동 로직 가독성과 관리 용이성 향상.

기능 상세

Node 카테고리 분류

⚠️ 문제 사항

  • 행동 노드가 많아지며 원하는 노드들을 찾기 어려워 지는 문제를 해결해야 한다.

🆕 개선 방식

  • 노드의 카테고리를 설정할 수 있도록 Overriding 가능한 NodeCategory 프로퍼티를 추가하여 코드 상에서 카테고리를 설정할 수 있도록 하였다

💫 개선 결과

  • 노드를 찾을 때 카테고리로 분류되어 더욱 손쉽게 노드를 찾을 수 있게 되었다.
Conditional Abort

⚠️ 문제 사항

  • CompositorNode가 실행되고 있을 때 조건이 바뀌는 경우 기본적인 행동 트리 기능 만을 활용하면 노드가 기민하게 바뀌지 않아 원하는 방식으로 AI가 작동하지 않는 문제가 있었다.

🆕 개선 방식

  • None, Self, Lower Priority 세가지의 Conditional Abort 기능을 Compositor Node에 추가하여 자식 노드의 실행 조건에 기민하게 반응하고 다른 노드로의 전환이 이루어지도록 하였다.

💫 개선 결과

  • 필요한 Compositor Node에 Conditional Abort를 적용하는 것이 가능하기에 기존 방식을 유지하면서 큰 수정 없이 유기적인 노드 전환 기능 추가 및 작동이 가능했다.
Behavior Tree Editor(행동 트리 에디터)

⚠️문제 사항

  • 행동 트리를 수정하고 생성하는데 있어 재사용성을 높이고 AI의 가독성을 높이기 위해 에디터가 필요하다.
  • 런타임 상황에서 현재 AI의 진행 상황을 명확히 확인할 수 있어야 유지 관리가 편하다.

🆕 개선 방식

  • 행동 트리 에디터를 제작
    • 에셋이나 행동 트리를 가진 오브젝트를 클릭하면 자동으로 에디터가 열리도록 하였다.
  • 트리 자동 정렬 및 시작 노드로 복귀 기능
    • 트리 제작 시 관리를 쉽게 하였다.
  • 선택한 모든 노드 Copy/Paste 기능
    • 같은 행동 패턴의 복제 및 재사용을 쉽게 하였다.
  • 현재 AI 진행 상황 확인 기능
    • 런타임에서 AI 진행을 가시적으로 확인하는 것으로 디버깅을 쉽게 만들었다.

💫 개선 결과

  • 행동 노드 및 트리의 재사용성 증가
  • AI 디버깅 프로세스의 효율 향상

구조

코드 및 사용 방법

코드 상세

BTRunnerComponent

  • Unity의 MonoBehaviour를 상속받아 동작 트리를 실행, 중지, 업데이트하는 컴포넌트이다. 블랙보드 데이터를 관리하고 트리의 상태를 제어한다.
함수 이름기능
BTSendMessage블랙보드의 "Message" 키에 데이터를 설정
BTSetData블랙보드에 새로운 데이터를 설정
BTRemoveData블랙보드에서 특정 데이터를 제거
SetTree트리를 설정하고 실행 상태를 초기화
Stop현재 실행 중인 트리를 중지
Play트리를 실행 상태로 전환
Pause트리를 일시 중지

BehaviourTree

  • 동작 트리(Behaviour Tree)를 정의하고 실행하는 클래스다. 루트 노드를 통해 트리의 상태를 관리하고, 클론 기능을 통해 복제된 트리를 생성할 수 있다.
함수 이름기능
BTUpdate루트 노드를 통해 트리를 실행하고 현재 상태를 반환
Stop모든 노드의 상태를 초기화하고 실행을 중단
Clone현재 트리를 소유자와 함께 복제

BTNode

  • 동작 트리의 기본 단위를 정의하는 추상 클래스다. 트리 내에서 실행, 중지, 상태 관리 등의 공통 로직을 포함하며, 자식 클래스에서 특정 동작을 구현하도록 설계되었다.
함수 이름기능
Run노드를 실행하고 상태를 반환합니다. 실행 중 상태가 변경되면 중지
Evaluate현재 노드의 상태를 평가하여 성공 또는 실패를 반환
Clone노드를 복제
BTStart노드 실행 시작 시 초기화 작업을 수행
BTStop노드 실행 종료 시 정리 작업을 수행
OnInitialize노드가 처음 초기화될 때 실행
OnStart노드가 실행을 시작할 때 호출
OnRun노드 실행 중 매 프레임 호출되며, 상태를 반환
OnStop노드 실행이 멈출 때 호출

ActionNode

  • 동작 트리에서 실제 동작을 수행하는 노드이다. 실행 시 특정 동작을 수행하고, 성공, 실패, 또는 진행 중 상태를 반환한다.
함수 이름기능
Evaluate항상 성공 상태를 반환하며, 기본 동작 수행이 목적

DecoratorNode

  • 단일 자식 노드를 감싸고, 자식 노드의 실행 조건이나 결과를 조작하는 노드이다. 실행 논리나 조건을 추가로 정의할 수 있다.
함수 이름기능
Evaluate자식 노드의 상태를 평가하고 결과를 반환
OnEvaluate자식 노드의 실행 조건이나 결과를 변경할 수 있음

ConditionNode

  • 특정 조건을 평가하는 노드로, 블랙보드 데이터를 기반으로 성공 또는 실패 상태를 반환한다.
함수 이름기능
Evaluate블랙보드 데이터를 기반으로 조건을 평가하고 상태를 반환
GetConditionState실제 조건 판단 로직을 구현하는 추상 함수

CompositeNode

  • 여러 자식 노드를 가질 수 있는 노드로, 자식 노드들의 실행 순서와 결과를 관리한다. 조건에 따라 특정 노드만 실행하거나 평가를 진행한다.
함수 이름기능
RunChildren자식 노드들을 순차적으로 실행하거나 조건에 따라 결과를 반환
OnActiveEvaluate활성화된 상태에서 자식 노드를 평가
OnDeActiveEvaluate비활성화된 상태에서 자식 노드를 평가
OnLowerPriorityEvaluate낮은 우선순위 자식 노드의 상태를 평가

BlackBoard

  • 동작 트리에서 데이터를 공유하기 위한 키-값 구조의 데이터 저장소이다. 부모-자식 블랙보드 계층을 통해 데이터를 상속하거나 덮어쓴다
함수 이름기능
Get주어진 키에 해당하는 데이터를 반환
Get<T>특정 형식의 데이터를 반환.
Contains특정 키의 존재 여부를 확인
Set키-값 쌍으로 데이터를 저장
Remove특정 키의 데이터를 제거
Clear모든 데이터를 삭제

 

댓글 달기

이메일 주소는 공개되지 않습니다. 필수 필드는 *로 표시됩니다

위로 스크롤