언리얼 엔진에서 강화학습(Snake) 게임 적용 정리
본 글은 강화학습으로 학습한 Snake 게임 에이전트를 Unreal Engine 환경에 적용한 과정을 정리한 글입니다.
강화학습, 게임 AI, 그리고 실제 엔진 통합까지 한 번에 경험해보고자 진행한 개인 프로젝트 기록 성격의 글입니다.
1. 프로젝트 목표
- Snake 게임 환경을 직접 구현
- 강화학습(DQN 기반)으로 에이전트 학습
- 학습된 모델을 Unreal Engine(C++) 에서 추론 실행
- 게임 엔진 관점에서 AI 통합 시 고려할 점 정리
2. Snake 게임 환경 설계
2.1 상태(State) 정의
Snake 게임의 핵심은 현재 보드 상태를 어떻게 관측할 것인가입니다.
사용한 주요 상태 정보:
- 뱀 머리(head) 위치
- 음식(food) 위치
- 뱀 몸(body) 전체 좌표
- 상/하/좌/우 장애물 여부
- 진행 방향
단순 좌표만 사용하면 장기 생존 전략이 어렵기 때문에, 충돌 가능성 정보를 명시적으로 포함했습니다.
2.2 행동(Action) 공간
행동은 단순화하여 4가지 이산 행동으로 제한했습니다.
- 위로 이동
- 아래로 이동
- 왼쪽 이동
- 오른쪽 이동
Unreal Engine에서도 동일한 액션 정의를 유지하여 학습 환경과 실행 환경의 불일치 문제를 최소화했습니다.
2.3 보상(Reward) 설계
보상 설계는 학습 성능에 가장 큰 영향을 주는 요소입니다.
기본 구조:
- 매 스텝 기본 패널티 (시간 지연 억제)
- 음식 섭취 시 큰 양의 보상
- 벽 또는 자기 몸 충돌 시 큰 패널티
- 뱀 길이에 비례한 미세 보상
예시 개념:
- 오래 생존하되, 의미 없는 반복 행동은 억제
- 단기 생존보다 공간을 안전하게 사용하는 정책 유도
3. 강화학습 모델 구성
3.1 알고리즘 선택
-
Deep Q-Network (DQN) 사용
-
이유:
- 이산 행동 공간에 적합
- 구조가 단순하여 디버깅 및 엔진 이식이 용이
3.2 학습 안정화 기법
적용한 주요 기법:
- Experience Replay
- Target Network
- Epsilon-Greedy Exploration
특히 보드 크기가 커질수록 단기 시야 문제가 발생하여,
- 타겟 네트워크 업데이트 주기 조정
- 장기 생존을 유도하는 보상 shaping
을 반복적으로 실험했습니다.
4. 학습된 모델의 엔진 적용
4.1 PyTorch → ONNX 변환
학습은 Python(PyTorch) 환경에서 수행하고, 추론은 Unreal Engine C++ 에서 실행했습니다.
흐름:
- PyTorch 모델 학습
- ONNX 형식으로 변환
- Unreal Engine에서 ONNX Runtime 사용
이 방식을 선택한 이유:
- 엔진 패키징 용이
- 런타임 성능 우수
- Python 의존성 제거
4.2 Unreal Engine C++ 추론 구조
엔진에서의 구조 개요:
- Snake 상태 → C++ 구조체로 변환
- ONNX Runtime 입력 텐서 구성
- 모델 추론 실행
- 출력 Q-value 중 최대값 행동 선택
게임 로직과 AI 로직을 분리하여:
- 추후 다른 AI 교체 가능
- Blueprint와 C++ 연동 최소화
5. Unreal Engine 적용 시 고려 사항
5.1 추론 비용 관리
- 매 Tick 추론은 비효율적
- Snake 이동 타이밍에 맞춰 추론 호출
- 필요 시 프레임 스킵 적용
강화학습 모델이라도 게임 엔진에서는 시스템 비용 관리가 핵심입니다.
5.2 디버깅의 어려움
- 학습 환경과 엔진 환경의 차이
- 좌표계 및 방향 정의 불일치
- 실시간 시각화 부족
이를 해결하기 위해:
- 상태 값을 화면에 디버그 출력
- 행동 선택 결과를 로그로 기록
6. 결과 및 느낀 점
- 강화학습 모델을 실제 게임 엔진에 넣는 경험은 생각보다 많은 공학적 고려가 필요
- 학습보다 어려운 것은 통합과 디버깅
- 단순한 Snake 게임이라도 엔진 관점에서는 충분히 복잡한 AI 시스템
7. 이후 개선 방향
- 상태 표현 고도화 (공간 인식 강화)
- Planning 기반 로직과 RL 혼합
- 멀티 Snake 또는 난이도 확장
- 다른 게임 장르로 확장 적용

마무리
본 프로젝트는 강화학습을 "이론"이 아닌 실제 게임 개발 파이프라인에 적용해보기 위한 실험이었습니다.
향후에는 보다 복잡한 게임 AI 구조로 확장할 계획입니다.
읽어주셔서 감사합니다.