내배캠 TIL

[내배캠 TIL 260211] Unreal GAS 기반 Enemy AI 시스템 설계

xodn246 2026. 2. 11. 20:58

1. AI 클래스 계층 구조 설계 (Inheritance)

단순한 구조가 아닌, 확장성을 고려하여 C++ 기반의 계층 구조를 설계함.

  • AF4CharacterBase: 공통 ASC(Ability System Component) 및 속성 관리.
  • AF4EnemyBase: 적 AI의 공통 로직(사거리 체크, 타겟 인식, 사망 처리) 담당.
  • AF4MeleeEnemy / AF4RangeEnemy: 공격 방식(근접 판정 vs 투사체 발사)에 따른 C++ 클래스 분화.
    • 이유: 단순히 수치만 다른 게 아니라 로직 자체가 다르므로 C++에서 뼈대를 나누는 것이 유지보수에 유리함.

2. 거리 기반 인지 시스템 (Perception by Distance)

복잡한 시야각(FOV) 계산 이전에 가장 확실한 거리 연산을 통해 AI의 상태 전환 근거를 마련함.

  • TraceRange (추격 범위): 플레이어를 인식하고 추적하기 시작하는 거리.
  • AttackRange (공격 범위): 실제로 공격 어빌리티를 실행할 수 있는 사거리.
  • 최적화: FVector::Dist 대신 DistSquared를 사용하여 제곱근 연산을 피함으로써 CPU 부하 최적화.

3. GAS 태그 기반 상태 관리

Boolean 변수(bIsDead, bIsAttacking) 대신 Gameplay Tags를 사용하여 상태를 제어함.

  • 태그 네이밍: Character.State.Attack 보다는 State.Attack과 같이 범용적인 카테고리화 사용.
  • 어빌리티 제어:
    • Activation Blocked Tags: 캐릭터가 기절/사망 상태일 때 어빌리티 발동을 원천 차단.
    • Block Abilities With Tag: 특정 동작(예: 회피, 궁극기) 중에 다른 행동이 섞이지 않도록 제어.

4. Behavior Tree(BT) 구조와 C++ 연동

비헤이비어 트리의 핵심 구성 요소인 Task와 Service의 역할을 명확히 구분함.

  • BTService (감시자): 주기적으로 플레이어와의 거리를 체크하여 블랙보드(Blackboard) 값을 갱신.
  • BTTask (행동자): 블랙보드 조건이 충족되었을 때 실제 GAS 어빌리티를 실행하거나 이동 명령을 수행.
  • Wait Node: 공격 후 딜레이를 주는 가장 빠른 방법으로 활용. (추후 GAS Cooldown으로 고도화 예정)