
언리얼 고급 기술 활용 강의를 듣고 배운 내용을 정리해본다. AI 개념을 배우고 실습을 통해 AI 구현에 대한 기초적인 내용을 익혀보는 시간을 가졌다.
언리얼엔진에서 AI란?
게임에서 몬스터를 따돌리고 컨트롤을 이용하여 강력한 상대를 무찌르는 등의 게임 속의 룰/오브젝트와 상호작용하여 목표를 달성해내는게 게임의 주요 재미 중 하나.
몬스터나 NPC, 맵 내의 액터들이 플레이어가 나타나면 기다렸다는 듯 인지하고 공격하는 등 액터가 마치 지능이 있는 것 처럼 행동하도록 설계하는 기능
❗ChatGPT의 AI와 다른 개념?
ChatGPT와 같은 콘텐츠 생성형 AI는 딥러닝/머신러닝 기반의 추론, 생성형 모델인데 반하여 언리얼 엔진에서의 AI는 상태와 조건을 구별하며 움직이는 로봇/기계 구현에 가까움.
언리얼 엔진도 최근들어 머신러닝 기반의 새로운 기능들을 소개하고 있으며, 많은 개발자와 디자이너 분들이 이를 활용해 다양한 시도들을 펼치고 있는 만큼, 앞으로는 언리얼 엔진의 AI 개념과 혼용될 가능성이 있음. 그러나 현재의 언리얼 엔진에서 AI, 인공지능, Artificial Intelligence는 앞서 얘기하였 듯이 지능이 있는 것 처럼 행동하는 액터를 지칭함.
AI Controller : 우리 뇌-신경 처럼 게임속 AI 액터를 찾아서 움직이도록 조작Behavior Tree : 어떤 상황에 무슨 행동을 할지 등 상황 판단 행동 규약(알고리즘)을 저장Blackboard : 뇌처럼 AI가 해야 할 일 등의 정보와 키(key) 등을 기억(저장)위 세 가지를 생성(AI Controller 클래스 내부에는 이미 BlackBoard와 Behavior Tree가 포함)

위와 같이 블랙보드와 비헤이비어 트리는 에디터에서 생성

C++ 클래스로 만든 AI Controller
NavMeshBoundsVolume : AI가 이동할 수 있는 영역을 정의하는 볼륨

위 사진의 바닥의 초록 부분이 NavMeshBoundsVolume이다.
동적으로 NavMeshBoundsVolume 설정
네비메시는 기본적으로 정적으로 한 번 세팅하면 그대로 적용된다. 하지만 게임 상황이나 제작자의 의도에 따라 레벨의 환경이 변할 때 네비메시도 그에 따라 변경해야 할 경우 동적으로 변경하여 복잡한 게임을 디자인 할 때 유용하게 사용된다.

위 사진과 같이 프로젝트 세팅 → 엔진-네비게이션 메시 → 런타임 → 런타임 생성 변경
기본 값은 Static이고 Dynamic, Dynamic Modifiers Only로 변경할 수 있다.
참고자료


// 활성화될 범위 설정. 테스트를 위해 매우 작은 값 부여.
NavGenerationRadius = 10.0f;
NavRemovalRadius = 15.0f;
// Navigation Invoker 컴포넌트 생성 및 초기값 셋업.
NavInvoker = CreateDefaultSubobject<UNavigationInvokerComponent>(TEXT("NavInvoker"));
// SetGenerationRadii 함수를 사용하여 생성 반경과 제거 반경 설정. Protected 멤버변수이므로 함수를 통해 수정 필요.
NavInvoker->SetGenerationRadii(NavGenerationRadius, NavRemovalRadius);오늘은 이러한 기초적인 개념들을 알아보고 에디터상에서 생성 및 배치를 해보았다. AI기능으로 게임에서 다양한 상호작용을 구현하여 재밌게 만드는 요소로 작용할 수 있을 것 같다.