การแก้ไขข้อบกพร่องของกระบวนการสร้าง ติดตั้ง และเรียกใช้เกม

บทนำ

ต่อไปนี้เป็นคำแนะนำในการแก้ไขข้อบกพร่องของกระบวนการคอมไพล์และบิลด์สำหรับเกม Unity โดยใช้ Firebase SDK สําหรับ Unity ซึ่งจะอธิบายวิธีตรวจสอบและแก้ปัญหาที่พบบ่อยซึ่งอาจเกิดขึ้นขณะกำหนดค่าและสร้างเกมสำหรับแพลตฟอร์มใหม่หรือหลังการอัปเดต โดยจัดเรียงตามลำดับเวลาที่ข้อผิดพลาดเหล่านี้อาจเกิดขึ้นในกระบวนการ โปรดดูคำแนะนำตามลำดับและดำเนินการต่อเมื่อแก้ไขแต่ละรายการแล้ว

นอกจากเอกสารนี้แล้ว โปรดดูข้อมูลเพิ่มเติมในคำถามที่พบบ่อยเกี่ยวกับ Firebase สำหรับ Unity

ปัญหาการคอมไพล์โหมดเล่น

ปัญหาการสร้างระดับแรกอาจเกิดขึ้นขณะทดสอบในเครื่องมือแก้ไขก่อนที่จะพยายามเริ่มสร้างเวอร์ชันสำหรับอุปกรณ์เคลื่อนที่ ส่วนนี้เกี่ยวข้องกับข้อผิดพลาดทั้งหมดของ Firebase ที่เกิดขึ้นก่อนและระหว่างโหมดเล่น

เมื่อ Unity เริ่มหรือตรวจพบการเปลี่ยนแปลงใน Dependency, โค้ด หรือชิ้นงานอื่นๆ ระบบจะพยายามสร้างโปรเจ็กต์ขึ้นมาใหม่ หากโปรเจ็กต์คอมไพล์ไม่ได้ในเวลาดังกล่าว เครื่องมือแก้ไขจะบันทึกข้อผิดพลาดในการคอมไพล์ลงในคอนโซล และหากคุณพยายามเข้าสู่โหมดเล่น คุณจะได้รับป๊อปอัปข้อผิดพลาดในแท็บฉากของ Unity ว่า All compiler errors have to be fixed before you can enter playmode!

ไม่มีประเภท คลาส เมธอด และสมาชิก

ปัญหา Firebase จำนวนมากเกิดขึ้นเนื่องจากเครื่องมือแก้ไขและคอมไพเลอร์ไม่พบประเภท คลาส เมธอด และสมาชิกที่จำเป็น อาการที่พบได้ทั่วไปของภาวะนี้ ได้แก่

The type or namespace name ‘<CLASS OR NAMESPACE NAME>' could not be found. Are you missing a using directive or an assembly reference?

The type or namespace name <TYPE OR NAMESPACE NAME> does not exist in the namespace ‘Firebase<.OPTIONAL NESTED NAMESPACE NAME PATH>' (are you missing an assembly reference?)

‘<CLASS NAME>' does not contain a definition for ‘<MEMBER VARIABLE OR METHOD NAME>'

