목차
Behavior Tree
오늘의 계획
오전: Behavior Tree에 대한 개인 학습 및 간단 구현 해보기
오후: 보스 몬스터 기획서를 참고하고 BT 설계하기
Behavior Tree
복잡한 AI를 설계하는데 사용되는 트리 구조의 행동 모델이다.
모듈화된 작업들을 연속적으로 실행하여 AI의 행동을 결정한다.
if-else문은 코드가 복잡해지고 중첩되어 확장성이 떨어지며, FSM은 상태가 많아질수록 관리하기가 어려워지는 한계가 있다.
반면에 BT는
- 깔끔한 구조로 한눈에 파악하기 쉽고,
- 행동에 우선순위를 부여할 수 있어 효율적이고,
- 시각적인 트리 형태로 기획자와의 커뮤니케이션이 유리하다는
장점들이 있다.
Composite Node
자식 노드를 제어하는 노드로 셀렉터와 시퀀스가 있다.
셀렉터: 자식 노드들이 성공하거나 실행중 (Running) 상태가 될 때까지 순차적으로 평가하며, 하나라도 성공하면 즉시 종료.
시퀀스: 자식 노드들이 모두 성공할 때까지 순차적으로 평가하며, 하나라도 실패하면 즉시 종료.
Decorator Node
자식 노드의 결과에 추가 기능을 부여하거나 결과를 변경한다.
인버터: 자식 노드의 결과를 반대로 바꾼다.
리피터: 자식 노드를 반복해서 실행한다.
Task Node
실제 행동이 실행되는 가장 말단의 노드이다.
상태 반환의 중요성
가장 중요한 점은 모든 노드가 상태를 반환하는 점이다.
- Running: 행동이 아직 끝나지 않고 계속 진행 중임을 의미한다. (예. 몬스터 이동 중)
- Success: 행동이 성공적으로 완료되었음을 의미한다. (예. 공격 범위 안에 도착)
- Failure: 행동이 실패했음을 의미한다. (예. 공격 대상이 사라짐)
트리 구조의 Tick
BT는 매 프레임마다 루트 노드부터 순차적으로 평가된다.
이 과정을 Tick이라고 부르며, 틱마다 현재 상태에 가장 적합한 행동을 찾아서 실행한다.
몬스터의 상태가 변하면 다음 틱에서 트리의 다른 경로가 활성화되면서 자연스럽게 현재 상황에 맞는 최적의 행동을 선택 할 수 있게 된다.
참고
관련 창을 너무 많이 열어놔서 어디서 참고한건지 잘 모르겠음.
느낀점
일단 우리 기획에 중간에 방향성이 조금 바뀌면서, 보스 몬스터 기획 또한 변경점이 생겼었던 것 같다.
보스 몬스터 생명주기 기획에서 통일되지 않은 부분들이 있어서 그 부분들을 기획분들이랑 이야기를 나누고, 구조를 짰다.
근데 개발팀장님과 대화를 나누다 보니 어? 싶은 부분이 있었다.
해당 부분을 캠프 내 다른 BT 고수분한테 질의응답을 한뒤, 짜뒀던 구조를 싹 다 뜯어고쳐야겠다는 생각이 들었다.
또한 보스몬스터 BT 다이어그램 또한 수정해야겠음.
+다이어그램 그릴때 Canva 쓰시던데 좋아보였음!
내일 학습 할 것은 무엇인지
우선 설계한 BT에서 상태를 체크하는 부분들(dead, stunned 등)은 전부 제외하는 방향으로 고쳐야한다.
다만, 상태 enum(not 상태패턴)을 같이 쓰는 것이 좋은 것 같다는 BT 고수분의 조언이 있었으므로 이 부분도 고려해보면 좋을 것 같다.
CompositeNode에서는 Running을 기억하기 위해서 노드의 index를 캐싱하는 방법을 고려해보면 좋을 것 같고.
+보스에게서 Patrol 행동 패턴이 필요 없을 것이라는 확답도 받음.
'부트캠프 > 본캠프' 카테고리의 다른 글
| [내일배움캠프_2025SEP13]리팩토링 (0) | 2025.09.13 |
|---|---|
| [내일배움캠프_2025SEP12] DataHandler, 상속 설계의 중요성 (0) | 2025.09.12 |
| [내일배움캠프_2025SEP10] 프레임워크 몹 프로그래밍, 최적화 학습 (0) | 2025.09.10 |
| [내일배움캠프_2025SEP09] Cry4Code 팀 결성! (0) | 2025.09.09 |
| [내일배움캠프_2025SEP04] Cooking Knight 발표 & 최종 팀 빌드 (0) | 2025.09.08 |