조 : Team12 RPG
프로젝트 명 : Katana(가제)
목표 : Kannagi Usagi / Sekiro Like와 비슷한 보스전투 구현
기여 파트
오늘은 1:1 보스 전투를 위한 Enemy AI 기본 구조를 잡았다.
프로젝트에서는 일반 Enemy를 따로 두지 않고, Enemy = Boss 개념으로 설계했다.
현재 Enemy AI는 다음 흐름으로 동작한다.
EnemyCharacterBase
└── EnemyAIController
└── BehaviorTree / Blackboard
├── SelectNextAction
├── RotateToTarget
└── ExecuteAttack
EnemyCharacterBase는 BehaviorTreeAsset과 EnemyAttackComponent를 가지고, EnemyAIController는 Possess 시 해당 BT를 실행한다.
Blackboard에는 기본적으로 다음 Key를 사용했다.
TargetActor
HomeLocation
SelectedAction
SelectedPattern
Behavior Tree는 확률로 다음 행동을 선택하고, 선택된 값에 따라 분기하도록 구성했다.
SelectedAction == 0 → 이동
SelectedAction == 1 → 일반공격
SelectedAction == 2 → 강공격
BT 구조는 대략 다음과 같다.
Root
└── Sequence
├── Select Next Action
└── Selector
├── Move
├── Normal Attack
└── Strong Attack
초기에는 OnPossess() 시점에 Player를 바로 가져오려 했지만, Player Pawn이 아직 준비되지 않아 TargetActor가 null이 되는 문제가 있었다.
그래서 EnemyAIController에서 일정 간격으로 Player를 다시 찾고, 성공하면 Blackboard의 TargetActor에 세팅하도록 수정했다.
UpdateTargetActor();
이후 RotateToTarget Task에서 정상적으로 Player를 바라보는 것까지 확인했다.
오늘 만든 주요 BTTask는 다음과 같다.
BTTask_SelectNextAction
BTTask_RotateToTarget
BTTask_ExecuteAttack
SelectNextAction은 확률 기반으로 다음 행동을 선택한다.
Move
NormalAttack
StrongAttack
RotateToTarget은 Blackboard의 TargetActor를 읽어 Enemy가 대상을 바라보게 한다.
ExecuteAttack은 EnemyAttackComponent의 공격 실행 함수를 호출한다.
공격은 EnemyAttackComponent에서 처리하도록 분리했다.
현재는 실제 애니메이션이 없기 때문에 SelectedAction, SelectedPattern을 기준으로 일반공격/강공격 패턴을 구분하는 단계까지 진행했다.
SelectedAction == 1 → 일반공격
SelectedAction == 2 → 강공격
SelectedPattern == 0 or 1
즉 최종적으로는 다음 네 가지 공격 패턴으로 확장할 수 있다.
일반공격 1
일반공격 2
강공격 1
강공격 2
공격 애니메이션이 붙으면 BTTask_ExecuteAttack은 바로 Succeeded를 반환하면 안 된다.
공격 시작 시에는:
EBTNodeResult::InProgress
를 반환하고, 몽타주가 끝났을 때:
OnAttackFinished.Broadcast();
를 호출해서 Task를 완료시키는 구조로 갈 예정이다.
즉 최종 흐름은 다음과 같다.
BTTask_ExecuteAttack
→ EnemyAttackComponent::ExecuteAttack()
→ Attack Montage 재생
→ Montage End
→ OnAttackFinished.Broadcast()
→ FinishLatentTask()
→ 다음 BT 노드 진행
오늘은 실제 공격 애니메이션이나 데미지 판정보다는, 보스 AI가 동작하기 위한 기본 파이프라인을 구성했다.
확인된 내용:
Enemy Possess 정상 동작
Behavior Tree 실행 정상
TargetActor 세팅 정상
확률 기반 행동 선택 정상
RotateToTarget 정상
ExecuteAttack 진입 정상
일반공격 / 강공격 패턴 분기 준비 완료