ขั้นตอนการแก้ปัญหา
  1. เมื่อใช้คลาสหรือเมธอด Firebase ในโค้ด โปรดตรวจสอบว่าคุณทำให้คลาสหรือเมธอดดังกล่าวพร้อมใช้งานโดยให้มีคำสั่ง using ที่ถูกต้องสำหรับผลิตภัณฑ์ Firebase ที่ต้องการ

    1. ตัวอย่างจาก MechaHamster: Level Up With Firebase Edition
      1. using Firebase.RemoteConfig;
      2. using Firebase.Crashlytics;
  2. ตรวจสอบว่าคุณได้นําเข้าแพ็กเกจ Firebase ที่เหมาะสมแล้ว โดยทําดังนี้

    1. หากต้องการนําเข้าแพ็กเกจที่เหมาะสม ให้ทําอย่างใดอย่างหนึ่งต่อไปนี้
      1. เพิ่ม Firebase Unity SDK เป็น .unitypackage หรือ
      2. ตรวจสอบและดำเนินการตามวิธีใดวิธีหนึ่งในตัวเลือกการติดตั้ง Unity เพิ่มเติม
    2. ตรวจสอบว่าผลิตภัณฑ์ Firebase ทุกรายการในโปรเจ็กต์และ EDM4U มีคุณสมบัติดังนี้
      • ใช้เวอร์ชันเดียวกัน
      • ติดตั้งเป็น .unitypackage หรือผ่าน Unity Package Manager เท่านั้น
  3. หากคุณนําเข้า Firebase Unity SDK ก่อนเวอร์ชัน "10.0.0" เป็น .unitypackage ไฟล์เก็บถาวร ZIP ของ Firebase Unity SDK จะมีแพ็กเกจที่รองรับทั้ง .NET 3.x และ .NET 4.x ตรวจสอบว่าคุณได้รวมเฉพาะระดับ .NET Framework ที่เข้ากันได้ไว้ในโปรเจ็กต์เท่านั้น

    1. โปรดดูความเข้ากันได้ระหว่างเวอร์ชันของเครื่องมือแก้ไข Unity กับระดับเฟรมเวิร์ก .NET ในหัวข้อเพิ่ม Firebase ลงในโปรเจ็กต์ Unity
    2. หากคุณนําเข้าแพ็กเกจ Firebase ในระดับ .NET Framework ที่ไม่ถูกต้องโดยไม่ตั้งใจ หรือต้องการเปลี่ยนจากการใช้ .unitypackage ไปใช้ตัวเลือกการติดตั้ง Unity เพิ่มเติม วิธีที่ดีที่สุดคือนําแพ็กเกจ Firebase ทั้งหมดออกด้วยวิธีการที่ระบุไว้ในส่วนการย้ายข้อมูลนี้ จากนั้นนําเข้าแพ็กเกจ Firebase ทั้งหมดอีกครั้ง
  4. ตรวจสอบว่าโปรแกรมแก้ไขกำลังสร้างโปรเจ็กต์ขึ้นมาใหม่และการเล่นของคุณแสดงสถานะล่าสุดของโปรเจ็กต์

    1. โดยค่าเริ่มต้น เอดิเตอร์ Unity จะตั้งค่าให้สร้างใหม่ทุกครั้งที่ตรวจพบการเปลี่ยนแปลงชิ้นงานหรือการกำหนดค่า
    2. เป็นไปได้ว่าฟังก์ชันนี้ถูกปิดใช้และ Unity Editor ตั้งค่าเป็นรีเฟรช/คอมไพล์อีกครั้งด้วยตนเอง โปรดตรวจสอบเรื่องนี้และลองรีเฟรชด้วยตนเองหากเป็นเช่นนั้น

ข้อผิดพลาดเกี่ยวกับรันไทม์ของโหมดเล่น

หากเกมเริ่มขึ้นแต่พบปัญหาเกี่ยวกับ Firebase ขณะทำงาน ให้ลองทำดังนี้

ตรวจสอบว่าคุณได้อนุมัติแพ็กเกจ Firebase ในส่วน "ความปลอดภัยและความเป็นส่วนตัว" ใน Mac OS

หากเมื่อเปิดเกมในเครื่องมือแก้ไขบน Mac OS คุณเห็นกล่องโต้ตอบที่ระบุว่า "เปิด FirebaseCppApp-<version>.bundle ไม่ได้เนื่องจากยืนยันนักพัฒนาแอปไม่ได้" คุณต้องอนุมัติไฟล์ Bundle นั้นในเมนูความปลอดภัยและความเป็นส่วนตัวของ Mac

โดยคลิกไอคอน Apple > System Preferences > Security & Privacy

