หน้านี้อธิบายวิธีเริ่มต้นใช้งานไลบรารีในโค้ดเกมและยืนยันว่า มีการอัปโหลดข้อมูลไปยัง 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 วินาที ให้ทำดังนี้
- เลือก Google > Android Performance Tuner เพื่อเข้าถึงการตั้งค่า
- เลือกแท็บการตั้งค่าการวัดผล แล้วคลิกใช้การตั้งค่าขั้นสูง
- ตรวจสอบว่าช่องช่วงเวลา (นาที) มีค่าเป็น 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