Unreal Engine 4
คู่มือนี้อธิบายงานที่ต้องดำเนินการหลังจากติดตั้ง Hive SDK
การตั้งค่าฟีเจอร์หมุนหน้าจออัตโนมัติ¶
ต้องตั้งค่าต่อไปนี้เมื่อกำหนดทิศทางหน้าจอเป็นทั้งแนวนอนและแนวตั้ง
Android¶
สำหรับการ build แอป Android หากกำหนดทิศทางหน้าจอเป็นทั้งแนวนอนและแนวตั้ง จำเป็นต้องแก้ไขโค้ดต่อไปนี้เพื่อให้ฟีเจอร์หมุนหน้าจออัตโนมัติทำงานอย่างถูกต้อง
- ไปที่ /Engine/Build/Android/Java/src/com/epicgames/ue4/GameActivity.java.template
- เพิ่ม API
HiveActivity.onConfigurationChanged()@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 ให้ implement เมธอดที่เกี่ยวข้องกับการหมุนหน้าจอ application(\_:supportedInterfaceOrientationsFor:) ในไฟล์ IOSAppDelegate.cpp ของ Unreal Engine เมธอดนี้จะคืนค่า 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 that supports both landscape and portrait
return UIInterfaceOrientationMaskAll;
}
การตั้งค่าความเข้ากันได้ของ Swift (iOS)¶
ในสภาพแวดล้อมการพัฒนา iOS ให้เพิ่มบรรทัดหรือบล็อกที่มีคอมเมนต์ 'Add' ในไฟล์ต่อไปนี้เพื่อให้ Unreal Engine 4 เข้ากันได้กับภาษา Swift
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";
การตั้งค่า entitlements (iOS)¶
Unreal Engine จะสร้างไฟล์ entitlements สำหรับการลงนามแบบไดนามิกผ่าน UnrealBuildTool ในขณะ build ให้เพิ่มรายการ entitlement ที่จำเป็นดังนี้
- เพิ่มผ่าน project settings: รายการ entitlement ทั่วไปบางรายการสามารถเปิดใช้งานได้โดยตรงในเมนู Project Settings ของ Unreal Editor
- เพิ่มโดยแก้ไข engine source: รายการอื่นที่ไม่รองรับใน project settings ต้องเพิ่มโดยแก้ไขโค้ดส่วนสร้าง entitlements ในไฟล์ UnrealBuildTool engine source ด้านล่างโดยตรง
- ไฟล์ที่ต้องแก้ไข: Engine/Source/Programs/UnrealBuildTool/Platform/IOS/IOSExport.cs
รายการ entitlement ที่จำเป็นสำหรับแต่ละฟีเจอร์ของ Hive SDK และวิธีเพิ่มมีดังนี้ ให้เพิ่มเฉพาะรายการของฟีเจอร์ที่แอปของคุณใช้ ซึ่งต้องเปิดใช้งานเป็น capability ใน provisioning profile ด้วย สำหรับรายละเอียดของแต่ละรายการ โปรดดู เอกสารทางการของ Apple
| ฟีเจอร์ที่ใช้ | entitlement ที่จำเป็น | วิธีเพิ่ม |
|---|---|---|
| Remote Push | aps-environment | เลือก Enable Remote Notifications Support ภายใต้ Online ใน Project Settings > Platforms > iOS |
| Sign in with Apple (IdP) | com.apple.developer.applesignin | เพิ่ม bEnableSignInWithAppleSupport=True ใน section [/Script/IOSRuntimeSettings.IOSRuntimeSettings] ของ Config/DefaultEngine.ini |
| Universal Link (Deep Link/ลิงก์เชิญ) | com.apple.developer.associated-domains | แก้ไข IOSExport.cs สำหรับการตั้งค่าโดเมน โปรดดู การตั้งค่า Universal Link |
| Game Center login (IdP) | com.apple.developer.game-center | แก้ไข IOSExport.cs |
| การแจ้งช่วงอายุ (โมดูล AgeRange) | com.apple.developer.declared-age-range | แก้ไข IOSExport.cs สำหรับรายละเอียด โปรดดู การปฏิบัติตามข้อกำหนด App Store |
เมื่อแก้ไข IOSExport.cs ให้เพิ่มรายการที่จำเป็นระหว่าง 'Add' และ 'Add End' ในตำแหน่งด้านล่าง
Text.AppendLine( "<dict>");
Text.AppendLine( "\t<key>get-task-allow</key>");
Text.AppendLine(string.Format( "\t<{0}/>", bForDistribution ? "false": "true"));
// Add - Add the required entitlement entries. The following is a Game Center example.
Text.AppendLine("\t<key>com.apple.developer.game-center</key>");
Text.AppendLine("\t<true/>");
// Add End
if (bCloudKitSupported) {
if (iCloudContainerIdentifiersXML != "")
Note
การแก้ไขไฟล์ IOSExport.cs เป็นการเปลี่ยนแปลง source code ของ UnrealBuildTool (UBT) ไม่จำเป็นต้อง rebuild เอนจินทั้งหมด UBT จะถูก compile โดยอัตโนมัติระหว่างการ build โปรเจกต์ครั้งถัดไป และการเปลี่ยนแปลงจะถูกนำไปใช้ทันที
หลังจาก build แล้ว ให้ตรวจสอบว่า entitlements ถูกนำไปใช้กับแอปดังนี้
การใช้ HIVEAppDelegate (iOS)¶
ตั้งแต่ Hive SDK v4 26.4.1 เป็นต้นไป HIVEAppDelegate swizzling จะดำเนินการโดยอัตโนมัติภายในปลั๊กอิน Hive SDK ปลั๊กอินจะจัดการโดยอัตโนมัติเมื่อแอปเริ่มทำงาน ดังนั้นจึงไม่จำเป็นต้องทำงานเพิ่มเติมในโค้ดแอป
การลบโค้ดเชื่อมต่อเดิมสำหรับเวอร์ชันก่อน v4 26.4.1
หากคุณใช้เวอร์ชันก่อน Hive SDK v4 26.4.1 ให้ลบการแก้ไขเดิมเมื่ออัปเดต
- ลบโค้ดเรียก HIVEAppDelegate ด้วยตนเอง: อ้างอิงขั้นตอน "การใช้ HIVEAppDelegate (iOS)" ในคู่มือก่อนหน้า แล้วลบโค้ดบล็อกที่เพิ่มไว้ระหว่างการเริ่มต้นแอปออกจากโปรเจกต์
- ลบโค้ด subscribe Deep Link delegate: อ้างอิงขั้นตอน "การเพิ่มโค้ด Promotion สำหรับการตั้งค่า Deep Link (iOS)" ในคู่มือก่อนหน้า แล้วลบโค้ด subscribe และ handler ที่เพิ่มไว้ใน
GameInstanceหรือคลาสที่คล้ายกัน- ลอจิกภายใน handler อาจถูก implement เป็น
Promotion::processURI(...)หรือFHivePromotion::ProcessURI(...)ขึ้นอยู่กับอินเทอร์เฟซที่คุณใช้
- ลอจิกภายใน handler อาจถูก implement เป็น
-
ลบการเรียก bootstrap trigger ใน Blueprint: ลบฟังก์ชัน trigger ที่กำหนดเองในแอปและถูกเรียกจาก Blueprint เช่น
RemoveOpenURLDelegate()รวมถึงโหนดเรียกที่เกี่ยวข้องทั้งหมดหากลบการ subscribe delegate ภายในแอปข้างต้นอย่างถูกต้องแล้ว โค้ดแก้ไขที่เกี่ยวข้องกับ openURL ซึ่งเคยนำไปใช้กับ custom engine โดยตรง (
IOSAppDelegate.h,IOSAppDelegate.cpp) จะไม่ส่งผลต่อการทำงานของเอนจิน ดังนั้นสามารถปล่อยโค้ดดังกล่าวไว้ได้โดยไม่ต้องลบหรือย้อนกลับ