[DAY50] Shooter Project(1) : AI Development Roadmap

베리투스·2025년 10월 21일
0

Shooter Project

목록 보기
1/10

4주간 진행될 디펜스 게임 AI 개발의 전체 계획과 각 단계별 기술적 핵심 사항을 정리한다. 이 문서는 단순한 일정이 아닌, 어떤 기능을 어떤 구조로 구현해야 하는지에 대한 기술 가이드 역할을 목표로 한다. 프로젝트는 버티컬 슬라이스, 알파, 베타의 3단계로 진행되며, 각 단계마다 필요한 이론을 학습하고 적용하여 최종적으로 확장 가능하고 안정적인 AI 시스템을 구축할 것이다.


📌 목표

  • 구조적 목표: 재사용성과 확장성을 고려한 AI 아키텍처 설계 (부모 클래스, 공용 BT Task 활용).
  • 기능적 목표: 역할이 명확히 구분된 3종류(일반, 네임드, 보스)의 몬스터 AI 구현.
  • 최종 목표: 안정적인 성능과 전략적 재미를 제공하는 AI 시스템 완성.

📖 이론 및 구현 구조

1. 1주차 (버티컬 슬라이스): AI 시스템의 뼈대 설계

이 단계에서는 모든 AI가 공유할 가장 기본적인 구조를 튼튼하게 세우는 것이 중요하다.

필요 이론구현 구조 및 설명
상속 (Inheritance)ACharacter를 상속받는 AIBaseCharacter 라는 C++ 부모 클래스를 만든다. 이 클래스에는 모든 AI가 공통으로 가질 체력(HP), 사망 처리 함수(HandleDeath), 피격 반응 함수(HandleDamage) 등을 미리 구현해둔다. 앞으로 만들 모든 몬스터는 이 AIBaseCharacter를 상속받아 제작한다. ➡️ 코드 중복을 최소화하고 일관성을 유지할 수 있다.
AI 기본 3요소AI 컨트롤러, 블랙보드, 비헤이비어 트리(BT)의 관계를 명확히 이해하고 설정한다. AIBaseCharacter가 스폰될 때, 지정된 AI 컨트롤러가 자동으로 빙의(Possess)되고, 해당 컨트롤러가 지정된 비헤이비어 트리를 실행하도록 설정한다.
AIPerceptionAIPerceptionComponentAIBaseCharacter에 부착하여 모든 AI가 시야(Sight) 감지 기능을 갖도록 한다. 플레이어가 감지되면 OnTargetPerceptionUpdated 이벤트를 통해 블랙보드의 TargetActor 키 값을 업데이트하는 로직을 컨트롤러에 구현한다. ➡️ AI의 '눈' 역할을 하는 핵심 기능이다.
BT 기본 노드MoveTo (이동), Wait (대기) 같은 기본 Task와, 블랙보드 키 값을 체크하는 Decorator를 사용하여 "타겟이 있으면 쫓아가고, 없으면 대기한다"는 가장 단순한 BT를 완성한다.

2. 2주차 ~ 3주차 중반 (알파): 기능 확장과 다양성 확보

기본 뼈대 위에 다양한 행동 패턴을 추가하여 몬스터의 종류를 늘린다.

필요 이론구현 구조 및 설명
BT Task재사용 가능한 커스텀 Task를 만드는 것이 핵심이다. 예를 들어, BTTask_Attack이라는 블루프린트나 C++ 클래스를 만든다. 이 Task는 공격 애니메이션 몽타주, 데미지 판정 타이밍 등의 변수를 입력받을 수 있도록 설계한다. 이렇게 하면 근접 몬스터, 네임드 몬스터가 각기 다른 애니메이션과 데미지로 이 BTTask_Attack공유해서 사용할 수 있다.
BT Service주기적인 상태 체크를 위해 Service를 활용한다. 예를 들어, "플레이어와의 거리 체크" 서비스를 만들어 블랙보드의 DistanceToTarget 키 값을 0.2초마다 업데이트한다. BT는 이 키 값을 Decorator에서 사용하여 "거리가 500 이하면 근접 공격, 1000 이상이면 원거리 공격"과 같은 행동 분기를 만든다. ➡️ 매 프레임 거리를 계산하는 비효율을 막을 수 있다.
BT Decorator단순한 블랙보드 키 값 비교 외에, Cooldown(쿨타임) 데코레이터를 활용하여 네임드 몬스터의 특수 공격이 너무 자주 나가지 않도록 제어한다. "특수 공격 후 5초 동안은 이 브랜치를 실행하지 않는다" 와 같은 로직을 쉽게 구현할 수 있다.
Enum (열거형)EAIState 라는 Enum을 만들어 AI의 상태(E_Patrolling, E_Chasing, E_Attacking 등)를 블랙보드에서 관리한다. 보스 몬스터의 경우 EBossPattern Enum을 만들어 현재 어떤 패턴을 사용할지 명확하게 제어한다. ➡️ 단순히 bool 변수를 여러 개 쓰는 것보다 상태 관리가 훨씬 깔끔해진다.

3. 3주차 후반 ~ 4주차 (베타): 안정성과 완성도 향상

구현된 기능들을 다듬고 최적화하여 최종 결과물을 만든다.

필요 이론구현 구조 및 설명
데이터 테이블몬스터의 HP, 공격력, 이동 속도, 공격 쿨타임 등 밸런싱에 필요한 모든 수치를 Data Table로 분리한다. AI 캐릭터는 시작 시 자신의 ID에 맞는 데이터를 테이블에서 읽어와 초기화한다. ➡️ 코드를 다시 컴파일하지 않고 엑셀 파일(CSV) 수정만으로 게임 밸런스를 쉽게 조절할 수 있다.
프로파일링 툴Stat AIStat Game 콘솔 명령어를 사용하여 AI의 연산 부하와 전체 게임의 프레임 속도를 확인한다. 만약 특정 AI가 너무 많은 연산을 차지한다면, 해당 AI의 BT Service 실행 주기를 늘리거나, AIPerception의 감지 빈도를 낮추는 등의 최적화를 진행한다.
애님 노티파이애니메이션과 실제 기능의 연동을 정교하게 다듬는다. 예를 들어, 보스의 강타 공격 애니메이션에서 정확히 무기가 땅에 닿는 프레임에 AnimNotify를 추가하고, 이 노티파이가 실행될 때 데미지 판정(SphereTrace)이 발생하도록 연결한다. ➡️ 시각적 효과와 실제 기능 사이의 싱크를 맞춰 타격감을 극대화한다.

✅ 핵심 요약

단계중점 사항핵심 기술/이론
버티컬 슬라이스재사용 가능한 기본 구조 설계상속, AI 3요소, AIPerception
알파 (Alpha)다양한 행동 패턴 확장커스텀 BT Task, Service, Decorator, Enum
베타 (Beta)최적화 및 밸런싱데이터 테이블, 프로파일링, 애님 노티파이
profile
Shin Ji Yong // Unreal Engine 5 공부중입니다~

0개의 댓글