언리얼 엔진에서 강화학습(Snake) 게임 적용

조정원·2026년 1월 25일

언리얼 엔진에서 강화학습(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++ 에서 실행했습니다.

흐름:

  1. PyTorch 모델 학습
  2. ONNX 형식으로 변환
  3. 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 구조로 확장할 계획입니다.

읽어주셔서 감사합니다.

profile
게임 AI 개발자 조정원입니다.

0개의 댓글