Unreal Engine 4
คู่มือนี้อธิบายงานที่ต้องทำหลังจากติดตั้ง Hive SDK.
การตั้งค่าฟีเจอร์หมุนหน้าจออัตโนมัติ¶
เมื่อตั้งค่าทิศทางของหน้าจอเป็นทั้งแนวนอนและแนวตั้ง จะต้องมีการตั้งค่าดังต่อไปนี้
แอนดรอยด์¶
สำหรับการสร้างแอป Android หากคุณต้องการตั้งค่าทิศทางหน้าจอเป็นทั้งแนวนอนและแนวตั้ง และให้แน่ใจว่าฟีเจอร์หมุนอัตโนมัติทำงานได้อย่างถูกต้อง คุณต้องแก้ไขโค้ดต่อไปนี้。
<
- ไปที่ /Engine/Build/Android/Java/src/com/epicgames/ue4/GameActivity.java.template.
- เพิ่ม API
HiveActivity.onConfigurationChaged()
.@Override public void onConfigurationChanged(Configuration newConfig) { HiveActivity.onConfigurationChanged(this, newConfig); // เพิ่ม super.onConfigurationChanged(newConfig); // ส่งต่อการจัดแนว boolean bPortrait = newConfig.orientation == Configuration.ORIENTATION_PORTRAIT; nativeOnConfigurationChanged(bPortrait); }
iOS¶
สำหรับ iOS เพื่อให้แน่ใจว่าการตั้งค่าทั้งสองทิศทางเพิ่มเติมทำงานอย่างถูกต้อง คุณต้องดำเนินการตามวิธีที่เกี่ยวข้องกับการหมุนหน้าจอ application(_:supportedInterfaceOrientationsFor:)
ในไฟล์ Unreal Engine IOSAppDelegate.cpp ค่าที่ส่งคืนจากวิธีนี้ควรส่งคืนค่า UIInterfaceOrientationMask
ที่จะนำไปใช้กับเกม เกมที่รองรับเฉพาะแนวนอนจะส่งคืน landscape
เกมที่รองรับเฉพาะแนวตั้งจะส่งคืน portrait
และเกมที่รองรับทั้งแนวนอนและแนวตั้งจะส่งคืนทั้ง landscape
และ portrait
.
เพิ่มโค้ดต่อไปนี้ไปที่ /Engine/Source/Runtime/ApplicationCore/Private/IOS/IOSAppDelegate.cpp.
- (UIInterfaceOrientationMask)application:(UIApplication *)application supportedInterfaceOrientationsForWindow:(UIWindow *)window
{
// TODO: Landscape-only game
return UIInterfaceOrientationMaskLandscape;
// TODO: Portrait-only game
return UIInterfaceOrientationMaskPortrait;
// TODO: Game supporting both landscape and portrait
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 ให้ปรับเปลี่ยน AppDelegate โดยใช้ Swizzling เพื่อใช้ SDK ของ Hive เพิ่มโค้ดต่อไปนี้ในขั้นตอนการเริ่มต้นในช่วงเริ่มต้นของแอป
////////////////////////////////////////////////////////////////
// Add IOSAppDelegate.h header
#if PLATFORM_IOS
#include "Runtime/ApplicationCore/Public/iOS/IOSAppDelegate.h"
#endif
////////////////////////////////////////////////////////////////
////////////////////////////////////////////////////////////////
// AppDelegate additional code
#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++ Standard Template Library คุณต้องกำหนดค่า FMallocAnsi ดังนี้ เพิ่มโค้ดต่อไปนี้ลงในไฟล์ {YourProject}.Target.cs ของโปรเจกต์แอปของคุณ