Post

UE - 모듈형 게임플레이

UnrealEngine

UE - 모듈형 게임플레이

하나의 기능을 독립적인 부품으로 분리하여 관리할 수 있도록 설계하는 것이 모듈형 게임플레이.

플러그인은 언러얼 엔진에 특정 기능을 추가해 주는 선택적 소프트웨어 컴포넌트.

플러그인을 이용하면 언리얼 엔진 코드를 수정하지 않고도 완전히 새로운 기능을 추가하거나 내장된 기능을 수정할 수 있다.

게임 피처 플러그인

기존엔 게임의 기본적인 동작 방식(코어 시스템)은 게임 안에 포함 되어 있고, 새로운 콘텐츠(맵, 캐릭터, 아이템 등)만 따로 분리해 배포했다.

때문에 DLC나 확장팩이 게임의 동작 방식을 유지하며 추가적인 콘텐츠를 추가하는 방식으로 이루어졌다.

이러면 게임의 핵심 시스템을 변경하기 어렵고, 새로운 기능을 추가하기 위해 기존 코드를 수정하는 문제가 있었다.

게임 피처 플러그인이 추가되며, 코어 시스템을 변경하지 않고도 게임 플레이 자체를 확장할 수 있게 되었다.

예를 들어 기존의 게임이 1인칭 슈팅 게임이라고 볼 때.

게임 피처 플러그인을 사용하면 기존의 FPS를 수정하지 않고도 TPS 모드를 추가할 수 있고, 전혀 다른 장르인 턴제 전략 게임을 추가할 수 있다.

하나의 게임 엔진을 기반으로 기존의 게임플레이에 구속되지 않고 확장하는 것이 가능해진 것이다.

게임 피처 플러그인의 핵심 특징

  1. 런타임 플러그 앤 플레이 지원
    • 게임이 실행되는 도중에 게임 피처를 추가 제거가 가능
    • 기존 방식에서는 게임을 패치 혹은 다시 빌드해야 했지만, 게임 피처 플러그인을 사용해 게임을 수정하지 않고 새로운 기능을 쉽게 추가/제거 가능하다.
  2. 게임은 피처 플러그인에 의존하지 않는다.
    • 기존 코드에서 참조되지 않아도 실행이 가능하다.
    • 게임 피처에 대해 아무 정보가 없어도 런타임에 플러그인을 불러와 플러그인의 기능을 사용할 수 있다는 뜻

게임 피처 데이터 에셋

게임 피처의 기능 명세서 역할을 하는 데이터 에셋이다.

초기 상태와 현재 상태로 플러그인의 상태를 결정해준다.

Actions에서 플러그인의 기능들을 추가해준다.

AssetManager 부분은 아직 잘 모르겠다.

플러그인 편집을 누르면 아래 창이 뜬다.

초기 상태: 플러그인이 최초에 어떤 상태인지를 결정할 때 사용한다.

플러그인 상태 종류

Installed: 디스크에 존재할 때
Registered: 엔진이 플러그인을 검색 가능
Loaded: 플러그인이 메모리에 올라왔을 때
Acvie: 플러그인이 활성화 되었을 때

Installed를 누르면 콘텐츠 창에서 사라질 수 있으니 주의해야 한다.

메인 콘텐츠 말고도 다른 Game Feature도 사용하려면 종속성을 요구할 때 사용한다고 한다.

액션

어떤 동작을 정의할지 결정하는 부분 기본으로 제공되는 액션은 4 가지라고 하는데 몇 개 더 추가된 것 같다.
일단 원래 제공되었던 4가지는 이렇다.

  1. 치트: 디버그용 기능들인 치트 기능들을 치트 매니저에 모아서 관리, 치트 매니저는 플레이어 컨트롤러가 생성될 때 함께 생성된다고 한다.
  2. 컴포넌트: 액터에 컴포넌트를 붙였다 때는 기능
  3. 데이터 레지스트리: 추가 데이터 레지스트리 (글로벌하게 접근 가능한 데이터 저장 공간)
  4. 데이터 레지스트리 소스: 데이터 레지스트리 확장

데이터 레지스트리가 데이터 레지스트리 소스의 정보를 읽고 저장, 사용자가 레지스트리에 접근해 원하는 정보 가져오기 가능.

예제로 실습

예제가 있어서 따라해봤다.

3인칭 프로젝트를 생성하고 게임 피처를 사용하기위해 플러그인을 활성화 해준다.

활성화 하면 재시작 해주자.

재시작하면 오류가 뜰 텐데, 오류 끝 쪽에 누를 수 있는 링크?를 눌러주면 해결된다.

이제 게임 피처를 만들어보자.

여기서 추가를 눌러주면 아래 창이 뜬다.

여기서 게임 피처 C++을 선택해줬다.

여기도 재시작 했던걸로 기억한다.

그럼 이제 콘텐츠 브라우저에 이렇게 나온다.

그리고 아래처럼 플러그인 이름으로 데이터 에셋이 생성된다.

이번엔 메인 캐릭터의 점프력을 올려주는 간단한 기능을 추가할 것이기에 “컴포넌트 추가”만 선택해줬다.

메인 캐릭터는 삼인칭 캐릭터를 그대로 사용해줬고, 슈퍼 점프는 액터 컴포넌트를 상속받은 블루프린트 클래스로 구현해줬다.

이렇게 캐릭터 무브먼트 컴포넌트를 가져와 점프 Z 크기에 변화를 주면 된다.

참고로 초기 상태를 Loaded로 해놔서 처음 실행하면 플러그인이 활성화 되지 않는다.

꼭 사용하려면 Active 상태로 만들어야한다.

결과

참고로 콘솔 명령어로도 플러그인을 활성화 시킬 수 있다.

레벨 블루프린트에서 키를 입력해 플러그인을 활성화/비활성화 시킬 수 있게 만들어봤다.

결과

요약

게임 피처를 사용하면 기존 코드를 수정할 필요가 딱히 없다는 장점이 있다. 메인 게임은 플러그인에 대해 알 필요가 없으니 확장에 엄청 좋다. 아마 팀업 활동에서도 소스 저장소에 브랜치를 나누지 않고 각자 피처를 만들어서 사용하면 되지 않을까? 라는 생각을 해본다.
라이라도 게임 피처를 적극적으로 사용하던데, 여기선 활성화/비활성화를 어떻게 시켜주는지 확인해봐야겠다.

This post is licensed under CC BY 4.0 by the author.