ในเมนูความปลอดภัย ประมาณครึ่งทางของหน้าจะมีส่วนระบุว่า ""FirebaseCppApp-<version>.bundle" ถูกบล็อกไม่ให้ใช้งานเนื่องจากไม่ได้มาจากนักพัฒนาแอปที่ระบุ"

คลิกปุ่มที่ระบุว่าอนุญาต

c35166e224cce720.png

กลับไปที่ Unity แล้วกดเล่นอีกครั้ง

จากนั้นคุณจะเห็นคำเตือนที่คล้ายกับคำเตือนแรก

5ad9ddb0d3a52892.png

กดเปิดแล้วโปรแกรมจะดำเนินการต่อได้ และระบบจะไม่ถามคุณเกี่ยวกับไฟล์นี้อีก

ตรวจสอบว่าโปรเจ็กต์มีและใช้ไฟล์การกําหนดค่าที่ถูกต้อง

  1. ตรวจสอบว่าได้ตั้งค่าบิลด์สำหรับเป้าหมายที่ต้องการ (iOS หรือ Android) ในไฟล์ > การตั้งค่าบิลด์ อ่านการพูดคุยที่สมบูรณ์ยิ่งขึ้นได้ในเอกสารประกอบเกี่ยวกับการตั้งค่าการสร้างของ Unity
  2. ดาวน์โหลดไฟล์การกําหนดค่าสําหรับแอป (google-services.json สําหรับ Android หรือ GoogleService-Info.plist สําหรับ iOS) และเป้าหมายการสร้างจากคอนโซล Firebase ในการตั้งค่าโปรเจ็กต์ > แอปของคุณ หากมีไฟล์เหล่านี้อยู่แล้ว ให้ลบไฟล์เหล่านั้นในโปรเจ็กต์และแทนที่ด้วยเวอร์ชันล่าสุด โดยตรวจสอบว่าการสะกดถูกต้องตรงกับที่แสดงด้านบนทุกประการ โดยไม่มี "(1)" หรือตัวเลขอื่นๆ ต่อท้ายชื่อไฟล์
  3. หากคอนโซลมีข้อความเกี่ยวกับไฟล์ใน Assets/StreamingAssets/ ให้ตรวจสอบว่าไม่มีข้อความคอนโซลที่ระบุว่า Unity แก้ไขไฟล์ในนั้นไม่ได้
  4. ตรวจสอบว่าได้สร้าง Assets/StreamingAssets/google-services-desktop.json และตรงกับไฟล์การกําหนดค่าที่ดาวน์โหลด
    • หากระบบไม่ได้สร้างโดยอัตโนมัติและไม่มี StreamingAssets/ ให้สร้างไดเรกทอรีในไดเรกทอรี Assets ด้วยตนเอง
    • ตรวจสอบว่า Unity ได้สร้าง google-services-desktop.json แล้วหรือยัง

ตรวจสอบว่าได้ติดตั้งผลิตภัณฑ์ Firebase และ EDM4U ทั้งหมดผ่าน .unitypackage หรือ Unity Package Manager เท่านั้น

  1. ตรวจสอบทั้งโฟลเดอร์ Assets/ และ Unity Package Manager เพื่อให้แน่ใจว่าได้ติดตั้ง Firebase SDK และ EDM4U ผ่านวิธีใดวิธีหนึ่งเท่านั้น
  2. ปลั๊กอินที่ Google พัฒนาบางรายการ เช่น Google Play และปลั๊กอินของบุคคลที่สามอาจใช้ EDM4U ปลั๊กอินเหล่านั้นอาจมี EDM4U ใน.unitypackageหรือแพ็กเกจ Unity Package Manager (UPM) ตรวจสอบว่า EDM4U มีเพียงสําเนาเดียวในโปรเจ็กต์ หากแพ็กเกจ UPM ใดๆ ขึ้นอยู่กับ EDM4U คุณควรเก็บเฉพาะ EDM4U เวอร์ชัน UPM ไว้ ซึ่งดูได้ในหน้าเก็บถาวรของ Google APIs for Unity

