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

บทนำ

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

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

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

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

เมื่อ Unity เริ่มต้นหรือตรวจพบการเปลี่ยนแปลงของทรัพยากร Dependency โค้ด หรือเนื้อหาอื่นๆ ระบบจะพยายามสร้างโปรเจ็กต์ใหม่ หากไม่สามารถคอมไพล์โปรเจ็กต์ได้ในขณะนั้น ตัวแก้ไขจะบันทึกข้อผิดพลาดในการคอมไพล์ไปยังคอนโซล และหากคุณพยายามเข้าสู่โหมด Play คุณจะได้รับป๊อปอัปข้อผิดพลาดในแท็บฉากของ 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 ในโค้ด โปรดตรวจสอบว่าคุณทำให้ใช้คลาสหรือเมธอดของ Firebase ได้ โดยมีคำสั่ง using ที่ถูกต้องสำหรับผลิตภัณฑ์ Firebase บางอย่างที่ต้องใช้

    1. ตัวอย่างจาก MechaHamster: ยกระดับด้วย 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 เท่านั้น
  3. หากคุณนำเข้า Firebase Unity SDK ก่อนเวอร์ชัน "10.0.0" เป็น .unitypackage ไฟล์ ZIP ของ Firebase Unity SDK จะมีแพ็กเกจสำหรับทั้งการสนับสนุน .NET 3.x และ .NET 4.x ตรวจสอบว่าคุณรวมเฉพาะระดับ .NET Framework ที่ใช้งานร่วมกันได้ในโปรเจ็กต์

    1. เราจะอธิบายความเข้ากันได้ระหว่างเวอร์ชันของ Unity Editor และระดับ .NET Frameworks ในเพิ่ม 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 > ค่ากำหนดของระบบ > ความปลอดภัยและความเป็นส่วนตัว

ในเมนูความปลอดภัยที่ประมาณครึ่งหน้าล่าง จะมีส่วนที่ระบุว่า ""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 สำหรับ Unity Archive

ตรวจสอบว่าผลิตภัณฑ์ 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 ทุกรายการออกตามวิธีการที่ระบุไว้ในส่วนการย้ายข้อมูลนี้

ข้อผิดพลาดของตัวแก้และบิลด์ของอุปกรณ์เป้าหมาย

หากเกมใช้งานได้ในตัวแก้ไข (มีการกำหนดค่าสำหรับเป้าหมายบิลด์ที่เหมาะสมที่คุณเลือก) ให้ยืนยันว่า External Dependency Manager for Unity (EDM4U) มีการกำหนดค่าอย่างถูกต้องและทำงานได้หรือไม่

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

ปัญหา "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 คือแฟล็กใดก็ตามที่คุณส่งบรรทัดคำสั่งเพื่อกรองเอาต์พุต

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

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

iOS

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

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

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

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

ขั้นตอนต่อไป

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