เริ่มต้นไลบรารีและยืนยันการดำเนินการ

หน้านี้อธิบายวิธีเริ่มต้นใช้งานไลบรารีในโค้ดเกมและยืนยันว่า มีการอัปโหลดข้อมูลไปยัง Google Play ดูข้อมูลเพิ่มเติมเกี่ยวกับฟังก์ชันไลบรารีที่เฉพาะเจาะจงได้ในเอกสารอ้างอิง

เริ่มต้นไลบรารี

ในเมธอดการเริ่มต้นที่จุดเริ่มต้นของเกม ให้เริ่มต้นไลบรารีโดย สร้างอินสแตนซ์ของ AndroidPerformanceTuner และเรียกใช้เมธอด Start()

using Google.Android.PerformanceTuner;
using UnityEngine;

public class SomeBehaviour : MonoBehaviour
{
    AndroidPerformanceTuner<FidelityParams, Annotation> tuner =
            new AndroidPerformanceTuner<FidelityParams, Annotation>();

    void Start()
    {
        ErrorCode startErrorCode = tuner.Start();
        Debug.Log("Android Performance Tuner started with code: " + startErrorCode);

        tuner.onReceiveUploadLog += request =>
        {
            Debug.Log("Telemetry uploaded with request name: " + request.name);
        };
    }
}

โค้ดนี้เพียงพอที่จะเริ่มต้นใช้งาน Android Performance Tuner และวัดประสิทธิภาพเกม ข้อความบันทึกจะระบุเวลาที่ Android Performance Tuner เริ่มทำงาน และเวลาที่อัปโหลดการวัดและส่งข้อมูลไปยัง Google Play Console API ในภายหลัง คุณจะเห็นข้อความเหล่านี้ในบันทึกเพื่อยืนยันว่าปลั๊กอินทํางาน อย่างถูกต้อง

การเริ่มต้นที่ล่าช้า (Vulkan เท่านั้น)

หากเกมกำหนดเป้าหมายเป็น Vulkan และใช้การเว้นระยะเฟรมของ Android คุณควรให้ Android Performance Tuner เริ่มต้นภายหลัง

IEnumerator Start()
{
    yield return new WaitForEndOfFrame();
    ErrorCode startErrorCode = tuner.Start();
    Debug.Log("Android Performance Tuner started with code: " + startErrorCode);

    tuner.onReceiveUploadLog += request =>
    {
        Debug.Log("Telemetry uploaded with request name: " + request.name);
    };
}

ยืนยันช่วงเวลาระหว่างการอัปโหลดข้อมูลการวัดและส่ง

ช่วงเวลาเริ่มต้นระหว่างการอัปโหลดข้อมูลการวัดและส่งในส่วนการตั้งค่าปลั๊กอินคือ 30 วินาที โดยจะตั้งค่าช่วงเวลานี้เป็นช่วงเวลาสั้นๆ เพื่อให้ยืนยันการอัปโหลดการวัดและส่งข้อมูลทางไกลได้อย่างง่ายดาย เมื่อเผยแพร่เกมไปยังเวอร์ชันที่ใช้งานจริง ให้ตั้งค่านี้เป็นช่วงเวลาที่นาน (เช่น ทุกๆ 10 นาที) เพื่อไม่ให้เกมส่งคำขอไปยัง API มากเกินไป ซึ่งเป็นสิ่งสำคัญอย่างยิ่งสำหรับผู้ใช้ที่ไม่มีแพ็กเกจอินเทอร์เน็ตบนอุปกรณ์เคลื่อนที่แบบไม่จำกัด นอกจากนี้ ช่วงเวลาที่ยาวนานยังช่วยหลีกเลี่ยงการใช้แบตเตอรี่ของอุปกรณ์มากเกินไปอีกด้วย

หากต้องการยืนยันว่าตั้งค่าช่วงเวลาเป็น 30 วินาที ให้ทำดังนี้

  1. เลือก Google > Android Performance Tuner เพื่อเข้าถึงการตั้งค่า
  2. เลือกแท็บการตั้งค่าการวัดผล แล้วคลิกใช้การตั้งค่าขั้นสูง
  3. ตรวจสอบว่าช่องช่วงเวลา (นาที) มีค่าเป็น 0.5

แท็บการตั้งค่าการวัดในปลั๊กอิน

ตรวจสอบการทำงานที่เหมาะสม

หากคุณใช้ IL2CPP หรือการลบโค้ดที่ไม่จำเป็นออก โปรดดูจัดการการลบโค้ดที่ไม่จำเป็นออก

สร้างเกมสำหรับ Android ขณะที่เกมเปิดตัวในอุปกรณ์ ให้เปิดเทอร์มินัลในคอมพิวเตอร์แล้วเปิดใช้ adb logcat โดยทำดังนี้

adb logcat

ในเอาต์พุตของ adb logcat ให้ค้นหา "TuningFork" (เนื่องจาก Tuning Fork เป็นชื่อภายในของไลบรารี)

02-03 16:55:45.103 10511 10536 I TuningFork: Got settings from tuningfork/tuningfork_settings.bin
02-03 16:55:45.103 10511 10536 I TuningFork: Using local file cache at /data/user/0/com.Unity3d.BoatAttackDay/cache/tuningfork
02-03 16:55:45.105 10511 10536 I TuningFork: OpenGL version 3.2
02-03 16:55:45.105 10511 10536 I TuningFork: TuningFork.GoogleEndpoint: OK
02-03 16:55:45.106 10511 10611 I TuningFork: Creating directory /data/user/0/com.Unity3d.BoatAttackDay/cache/tuningfork
02-03 16:55:45.106 10511 10536 I TuningFork: TuningFork Settings:

[...]

