총정리 글을 쓰게된 이유
프로젝트를 본격적으로 마무리하고 유저테스트와 스팀 출시를 위해 폴리싱을 진행하려고 한다.
지금까지 보스 AI를 만들면서 총 2번의 고도화 작업이 있었다.
당시엔 기획이 자주 변경되는 상황이었기에 BT도 유동적으로 설계해서 2차 설계가 유용했다.
근데 지금은? 기획은 정해졌고, 프로젝트를 폴리싱하는 단계이기 때문에 유지보수나 확장성에 용이해야한다.
AI를 계속 공부하다보니까 게임 플레이 태그를 활용해서 스킬 선택 처리를 해줄 수도 있을 것 같아서
이 부분을 중점으로 적용해나갈 예정이다.
그래서 3차 설계 수정 전에 BT를 설계하면서 내가 고민해왔던 내용들이나 어떻게 발전해왔는지 정리하며, 어떻게 수정하면 좋을지 고민해보려고 한다.
BT 고도화가 필요하다고 느꼈던 순간
계절보스 BT는 총 2단계의 BT로 고도화해왔다.
이건 고도화 전 초기 설계 단계인 겨울 계절 보스 BT이다.

겨울 보스의 큰 행동 분기는 2개였다.
Perception 범위 내에 플레이어가 있냐없냐에 따라 집을 공격하거나 플레이어를 공격대상으로 설정했다.
플레이어쪽으로 이동 -> Enum 클래스에 넣어둔 스킬 인덱스를 랜덤으로 리턴 -> 해당 인덱스의 스킬 몽타주 실행의 단계로 설계했다.
위의 방법으로 설계하니까 한계가 있었는데,
1. 기획에서 이 스킬을 쓸 때는 후속 스킬이 필요하다는 내용 또는 스킬 중단 같은 디테일한 행동 로직을 제어할 수 없음
2. BT가 단순하다보니 보스가 아니라 스킬만 화려한 일반 엘리트 몬스터 같음 (지능이 부족해보였다)
=> 행동에 대한 분기를 고도화하고 스킬 선택을 BT에서 하자!라고 생각했다.
(실제로 BT에서 다 처리했더니 디버깅이나 유지보수하는데 굉장히 편했고, 한 눈에 들어왔다)
고도화한 겨울 계절보스 BT

이건 마무리 단계에서 고도화했던 BT이다.
고도화하면서 가장 고려했던 내용은
1. Behavior Tree에서 한 눈에 보스의 행동 로직 흐름을 이해할 수 있게 설계하는 것
2. 스킬 콤보 수정이 용이할 것 (당시 기획이 유동적으로 변경되던 상황)
3. 보스답게 행동을 세부적으로 제어가능하도록 최대한 분할하고 독립적으로 짤 것
이 3가지 내용을 가장 중요하게 생각하고 설계했다.
그리고 비티 고도화를 하면서 더 보완되면 좋을 것 같은 내용을 추가했는데, 다음 4가지였다.
1. 체력 기반 페이즈 분기(노말, 광폭화)
=> 기존 보스는 전투할 때 체력이나 다른 요인이 설계되어있지 않았다.
=> 체력별 페이즈를 나눠 광폭화 상태에는 까다로운 스킬이나 강화된 스킬을 시전하게 설계했다.
=> 광폭 상태로 돌입, 광폭 스킬 등에 이펙트와 시각적인 효과를 부여했다. 이로 인해 보스 체력 UI가 없는 상태를 보완할 수 있었다.(광폭 이펙트, 광폭 스킬 등)
2. 콤보 기반 스킬 패턴화(일반 패턴, 억까 패턴)
=> 콤보 안에는 각 스킬을 하드 패턴으로 구성하였으나, 콤보 시퀀스 자체는 랜덤으로 선택되도록 설계했다.
=> 플레이어가 전투를 예측할 수 없고, 피지컬에 의해서 전투할 수 있게 끔 전투에 몰입할 수 있는 환경을 부여했다.
3. 스킬 단위의 태스크 분할
=> 기존에는 C++ 태스크에서 랜덤 인덱스를 반환했으나, 디버깅과 유지보수를 위해 BT에서 선택할 수 있게 수정했다.
=> 더 세부적인 행동 흐름 제어가 가능했고, 기획이 변경되었을 때 비티에서 바로 수정할 수 있는 장점을 살리고자 해당 방식으로 설계했다.
4. EQS 도입한 동적 거리 조절
=> 기존에는 보스가 플레이어에 의존적이라 수동적으로 느껴져 전투에 흥미가 쉽게 떨어질 수 있는 요인이 존재했다.
=> EQS를 도입해서 보스가 스스로 동적으로 거리를 조절할 수 있게 설계했고,
여러 이동기 스킬(추격, 도주, 회피)을 추가하여 더욱 생동감있는 전투 시스템을 개발했다.
마무리말
다음 편에서는 보완된 기능에 대한 설계의 고민들을 정리해볼 예정이다.
'Unreal Engine' 카테고리의 다른 글
| [트러블슈팅] 에디터 초기 실행 시 BehaviorTree 활성화 안되는 문제 (1) | 2026.03.05 |
|---|---|
| [트러블슈팅] 보스 애니메이션 연결할 때 엔진 튕김 에러 (0) | 2026.03.03 |
| [ UE ] BehaviorTree Task 관리 (0) | 2025.04.28 |
| [ UE, C++ ] 네트워크 환경에서 클라이언트 카메라 전환시키기 (0) | 2025.04.21 |
| [ UE ] TrainingMode 및 UI 구현 (0) | 2025.04.08 |