Behavior Tree의 블랙보드 연산 비용을 절감하기 위해 C++ 기반의 FSM(Finite State Machine)을 직접 구현했습니다. 매 프레임(
Tick) 거리와 현재 상태(State Enum)를 체크하여 이동과 공격을 분기 처리함으로써, 즉각적이고 명확한 상태 전이(State Transition)를 보장합니다.
//Boss1.cpp
void ABoss1::Tick(float DeltaTime)
{
Super::Tick(DeltaTime);
//상태 패턴(State Pattern) 구현(현재 상태가 특정 로직(Hit, PhaseChange 등)이 아닐 때만 AI 가동)
if (BossState != EBossState::Hit && BossState != EBossState::PhaseChange)
{
//거리 기반 행동 결정 (Distance Check)
float Dist = FVector::Dist(GetActorLocation(), Player->GetActorLocation());
if (Dist > AttackRange)
{
//추적 상태 (Chase/Jog)
SetBossState(EBossState::Jog);
MoveTowardsPlayer(DeltaTime);
}
else
{
//사거리 내 진입 시 정지 및 공격 시도
if (BossState == EBossState::Jog)
{
SetBossState(EBossState::Idle);
GetCharacterMovement()->StopMovementImmediately(); //관성 제거
}
//공격 가능 여부 판단 후 실행
TryAttack();
}
}
}