02-03 16:55:45.116 10511 10536 I Unity   : Tuningfork started with code: Ok
02-03 16:55:45.107 10511 10536 I TuningFork: TuningFork initialized
02-03 16:55:45.107 10511 10536 I UnityTuningfork: Swappy backend: 1
02-03 16:55:45.107 10511 10536 I TuningFork: Creating directory /data/user/0/com.Unity3d.BoatAttackDay/cache/tuningfork/V1
02-03 16:55:45.110 10511 10613 I TuningFork: OpenGL version 3.2
02-03 16:55:45.110 10511 10613 I TuningFork:Web: Connecting to: https://performanceparameters.googleapis.com/v1/applications/com.Unity3d.BoatAttackDay/apks/1:generateTuningParameters

หากตั้งค่าปลั๊กอินผิดพลาด เช่น ลืมตั้งค่า คีย์ API คุณจะเห็นข้อผิดพลาดในบันทึกการเริ่มต้น

02-03 16:49:44.970  8815  8831 I TuningFork: Got settings from tuningfork/tuningfork_settings.bin
02-03 16:49:44.971  8815  8831 I TuningFork: Using local file cache at /data/user/0/com.Unity3d.BoatAttackDay/cache/tuningfork
02-03 16:49:44.972  8815  8831 I TuningFork: OpenGL version 3.2
02-03 16:49:44.972  8815  8831 W TuningFork.GE: The API key in Tuning Fork TFSettings is invalid
02-03 16:49:44.972  8815  8831 E TuningFork: TuningFork.GoogleEndpoint: FAILED
02-03 16:49:44.973  8815  8831 I Unity   : Tuningfork started with code: BadParameter

ตรวจสอบว่า Android Performance Tuner อัปโหลดการวัดและส่งข้อมูลทางไกล หากเห็น TuningFork initialized ในบันทึก ให้รออีกสักครู่แล้วมองหาบันทึกที่ระบุว่า กำลังอัปโหลดการวัดและส่งข้อมูล

02-03 16:58:00.552 10511 10611 I TuningFork:Web: Connecting to: https://performanceparameters.googleapis.com/v1/applications/com.Unity3d.BoatAttackDay/apks/1:uploadTelemetry
02-03 16:58:00.898 10511 10611 I TuningFork:Web: Response code: 200
02-03 16:58:00.898 10511 10611 I TuningFork:Web: Response message: OK
02-03 16:58:00.899 10511 10611 I TuningFork.GE: UPLOAD request returned 200 {}

นอกจากนี้ คุณยังค้นหาในบันทึกสำหรับ "เชื่อมต่อกับ:" ได้ด้วย ข้อความนี้จะตามด้วยรหัสการตอบกลับในอีกไม่กี่บรรทัดต่อมา

หากไม่เห็นบันทึกการอัปโหลดการวัดและส่งข้อมูลทางไกล ให้ตรวจสอบว่าคุณได้ตั้งค่า ช่วงเวลาระหว่างการอัปโหลดแต่ละครั้งในการตั้งค่า Android Performance Tuner เป็นค่าขนาดเล็ก อย่างถูกต้อง เช่น 30 วินาที

จัดการการลบโค้ด

Google.Protobuf.dll ใช้การสะท้อน ในระหว่างการลบโค้ดออก ระบบอาจนำโค้ดที่จำเป็นบางส่วนออก ปลั๊กอินมีไฟล์ link.xmlที่มีข้อมูลเกี่ยวกับสัญลักษณ์ที่ควรเก็บไว้เพื่อหลีกเลี่ยงการนำออก หากคุณต้องการฟังก์ชันการทำงานบางอย่างของ Protobuf ที่ใช้การสะท้อนและเปิดใช้การลบโค้ดที่ไม่จำเป็น ให้เพิ่มข้อมูลนี้ลงในไฟล์ link.xml เพื่อเก็บสัญลักษณ์ไว้

ดูข้อมูลเพิ่มเติมเกี่ยวกับ การลบโค้ดที่มีการจัดการ ได้ในเอกสารประกอบของ Unity

หากต้องการเก็บรักษาสัญลักษณ์ทั้งหมดใน Protobuf ให้เพิ่มไฟล์ link.xml ลงในโปรเจ็กต์ที่มีข้อมูลต่อไปนี้

<linker>
  <assembly fullname="Google.Protobuf" preserve="all"/>
</linker>

การคอมไพล์ล่วงหน้า (AOT)

ต้องมีการคอมไพล์ล่วงหน้าสำหรับแบ็กเอนด์ IL2CPP และ Unity เวอร์ชัน 2017 และ 2018 (แต่ไม่ใช่สำหรับ Unity เวอร์ชันที่ใหม่กว่า)

คอมไพเลอร์ AOT อาจไม่สร้างโค้ดสำหรับเมธอดทั่วไป คุณต้องบังคับ ให้คอมไพเลอร์สร้างโค้ดที่เหมาะสมซึ่งจำเป็นสำหรับ Protobuf โดยการเพิ่ม เมธอดต่อไปนี้

using Google.Protobuf.Reflection;
using UnityEngine.Scripting;

...

// Don't call this method.
[Preserve]
void ExampleOfForceReflectionInitializationForProtobuf()
{
    FileDescriptor.ForceReflectionInitialization<Scene>();
    FileDescriptor.ForceReflectionInitialization<ShadowType>();
    FileDescriptor.ForceReflectionInitialization<LevelType>();
    ...
    // Add FileDescriptor.ForceReflectionInitialization<T> for each generated enum.
    // You can find the list of enums in DevTuningfork.cs -> enum section
    // or in the list of enums in Google -> Android Performance Tuner.
}

ดูข้อมูลเพิ่มเติมเกี่ยวกับ ข้อจำกัดในการเขียนสคริปต์ ได้ในเอกสารประกอบของ Unity