BehaviorTree.CPP 버전 3과 버전 4의 주요 차이 (Key Differences Between BehaviorTree.CPP Version 3 and Version 4)
1. 개요
BehaviorTree.CPP 4.x는 3.x 대비 스크립트 엔진, 새로운 노드 상태, 개선된 포트 시스템 등 다수의 중요한 변경을 도입하였다. 본 절에서는 두 버전 간의 주요 차이를 정리한다.
2. 주요 차이 비교
| 기능 | 버전 3.x | 버전 4.x |
|---|---|---|
| XML 포맷 | BTCPP_format="3" | BTCPP_format="4" |
| 노드 상태 | SUCCESS, FAILURE, RUNNING, IDLE | + SKIPPED 추가 |
| 스크립트 속성 | 미지원 | _skipIf, _failureIf, _while, _onSuccess 등 |
| SkipUnlessUpdated | 미지원 | 지원 |
| 새 데코레이터 | 기본 세트 | + RunOnce, Delay, KeepRunningUntilFailure 등 |
| 포트 시스템 | 기본 포트 | 개선된 포트 (자동 변환, 타임스탬프 추적) |
| 블랙보드 | 기본 기능 | 항목별 시퀀스 번호, 자동 변환 |
| 서브트리 | 기본 지원 | 개선된 포트 리매핑 |
| Switch 노드 | 미지원 | SwitchNode 지원 |
3. SKIPPED 상태
4.x에서 도입된 SKIPPED 상태는 _skipIf, SkipUnlessUpdated 등에 의해 노드가 실행되지 않았음을 나타낸다. Sequence와 Fallback에서 SKIPPED 노드를 건너뛴다.
4. 스크립트 엔진
4.x에서는 모든 노드에 스크립트 속성을 적용할 수 있다.
<!-- 4.x 전용 -->
<Action ID="Navigate"
_skipIf="goal_reached == true"
_onSuccess="nav_done = true"/>
5. 마이그레이션 시 고려 사항
3.x에서 4.x로 마이그레이션 시:
- XML 포맷 버전을
"4"로 변경 - 새로운 SKIPPED 상태의 처리 확인
- 사용자 정의 노드의 인터페이스 호환성 확인
- 새로운 기능(스크립트, SkipUnlessUpdated)의 활용 검토
6. 참고 문헌
- BehaviorTree.CPP 공식 문서. https://www.behaviortree.dev/
- BehaviorTree.CPP 마이그레이션 가이드. https://www.behaviortree.dev/migration
| 버전 | 날짜 | 변경 사항 |
|---|---|---|
| v0.1 | 2026-04-05 | 초안 작성 |