ข้ามไปที่เนื้อหา

Unreal Engine 4

คู่มือนี้อธิบายงานที่ต้องดำเนินการหลังจากติดตั้ง Hive SDK

การตั้งค่าฟีเจอร์หมุนหน้าจออัตโนมัติ

ต้องตั้งค่าต่อไปนี้เมื่อกำหนดทิศทางหน้าจอเป็นทั้งแนวนอนและแนวตั้ง

Android

สำหรับการ build แอป Android หากกำหนดทิศทางหน้าจอเป็นทั้งแนวนอนและแนวตั้ง จำเป็นต้องแก้ไขโค้ดต่อไปนี้เพื่อให้ฟีเจอร์หมุนหน้าจออัตโนมัติทำงานอย่างถูกต้อง

  1. ไปที่ /Engine/Build/Android/Java/src/com/epicgames/ue4/GameActivity.java.template
  2. เพิ่ม 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 ถูกนำไปใช้กับแอปดังนี้

codesign -d --entitlements :- {พาธของ .app ที่ build แล้ว}

การใช้ HIVEAppDelegate (iOS)

ตั้งแต่ Hive SDK v4 26.4.1 เป็นต้นไป HIVEAppDelegate swizzling จะดำเนินการโดยอัตโนมัติภายในปลั๊กอิน Hive SDK ปลั๊กอินจะจัดการโดยอัตโนมัติเมื่อแอปเริ่มทำงาน ดังนั้นจึงไม่จำเป็นต้องทำงานเพิ่มเติมในโค้ดแอป

การลบโค้ดเชื่อมต่อเดิมสำหรับเวอร์ชันก่อน v4 26.4.1

หากคุณใช้เวอร์ชันก่อน Hive SDK v4 26.4.1 ให้ลบการแก้ไขเดิมเมื่ออัปเดต

  1. ลบโค้ดเรียก HIVEAppDelegate ด้วยตนเอง: อ้างอิงขั้นตอน "การใช้ HIVEAppDelegate (iOS)" ในคู่มือก่อนหน้า แล้วลบโค้ดบล็อกที่เพิ่มไว้ระหว่างการเริ่มต้นแอปออกจากโปรเจกต์
  2. ลบโค้ด subscribe Deep Link delegate: อ้างอิงขั้นตอน "การเพิ่มโค้ด Promotion สำหรับการตั้งค่า Deep Link (iOS)" ในคู่มือก่อนหน้า แล้วลบโค้ด subscribe และ handler ที่เพิ่มไว้ใน GameInstance หรือคลาสที่คล้ายกัน
    • ลอจิกภายใน handler อาจถูก implement เป็น Promotion::processURI(...) หรือ FHivePromotion::ProcessURI(...) ขึ้นอยู่กับอินเทอร์เฟซที่คุณใช้
  3. ลบการเรียก bootstrap trigger ใน Blueprint: ลบฟังก์ชัน trigger ที่กำหนดเองในแอปและถูกเรียกจาก Blueprint เช่น RemoveOpenURLDelegate() รวมถึงโหนดเรียกที่เกี่ยวข้องทั้งหมด

    หากลบการ subscribe delegate ภายในแอปข้างต้นอย่างถูกต้องแล้ว โค้ดแก้ไขที่เกี่ยวข้องกับ openURL ซึ่งเคยนำไปใช้กับ custom engine โดยตรง (IOSAppDelegate.h, IOSAppDelegate.cpp) จะไม่ส่งผลต่อการทำงานของเอนจิน ดังนั้นสามารถปล่อยโค้ดดังกล่าวไว้ได้โดยไม่ต้องลบหรือย้อนกลับ