ตรวจสอบว่าผลิตภัณฑ์ Firebase ทุกรายการในโปรเจ็กต์เป็นเวอร์ชันเดียวกัน

  1. หากติดตั้ง Firebase SDK ผ่าน .unitypackage ให้ตรวจสอบว่าไลบรารี FirebaseCppApp ทั้งหมดใน Assets/Firebase/Plugins/x86_64/ เป็นเวอร์ชันเดียวกันหรือไม่
  2. หากติดตั้ง Firebase SDK ผ่าน Unity Package Manager (UPM) ให้เปิด Windows > Package Manager ค้นหา "Firebase" และตรวจสอบว่าแพ็กเกจ Firebase ทั้งหมดเป็นเวอร์ชันเดียวกัน
  3. หากโปรเจ็กต์มี Firebase SDK เวอร์ชันต่างๆ เราขอแนะนำให้นำ Firebase SDK ทั้งหมดออกก่อนแล้วติดตั้ง Firebase SDK ทั้งหมดอีกครั้ง โดยให้ใช้เวอร์ชันเดียวกัน วิธีที่สะอาดที่สุดคือนำแพ็กเกจ Firebase ทั้งหมดออกด้วยวิธีการที่ระบุไว้ในส่วนการย้ายข้อมูลนี้

ข้อผิดพลาดเกี่ยวกับเครื่องมือแก้ไขและการสร้างอุปกรณ์เป้าหมาย

หากเกมทำงานในเครื่องมือแก้ไข (กำหนดค่าสำหรับเป้าหมายการสร้างที่เหมาะสมซึ่งคุณเลือก) ให้ตรวจสอบว่าเครื่องมือจัดการทรัพยากรภายนอกสำหรับ Unity (EDM4U) ได้รับการกําหนดค่าและทํางานอย่างถูกต้อง

ที่เก็บ EDM4U ใน GitHub มีคำแนะนำทีละขั้นตอนสำหรับกระบวนการส่วนนี้ที่คุณควรอ่านและทำตามก่อนดำเนินการต่อ

ปัญหา "Single Dex" และการทำให้ไฟล์เล็กลง (ต้องดำเนินการหากใช้ Cloud Firestore)

ขณะสร้างแอป Android คุณอาจพบปัญหาการสร้างไม่สำเร็จซึ่งเกี่ยวข้องกับการมีไฟล์ dex ไฟล์เดียว ข้อความแสดงข้อผิดพลาดจะมีลักษณะคล้ายกับข้อความต่อไปนี้ (หากโปรเจ็กต์ได้รับการกําหนดค่าให้ใช้ระบบบิลด์ Gradle)

Cannot fit requested classes in a single dex file.

ระบบใช้ไฟล์ .dex เพื่อเก็บชุดคำจำกัดความของคลาสและข้อมูลเสริมที่เกี่ยวข้องสำหรับแอปพลิเคชัน Android ไฟล์ dex ไฟล์เดียวจะจำกัดการอ้างอิงถึงเมธอดได้ 65,536 รายการ บิลด์จะดำเนินการไม่สำเร็จหากจํานวนเมธอดทั้งหมดจากไลบรารี Android ทั้งหมดในโปรเจ็กต์เกินขีดจํากัดนี้

คุณสามารถใช้ 2 ขั้นตอนต่อไปนี้ตามลำดับได้ โดยให้เปิดใช้ MultiDex เฉพาะในกรณีที่การลดขนาดไฟล์ไม่ช่วยแก้ปัญหาได้

เปิดใช้การย่อขนาด

Unity ได้เปิดตัวการลดขนาดใน 2017.2 เพื่อนำโค้ดที่ไม่ได้ใช้ออก ซึ่งจะช่วยลดจำนวนเมธอดทั้งหมดที่อ้างอิงในไฟล์ dex ไฟล์เดียว * ตัวเลือกนี้จะอยู่ในการตั้งค่าโปรแกรมเล่น > Android > การตั้งค่าการเผยแพร่ > การย่อขนาด * ตัวเลือกอาจแตกต่างกันใน Unity เวอร์ชันต่างๆ โปรดดูเอกสารประกอบอย่างเป็นทางการของ Unity

