Post

2026-07-24 TIL (104일차)

2026-07-24 TIL (104일차)

UE5 시뮬레이션 NPC AI 설계 개론


1. 핵심 아키텍처 및 엔진 기능

동시 접속 객체가 30명 이하인 소규모 시뮬레이션에서는 무거운 Mass Entity(ECS) 대신 AAIController + StateTree 구조가 개발과 디버깅 측면에서 훨씬 효율적입니다.

엔진 기능활용 목적
StateTree손님의 기본 행동 흐름(입장 → 탐색 → 계산 → 퇴장) 및 상태 전이 제어
Smart Object매대, 계산대 등의 슬롯 예약 처리 (“같은 자리에 두 명” 겹침 방지)
EQS목적지 매대 선정 및 혼잡한 통로 회피 지점 탐색
Gameplay Tags상품 분류(음식, 음료 등) 및 NPC 선호도 매칭
UCurveTable아키타입 및 시간대별 구매 선호 가중치 시각화 및 밸런싱

2. Utility AI 기반 의사결정 및 상태 관리

편의점 시뮬레이션의 핵심은 손님이 ‘무엇을, 얼마나, 왜 사는가’를 결정하는 고도화된 선택 과정입니다.

  • 효용(Utility) 기반 점수 계산: 가격 저항, 할인율, 매대 위치, 군중 밀도 등 다양한 변수를 합산하여 점수를 산출합니다.
  • Softmax 샘플링: 가장 점수가 높은 1등 상품만 고정으로 구매하지 않도록 무작위성(온도 파라미터)을 부여해 다채로운 데이터를 생성합니다.
  • 기분(Mood) 감쇠 시스템: 불만족 이벤트 발생 시 델타값을 부여하고, FInterpTo를 활용해 기준값(Baseline)으로 서서히 회복시켜 ‘예민한 성격’ 등을 자연스럽게 구현합니다.
  • 상호작용 연쇄: 다른 손님의 물리적 점유(Smart Object)와 심리적 회피(EQS), 감정 전염(AIPerception)을 통해 꼬리에 꼬리를 무는 매장 내 긴장감을 유도합니다.
  • 유기적인 진상 행동 발동: 진상 행동(새치기, 컴플레인 등)은 랜덤이 아닌 ‘낮은 인내심/높은 공격성’ 등의 성격 특성과 ‘긴 대기 시간’ 같은 환경 조건이 맞물려 필연적으로 발생하도록 설계합니다.

3. GOAP (Goal-Oriented Action Planning)의 한계

목표 달성을 위해 플래너가 런타임에 역순으로 행동을 조합하는 GOAP 기법은 훌륭하지만, 편의점 손님 AI에는 구조적으로 적합하지 않습니다.

  • 정형화된 행동 패턴: 편의점 손님의 행동 순서는 ‘입장 → 집기 → 결제 → 퇴장’으로 고정되어 있어 창발적인 행동 조합의 여지가 적습니다.
  • 불리언 상태 공간의 한계: GOAP는 참/거짓 기반 심볼을 다루기 때문에 “과자를 70% 선호한다”와 같은 복합적인 효용(정도) 계산에 취약합니다.
  • 개발 및 성능 비용: UE5에 내장되어 있지 않아 직접 구현해야 하며, 상품 종류가 많아질수록 상태 탐색(A* Search) 비용이 기하급수적으로 폭발합니다.
  • 대안: 행동 목표와 수단이 복잡하게 얽히는 ‘알바생 AI(청소, 재고 보충 등)’에는 활용 여지가 있으나, 전반적으로 Utility AI(의사결정) + StateTree(실행) 조합이 훨씬 직관적이고 다루기 쉽습니다.

4. 실무 개발 팁

  • 최적화: 매 프레임 효용 점수를 계산하지 말고, 의사결정 시점에만 Time-slicing 방식으로 분산 평가해야 합니다.
  • 결정론적 난수: 시드가 고정된 FRandomStream을 사용하여 “진열을 바꿨더니 매출이 올랐다”는 기획적 인과관계를 검증할 수 있어야 합니다.
  • 시각적 디버깅: 커스텀 FGameplayDebuggerCategory를 활용해 NPC 머리 위에 기분과 목표 점수를 띄워 밸런싱 속도를 극대화해야 합니다.
This post is licensed under CC BY 4.0 by the author.