게임 피처(Game Features) 및 모듈형 게임플레이(Modular Gameplay) 플러그인은 개발자가 프로젝트에 사용할 독립형 피처를 구축하도록 도와줍니다. 이러한 플러그인으로 피처를 구축하면 다음과 같은 이점이 있습니다.
-
프로젝트의 코드베이스를 깔끔하고 읽기 쉽게 유지합니다.
-
의도치 않은 관련 없는 피처 간 인터랙션이나 종속성을 방지합니다. 이러한 장점은 시간이 지나면서 점차 피처 세트를 변경할 라이브 제품을 개발할 때 특히 중요합니다.
구성
다음 단계를 따르면 프로젝트가 독립형 플러그인 기반 피처를 하나 이상 추가할 수 있는 상태가 됩니다. 먼저 게임 피처 및 모듈형 게임플레이 플러그인을 활성화합니다.
-
언리얼 엔진에서 편집(Edit) > 플러그인(Plugins) 으로 이동합니다. 플러그인(Plugins) 창이 열리면, 게임 피처 및 모듈형 게임플레이 플러그인을 찾아서 활성화합니다.
게임 피처 및 모듈형 게임플레이 플러그인 둘 다 게임플레이(Gameplay) 카테고리에서 찾을 수 있습니다.
-
이 두 플러그인을 활성화하면 에디터를 재시작하라는 메시지가 표시됩니다. 지금 재시작(Restart Now) 을 클릭합니다.
-
에디터 재시작 시 플러그인 창으로 이동한 다음, 추가(Add) 를 클릭하여 새 플러그인(New Plugin) 창을 실행합니다.
-
빌드할 피처가 포함된 새 플러그인을 생성합니다. 게임 피처(콘텐츠 전용)(Game Feature(Content Only)) 를 선택한 다음, 플러그인 이름을 지정합니다.
-
콘텐츠 브라우저(Content Browser) 를 사용하여 플러그인의 최상위 레벨 콘텐츠 폴더로 이동합니다. 플러그인은 프로젝트 내
/Plugins/GameFeatures/
디렉터리에 저장해야 합니다.이 예시에서는 플러그인 이름을 MyStandAloneFeature 로 지정했습니다.
-
에셋 패널(Asset Panel) 을 우클릭하고 컨텍스트 메뉴 내에서 기타(Miscellaneous) 를 펼친 다음, 데이터 에셋(Data Asset) 을 선택하여 새로운 데이터 에셋을 생성합니다. 클래스 목록에서
GameFeatureData
를 선택하고 플러그인에 지정한 이름에 따라 새로운 에셋 이름을 지정합니다.
이러한 단계를 완료하면, 엔진(또는 에디터) 시작 시 독립형 피처가 로드되도록 설정됩니다. 이제 피처 자체를 개발하고 이를 구현할 액션(Actions) 을 추가할 수 있습니다. 다음과 같은 네 가지 타입의 액션을 사용할 수 있습니다.
게임 피처 액션
독립형 피처가 이제 엔진 시작 시 로드되도록 설정됩니다. 이제 피처를 구현할 액션(Actions) 을 추가하여 피처 개발을 시작할 수 있습니다.
액션 | 설명 |
---|---|
치트 추가(Add Cheats) | 새로운 '치트 코드'를 생성하거나 기존 코드를 확장하여 치트 매니저를 확장합니다. 치트 코드는 디버깅에 유용하며, 출시 빌드에서는 자동으로 제거됩니다. ~ (물결) 키를 누르면 프로젝트를 실행하는 도중에 이러한 치트 코드를 입력할 수 있는 콘솔이 열립니다. |
컴포넌트 추가(Add Components) | 액터 서브클래스 목록을 가져와 이 목록에 선택적으로 컴포넌트 세트를 추가합니다. 이는 게임 피처 및 모듈형 게임플레이 플러그인을 사용하는 가장 일반적인 방법인데, 컴포넌트는 다양한 행동의 캡슐화에 적합하기 때문입니다. |
데이터 레지스트리 추가(Add Data Registry) | 하나 이상의 데이터 레지스트리를 프로젝트에 추가합니다. 데이터 레지스트리는 전역적으로 등록된 데이터를 효율적으로 저장하고 얻을 수 있는 곳입니다. |
데이터 레지스트리 소스 추가(Add Data Registry Source) | 하나 이상의 데이터 테이블을 기존 데이터 레지스트리에 추가합니다. |
월드 파티션 콘텐츠 추가(Add World Partition Content) | 월드 파티션 콘텐츠를 피처에 추가합니다. |
액션 추가하기
액션을 추가하려면 방금 생성한 데이터 에셋을 엽니다. 액션(ACTIONS) 카테고리를 펼쳐서 액션(Actions) 배열을 노출합니다. 액션 배열에 엘리먼트를 추가하고 적절한 액션 타입으로 설정합니다. 각 액션 타입에 대한 추가 지침은 아래 섹션에서 확인할 수 있습니다.
위의 그림은 각 액션 타입 중 하나입니다. 주어진 플러그인에 필요한 만큼 액션을 추가할 수 있습니다.
치트 추가하기
치트 추가 액션은 게임에 치트 매니저 익스텐션(Cheat Manager Extension) 을 등록합니다. 개발자는 독립형 피처의 일부로 자체 디버그 명령('치트 코드')을 생성하고, 피처가 적용될 때마다 이러한 명령을 사용하도록 할 수 있습니다.
치트 매니저와 치트 매니저 익스텐션은 디버깅 툴이므로, 출시 빌드에서는 인스턴스화되지 않습니다.
컴포넌트 추가
컴포넌트 추가 액션은 개발자가 제공하는 액터와 컴포넌트 클래스 쌍 목록을 살펴보고 일치하는 각 액터에 각 컴포넌트의 인스턴스를 추가하려고 시도합니다. 해당 컴포넌트를 클라이언트에 추가할지 서버에 추가할지, 아니면 둘 다에 추가할지 지정할 수 있습니다. 기본적으로 둘 다에 컴포넌트가 추가됩니다.
피처가 플러그인 내에 완전히 캡슐화되도록 하려면, 추가하는 컴포넌트를 플러그인 자체에서 가져와야 합니다. 액터 클래스는 폰(Pawn) 과 같은 내장 엔진 클래스이거나 일반적인 MyPawn 과 같은 엔진 클래스의 프로젝트별 자손이 될 수 있습니다. 해당 컴포넌트는 피처와 관련된 모든 프로그램 로직과 데이터 스토리지를 처리해야 합니다.
프로젝트의 액터 서브클래스와의 필수 인터랙션을 최소한으로 유지하면, 다른 프로젝트에서 피처를 더 쉽게 구현할 수 있습니다.
컴포넌트 추가 액션에 베이스 액터 클래스를 사용하는 것은 지원되지 않습니다. 시스템이 해당 액션 부분을 무시할 것입니다. 대신, 컴포넌트가 필요한 액터 서브클래스의 가장 좁은 서브셋을 식별하고 해당 클래스를 지정하는 것이 좋습니다. 여러 개의 클래스가 컴포넌트를 받아야 하고 공통 부모가 없는 경우, 적절한 베이스 클래스를 모두 포함하도록 컴포넌트 추가 액션을 여러 개 설정할 수 있습니다.
컴포넌트 추가 액션으로부터 컴포넌트를 받으려면, 액터가 일반적으로 BeginPlay 이벤트에서 게임 프레임워크 컴포넌트 매니저(Game Framework Component Manager) 를 통해 자신을 등록해야 합니다. 글로벌 게임 프레임워크 컴포넌트 매니저를 가져와 해당 Add Receiver 함수를 호출하여 액터를 Receiver 파라미터로 전달하면 됩니다. 활성 게임 피처가 몇 개든 액터에는 하나의 Add Receiver 호출만 필요합니다. 액터에서 게임 피처와 관련된 모든 컴포넌트를 제거하려면 게임 프레임워크 컴포넌트 매니저의 Remove Receiver 함수를 사용합니다.

