Unreal Engine 4
Hive SDK를 설치 후 수행하는 작업을 안내합니다.
화면 자동 회전 기능 설정¶
화면 방향을 양방향(가로와 세로 방향 모두)으로 설정 시, 아래 설정이 필요합니다.
Android¶
Android 앱 빌드에서 화면 방향을 양방향(가로와 세로 방향 모두)으로 설정 시, 화면 자동 회전 기능이 정상 동작하려면 아래 코드 수정이 필요합니다.
- /Engine/Build/Android/Java/src/com/epicgames/ue4/GameActivity.java.template로 이동하세요.
HiveActivity.onConfigurationChaged()
API를 추가하세요.@Override public void onConfigurationChanged(Configuration newConfig) { HiveActivity.onConfigurationChanged(this, newConfig); // Add super.onConfigurationChanged(newConfig); // forward the orientation boolean bPortrait = newConfig.orientation == Configuration.ORIENTATION_PORTRAIT; nativeOnConfigurationChanged(bPortrait); }
iOS¶
iOS에서 양방향 설정 추가 기능이 정상 동작하려면 Unreal Engine IOSAppDelegate.cpp 파일 내 화면 회전 관련 메서드인 application(\_:supportedInterfaceOrientationsFor:)
를 구현해야 합니다. 이 메서드 리턴값은 게임에 적용시킬 UIInterfaceOrientationMask
값을 반환합니다. 가로 전용 게임은 landscape
, 세로 전용 게임은 portrait
을 반환하며, 가로와 세로 화면을 동시 지원하는 게임은 landscape
와 portrait
를 모두 반환합니다.
/Engine/Source/Runtime/ApplicationCore/Private/IOS/IOSAppDelegate.cpp에 아래의 코드를 추가하세요.
- (UIInterfaceOrientationMask)application:(UIApplication *)application supportedInterfaceOrientationsForWindow:(UIWindow *)window
{
// TODO: 가로 전용 게임
return UIInterfaceOrientationMaskLandscape;
// TODO: 세로 전용 게임
return UIInterfaceOrientationMaskPortrait;
// TODO: 가로와 세로 모두 지원하는 게임
return UIInterfaceOrientationMaskAll;
}
Swift 호환성 설정 (iOS)¶
iOS 개발 환경에서는 Unreal Engine 4와 Swift 언어 호환을 위해 아래 파일들에서 'Add'
주석으로 표시한 라인 혹은 라인들(Add
부터 Add End
)을 추가하세요.
Engine/Source/Programs/UnrealBuildTool/ProjectFiles/Xcode/XcodeProject.cs
{
Content.Append("\t\t\t\t\"PRODUCT_BUNDLE_IDENTIFIER[sdk=iphoneos*]\" = " + IOS_BUNDLE + ";" + ProjectFileGenerator.NewLine);
}
// Add
if (ProjectFile != null)
{
Content.Append("\t\t\t\tSWIFT_VERSION = 5.0;" + ProjectFileGenerator.NewLine);
Content.Append("\t\t\t\tSWIFT_OBJC_BRIDGING_HEADER = \"" + GamePath + "/dummy-Bridging-Header.h\";" + ProjectFileGenerator.NewLine);
}
// Add End
}
if (TVOSRunTimeVersion != null)
{
if (XcodeProjectFileGenerator.bGeneratingRunIOSProject)
{
Content.Append("\t\t\t\tALWAYS_EMBED_SWIFT_STANDARD_LIBRARIES = YES;"+ ProjectFileGenerator.NewLine); // Add
Content.Append("\t\t\t\tINFOPLIST_FILE = \"" + IOSInfoPlistPath + "\";" + ProjectFileGenerator.NewLine);
Content.Append("\t\t\t\tCODE_SIGN_ENTITLEMENTS = \"" + IOSEntitlementPath + "\";" + ProjectFileGenerator.NewLine);
}
Content.Append("\t\t\t\t\"INFOPLIST_FILE[sdk=macosx*]\" = \"" + MacInfoPlistPath + "\";" + ProjectFileGenerator.NewLine);
if (IOSRunTimeVersion != null)
{
Content.Append("\t\t\t\tALWAYS_EMBED_SWIFT_STANDARD_LIBRARIES = YES;"+ ProjectFileGenerator.NewLine); // Add
Content.Append("\t\t\t\t\"INFOPLIST_FILE[sdk=iphoneos*]\" = \"" + IOSInfoPlistPath + "\";" + ProjectFileGenerator.NewLine);
Content.Append("\t\t\t\t\"CODE_SIGN_ENTITLEMENTS[sdk=iphoneos*]\" = \"" + IOSEntitlementPath + "\";" + ProjectFileGenerator.NewLine);
}
Engine/Source/Programs/UnrealBuildTool/Platform/IOS/IOSToolChain.cs
Result += " -Xlinker \\\"" + Path.GetDirectoryName(OutputFile.AbsolutePath) + "\\\"";
}
Result += " -Xlinker -rpath -Xlinker /usr/lib/swift"; // Add
Result += " -dead_strip";
Result += " -m" + GetXcodeMinVersionParam() + "=" + ProjectSettings.RuntimeVersion;
Result += " -Wl";
HIVEAppDelegate 적용 (iOS)¶
iOS 개발 환경에서 Hive SDK를 사용하기 위해 Swizzling을 이용해 AppDelegate를 수정합니다. 앱 시작시 초기화하는 단계에서 아래 코드를 추가해주세요.
////////////////////////////////////////////////////////////////
// IOSAppDelegate.h 헤더 추가
#if PLATFORM_IOS
#include "Runtime/ApplicationCore/Public/iOS/IOSAppDelegate.h"
#endif
////////////////////////////////////////////////////////////////
////////////////////////////////////////////////////////////////
// AppDelegate 추가코드 본문
#if PLATFORM_IOS
UIApplication * dummyApplication = [UIApplication sharedApplication];
Class clzHIVEAppDelegate = NSClassFromString(@"HIVEAppDelegate");
SEL selApplicationDidFinishLaunchingWithOptions = NSSelectorFromString(@"application:didFinishLaunchingWithOptions:");
if( clzHIVEAppDelegate != nil && [clzHIVEAppDelegate respondsToSelector:selApplicationDidFinishLaunchingWithOptions] ) {
NSMethodSignature *method = [clzHIVEAppDelegate methodSignatureForSelector:selApplicationDidFinishLaunchingWithOptions];
if (method != nil) {
NSInvocation *invocation = [NSInvocation invocationWithMethodSignature:method];
[invocation setSelector:selApplicationDidFinishLaunchingWithOptions];
[invocation setTarget:clzHIVEAppDelegate];
[invocation setArgument:(void*)&dummyApplication atIndex:2];
NSDictionary *localLaunchOptions = [IOSAppDelegate GetDelegate].launchOptions;
if( localLaunchOptions != nil ) {
[invocation setArgument:(void*)&localLaunchOptions atIndex:3];
}
[invocation invoke];
}
}
#endif
////////////////////////////////////////////////////////////////
FmallocAnsi 설정 (iOS)¶
Unreal Engine iOS와 C++ 표준 템플릿 라이브러리 호환을 위해 아래와 같이 FMallocAnsi 설정이 필요합니다. 앱 프로젝트의 {YourProject}.Target.cs파일에 다음 코드를 추가합니다.