เปิดใช้ Multidex

หากหลังจากเปิดใช้การย่อขนาดแล้ว จำนวนเมธอดที่อ้างอิงยังคงเกินขีดจํากัด ตัวเลือกอื่นคือการเปิดใช้ multidex การดำเนินการดังกล่าวทำได้หลายวิธีใน Unity ดังนี้

  • หากเปิดใช้เทมเพลต Gradle ที่กําหนดเองในส่วนการตั้งค่าโปรแกรมเล่น ให้แก้ไข mainTemplate.gradle
  • หากคุณใช้ Android Studio เพื่อสร้างโปรเจ็กต์ที่ส่งออก ให้แก้ไขไฟล์ build.gradle ระดับโมดูล

ดูรายละเอียดเพิ่มเติมได้ในคู่มือผู้ใช้ MultiDex

ทำความเข้าใจและแก้ไขข้อผิดพลาดรันไทม์ของอุปกรณ์เป้าหมาย

หากเกมทำงานในเครื่องมือแก้ไขได้ และสามารถสร้างและติดตั้งลงในอุปกรณ์เป้าหมายได้ แต่คุณพบข้อผิดพลาดรันไทม์ ให้ตรวจสอบและตรวจสอบบันทึกที่สร้างขึ้นบนอุปกรณ์

ส่วนนี้จะอธิบายวิธีตรวจสอบบันทึกเพื่อหาข้อผิดพลาดที่อาจเกิดขึ้นและข้อผิดพลาดหนึ่งๆ ที่จะเกิดขึ้นเมื่อรันไทม์ในอุปกรณ์หรือเครื่องจำลองเท่านั้น

Android

เครื่องมือจำลอง

  • ตรวจสอบบันทึกที่แสดงในคอนโซลของโปรแกรมจำลองหรือดูหน้าต่าง Logcat

อุปกรณ์

ทำความคุ้นเคยกับ adb และ adb logcat รวมถึงวิธีใช้

  • แม้ว่าคุณจะใช้เครื่องมือต่างๆ ของสภาพแวดล้อมบรรทัดคำสั่งเพื่อกรองเอาต์พุตได้ แต่ลองดูตัวเลือกของ logcat แทน
  • วิธีง่ายๆ ในการเริ่มเซสชัน ADB ใหม่มีดังนี้

    adb logcat -c && adb logcat <OPTIONS>

    โดยที่ OPTIONS คือ Flag ที่คุณส่งผ่านบรรทัดคำสั่งเพื่อกรองเอาต์พุต

การใช้ Logcat ผ่าน Android Studio

เมื่อใช้ Logcat ผ่าน Android Studio คุณจะมีเครื่องมือค้นหาเพิ่มเติมที่ช่วยให้คุณสร้างการค้นหาที่มีประสิทธิภาพได้ง่ายขึ้น

iOS

การตรวจสอบบันทึก

หากใช้อุปกรณ์จริง ให้เชื่อมต่อกับคอมพิวเตอร์ ตรวจสอบ lldb ใน Xcode

ปัญหาเกี่ยวกับ Swift

หากพบบันทึกข้อผิดพลาดที่พูดถึง Swift โปรดดูข้อมูลในส่วนเครื่องมือจัดการทรัพยากรภายนอกสําหรับ Unity

ขั้นตอนถัดไป

หากเกมยังคงมีปัญหาเกี่ยวกับการคอมไพล์ การสร้าง หรือรันที่เกี่ยวข้องกับ Firebase ให้ตรวจสอบหน้าปัญหา Firebase SDK สําหรับ Unity และพิจารณาส่งปัญหาใหม่ นอกจากนี้ โปรดดูข้อมูลเกี่ยวกับตัวเลือกเพิ่มเติมในหน้าการสนับสนุนของ Firebase