본문 바로가기
Unreal/기본

[Unreal] Unreal Plugin Language (UPL)

by 카피마스터 2024. 7. 12.

UPL은 모바일 환경에서 종속적인 코드를 추가하거나 환경 설정을 위해 사용

 

UBT는 설정된 UPL xml을 통해 다음 파일들을 수정

- AndroidManifest.xml

- plist

- GameActivity.java와 같은 일부 java 파일

 

UPL xml 설정(안드로이드)

1. 프로젝트 경로/Source/프로젝트에 UPL.xml 파일(파일 이름은 적당히 수정)을 만든다

<?xml version="1.0" encoding="utf-8"?>
<root>
...
</root>

 

2. 프로젝트.build.cs에 다음을 추가

if (Target.Platform == UnrealTargetPlatform.Android)
{
	string PluginPath = Utils.MakePathRelativeTo(ModuleDirectory, Target.RelativeEnginePath);
	AdditionalPropertiesForReceipt.Add("AndroidPlugin", System.IO.Path.Combine(PluginPath, "UPL.xml"));  
}

 

 

 

GameActivity.java / onCreate에서 네이티브 코드를 호출하는 경우

UPL.xml

<?xml version="1.0" encoding="utf-8"?>
<root>
	<!-- 네이티브 함수 선언 -->
	<gameActivityClassAdditions>
		<insert>
			 native void NativeOnCreateLogic();
		</insert>
	</gameActivityClassAdditions>
	
	<!-- onCreate에 다음 네이티브 함수 호출 -->	
	<gameActivityOnCreateAdditions>
    		<insert>
			NativeOnCreateLogic();
    		</insert>
  	</gameActivityOnCreateAdditions>
</root>

 

C++ 로직

클래스(여기서는 UPMPlatformHelper로 생성)를 하나 만들고 cpp에 다음을 추가

#include "PMPlatformHelper.h"


#if PLATFORM_ANDROID
extern "C"
{
	void Java_com_epicgames_unreal_GameActivity_NativeOnCreateLogic(JNIEnv*, jobject);
}

void Java_com_epicgames_unreal_GameActivity_NativeOnCreateLogic(JNIEnv* jenv, jobject thiz)
{
	// 여기서 상황에 맞게 처리	
}


#endif

 

 

Android 패키징 후 다음 경로에서 파일을 확인하여 정상적으로 적용되었는지 확인

프로젝트경로/Intermediate/Android/arm64/src/com/epicgames/unreal/GameActivity.java