액터의 BeginPlay 이벤트에서 컴포넌트를 받도록 등록
컴포넌트 추가(Add Components) 액션을 통해 컴포넌트를 받으려면, 액터가 UGameFrameworkComponentManager
싱글톤 인스턴스를 통해 스스로 등록하고 AddReceiver
함수로 전달해야 합니다. 이는 일반적으로 BeginPlay
에서 수행됩니다. 코드는 다음과 같아야 합니다:
if (UGameFrameworkComponentManager* ComponentManager = GetGameInstance()->GetSubsystem<UGameFrameworkComponentManager>())
{
ComponentManager->AddReceiver(this);
}
데이터 레지스트리 추가하기
데이터 레지스트리 추가 액션으로 프로젝트에 전체 데이터 레지스트리를 추가할 수 있습니다. 추가하려는 데이터 레지스트리 에셋 경로로 이 액션을 환경설정합니다. 데이터 레지스트리에 대한 자세한 내용은 데이터 레지스트리 페이지를 참조하세요.
데이터 레지스트리 소스 추가하기
데이터 레지스트리로 스트리밍되는 데이터 소스를 추가하려면, 데이터 레지스트리 소스 추가 액션을 사용합니다. 각 데이터 소스에 대한 경로와 데이터 소스를 로드할 데이터 레지스트리 이름, 관련 우선순위 및 사용 플래그를 환경설정해야 합니다. 시작 시 게임 피처가 로드되면, 적절한 식별자가 드롭다운 목록에 채워집니다. 자세한 내용은 데이터 레지스트리 페이지의 데이터 레지스트리 소스(Data Registry Sources) 섹션을 참조하세요.