บทนำ
ต่อไปนี้เป็นคำแนะนำในการแก้ไขข้อบกพร่องของกระบวนการคอมไพล์และกระบวนการบิลด์สำหรับเกม Unity โดยใช้ Firebase SDK สำหรับ Unity ซึ่งจะอธิบายวิธีตรวจสอบและแก้ปัญหาที่พบบ่อยๆ หลายอย่างที่คุณอาจพบขณะกำหนดค่าและสร้างเกมสำหรับแพลตฟอร์มใหม่หรือหลังจากอัปเดต โดยจัดเรียงตามลำดับเวลาที่ข้อผิดพลาดเหล่านี้อาจเกิดขึ้นในกระบวนการ โปรดอ่านตามลำดับและดำเนินการต่อเมื่อแก้ไขข้อผิดพลาดแต่ละรายการแล้ว
นอกจากเอกสารนี้แล้ว โปรดดู คำถามที่พบบ่อยเกี่ยวกับ Firebase สำหรับ Unity เพื่อดูข้อมูลเพิ่มเติม
ปัญหาการคอมไพล์ในโหมดเล่น
ปัญหาการบิลด์ประเภทแรกอาจเกิดขึ้นขณะทดสอบในเอดิเตอร์ก่อนที่คุณจะพยายามเริ่มบิลด์สำหรับอุปกรณ์เคลื่อนที่ ส่วนนี้เกี่ยวข้องกับข้อผิดพลาดทั้งหมดของ Firebase ที่เกิดขึ้นก่อนและระหว่างโหมดเล่น
เมื่อ Unity เริ่มทำงานหรือตรวจพบการเปลี่ยนแปลงในทรัพยากร Dependency, โค้ด หรือชิ้นงานอื่นๆ ระบบจะพยายามสร้างโปรเจ็กต์ใหม่ หากโปรเจ็กต์คอมไพล์ไม่ได้ในขณะนั้น เอดิเตอร์จะบันทึกข้อผิดพลาดในการคอมไพล์ลงในคอนโซล และหากคุณพยายามเข้าสู่โหมดเล่น คุณจะได้รับป๊อปอัปข้อผิดพลาดในแท็บฉาก ของ Unity ซึ่งระบุว่า All compiler errors have to be fixed before you can enter playmode!
การแก้ไขข้อบกพร่องของปัญหาการคอมไพล์ที่เกี่ยวข้องกับ Firebase
ประเภท คลาส เมธอด และสมาชิกที่ขาดหายไป
ปัญหาหลายอย่างของ 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>'
ขั้นตอนการแก้ปัญหา
เมื่อใช้คลาสหรือเมธอดของ Firebase ในโค้ด ให้ตรวจสอบว่าคุณได้ทำให้คลาสหรือเมธอดเหล่านั้นพร้อมใช้งานโดยใช้คำสั่ง
usingที่ถูกต้องสำหรับผลิตภัณฑ์ Firebase ที่ต้องการตรวจสอบว่าคุณได้นำเข้าแพ็กเกจ Firebase ที่เหมาะสมแล้ว
- หากต้องการนำเข้าแพ็กเกจที่เหมาะสม ให้ทำอย่างใดอย่างหนึ่งต่อไปนี้
- เพิ่ม Firebase Unity SDK เป็น
.unitypackages หรือ - ดูและทำตามตัวเลือกใดตัวเลือกหนึ่งใน ตัวเลือกการติดตั้ง Unity เพิ่มเติม
- เพิ่ม Firebase Unity SDK เป็น
- ตรวจสอบว่าผลิตภัณฑ์ Firebase ทุกรายการในโปรเจ็กต์และ EDM4U:
- เป็นเวอร์ชันเดียวกัน
- ติดตั้งเป็น
.unitypackageเท่านั้น หรือ ผ่าน Unity Package Manager เท่านั้น
- หากต้องการนำเข้าแพ็กเกจที่เหมาะสม ให้ทำอย่างใดอย่างหนึ่งต่อไปนี้
หากคุณนำเข้า Firebase Unity SDK เวอร์ชันก่อน "10.0.0" เป็น
.unitypackageไฟล์เก็บถาวร zip ของ Firebase Unity SDK จะมีแพ็กเกจสำหรับการรองรับทั้ง .NET 3.x และ .NET 4.x ตรวจสอบว่าคุณได้รวมเฉพาะระดับ .NET Framework ที่เข้ากันได้ไว้ในโปรเจ็กต์- ความเข้ากันได้ระหว่างเวอร์ชันของ Unity Editor และระดับ .NET Framework มีอธิบายไว้ในหัวข้อเพิ่ม Firebase ในโปรเจ็กต์ Unity
- หากคุณนำเข้าแพ็กเกจ Firebase ที่ระดับ .NET Framework ไม่ถูกต้องโดยไม่ได้ตั้งใจ หรือต้องการเปลี่ยนจากการใช้
.unitypackages เป็นตัวเลือกการติดตั้ง Unity เพิ่มเติม Additional Unity installation options วิธีที่ง่ายที่สุดคือการนำแพ็กเกจ Firebase ทุกรายการออกด้วยวิธีที่กล่าวถึงใน this migration section แล้วนำเข้าแพ็กเกจ Firebase ทั้งหมดอีกครั้ง
ตรวจสอบว่าเอดิเตอร์กำลังสร้างโปรเจ็กต์ใหม่ และการพยายามเล่นของคุณแสดงสถานะล่าสุดของโปรเจ็กต์
- โดยค่าเริ่มต้น เอดิเตอร์ Unity จะตั้งค่าให้สร้างใหม่ทุกครั้งที่ตรวจพบการเปลี่ยนแปลงชิ้นงานหรือการกำหนดค่า
- เป็นไปได้ว่าฟังก์ชันนี้ถูกปิดใช้ และ Unity Editor ตั้งค่าให้รีเฟรช/คอมไพล์ใหม่ด้วยตนเอง โปรดตรวจสอบและลองรีเฟรชด้วยตนเองหากเป็นกรณีนี้
ข้อผิดพลาดเกี่ยวกับรันไทม์ในโหมดเล่น
หากเกมเริ่มทำงาน แต่พบปัญหาเกี่ยวกับ Firebase ขณะทำงาน ให้ลองทำดังนี้
ตรวจสอบว่าคุณได้อนุมัติแพ็กเกจ Firebase ใน "ความปลอดภัยและความเป็นส่วนตัว" ใน Mac OS แล้ว
หากเมื่อเริ่มเกมในเอดิเตอร์บน Mac OS คุณเห็นกล่องโต้ตอบที่ระบุว่า "FirebaseCppApp-<version>.bundle Cannot be opened because the developer cannot be verified." คุณต้องอนุมัติไฟล์แพ็กเกจนั้นในเมนูความปลอดภัยและความเป็นส่วนตัวของ Mac
โดยคลิกไอคอน Apple > ค่ากำหนดของระบบ > ความปลอดภัยและความเป็นส่วนตัว
ในเมนูความปลอดภัย บริเวณกึ่งกลางหน้าเว็บจะมีส่วนที่ระบุว่า ""FirebaseCppApp-<version>.bundle" was blocked from use because it is not from an identified developer."
คลิกปุ่มที่มีป้ายกำกับว่า Allow Anyway

กลับไปที่ Unity แล้วกดเล่น อีกครั้ง
จากนั้นคุณจะเห็นประกาศเตือนที่คล้ายกับประกาศเตือนแรก

กดเปิด แล้วโปรแกรมจะดำเนินการต่อได้ โดยระบบจะไม่ถามเกี่ยวกับไฟล์นี้อีก
ตรวจสอบว่าโปรเจ็กต์มีและใช้ไฟล์การกำหนดค่าที่ถูกต้อง
- ตรวจสอบว่าได้ตั้งค่าบิลด์สำหรับการกำหนดเป้าหมายที่ต้องการ (iOS หรือ Android) ในไฟล์ > การตั้งค่าบิลด์ อ่านเอกสารประกอบเกี่ยวกับการตั้งค่าบิลด์ของ Unity เพื่อดูรายละเอียดเพิ่มเติม
- ดาวน์โหลดไฟล์การกำหนดค่าสำหรับแอป (
google-services.jsonสำหรับ Android หรือGoogleService-Info.plistสำหรับ iOS) และเป้าหมายบิลด์จากคอนโซล Firebase ในการตั้งค่าโปรเจ็กต์ > แอปของคุณ: หากมีไฟล์เหล่านี้อยู่แล้ว ให้ลบไฟล์ในโปรเจ็กต์และแทนที่ด้วยเวอร์ชันล่าสุด โดยตรวจสอบว่าสะกดถูกต้องตามที่แสดงด้านบนโดยไม่มี "(1)" หรือตัวเลขอื่นๆ แนบมากับชื่อไฟล์ - หากคอนโซลมีข้อความเกี่ยวกับไฟล์ใน
Assets/StreamingAssets/ให้ตรวจสอบว่าไม่มีข้อความในคอนโซลที่ระบุว่า Unity ไม่สามารถแก้ไขไฟล์ในนั้นได้ - ตรวจสอบว่าระบบสร้าง
Assets/StreamingAssets/google-services-desktop.jsonและไฟล์นี้ตรงกับไฟล์การกำหนดค่าที่ดาวน์โหลด- หากระบบไม่สร้างไฟล์นี้โดยอัตโนมัติและไม่มี
StreamingAssets/ให้สร้างไดเรกทอรีในไดเรกทอรีAssetsด้วยตนเอง - ตรวจสอบว่า Unity ได้สร้าง
google-services-desktop.jsonแล้ว
- หากระบบไม่สร้างไฟล์นี้โดยอัตโนมัติและไม่มี
ตรวจสอบว่าได้ติดตั้งผลิตภัณฑ์ Firebase และ EDM4U ทุกรายการผ่าน .unitypackage หรือ Unity Package Manager เท่านั้น
- ตรวจสอบทั้งโฟลเดอร์
Assets/และ Unity Package Manager เพื่อให้แน่ใจว่าได้ติดตั้ง Firebase SDK และ EDM4U ผ่านวิธีใดวิธีหนึ่งเท่านั้น - ปลั๊กอินบางตัวที่พัฒนาโดย Google เช่น Google Play และปลั๊กอินของบุคคลที่สามอาจขึ้นอยู่กับ EDM4U ปลั๊กอินเหล่านั้นอาจรวม EDM4U ไว้ใน
.unitypackageหรือแพ็กเกจ Unity Package Manager (UPM) ตรวจสอบว่ามี EDM4U เพียงสำเนาเดียวในโปรเจ็กต์ หากแพ็กเกจ UPM ขึ้นอยู่กับ EDM4U คุณควรเก็บเฉพาะ EDM4U เวอร์ชัน UPM ไว้ ซึ่งดูได้ในหน้า Google APIs for Unity Archive
ตรวจสอบว่าผลิตภัณฑ์ Firebase ทุกรายการในโปรเจ็กต์เป็นเวอร์ชันเดียวกัน
- หากติดตั้ง Firebase SDK ผ่าน
.unitypackageให้ตรวจสอบว่าไลบรารีFirebaseCppAppทั้งหมดในAssets/Firebase/Plugins/x86_64/เป็นเวอร์ชันเดียวกัน - หากติดตั้ง Firebase SDK ผ่าน Unity Package Manager (UPM) ให้เปิดWindows > Package Manager ค้นหา "Firebase" และตรวจสอบว่าแพ็กเกจ Firebase ทั้งหมดเป็นเวอร์ชันเดียวกัน
- หากโปรเจ็กต์มี Firebase SDK เวอร์ชันต่างๆ เราขอแนะนำให้คุณนำ Firebase SDK ทั้งหมดออกก่อน แล้วติดตั้ง Firebase SDK ทั้งหมดอีกครั้ง โดยคราวนี้ให้ใช้เวอร์ชันเดียวกัน วิธีที่ง่ายที่สุดคือการนำแพ็กเกจ Firebase ทุกรายการออกด้วยวิธีที่กล่าวถึงใน ส่วนการย้ายข้อมูลนี้
ข้อผิดพลาดของตัวแก้ไขและบิลด์อุปกรณ์เป้าหมาย
หากเกมทำงานในเอดิเตอร์ (กำหนดค่าสำหรับเป้าหมายบิลด์ที่เหมาะสมที่คุณเลือก) ให้ตรวจสอบว่า External Dependency Manager for 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คือแฟล็กที่คุณส่งผ่านบรรทัดคำสั่งเพื่อกรองเอาต์พุต
การใช้ Logcat ผ่าน Android Studio
เมื่อใช้ Logcat ผ่าน Android Studio คุณจะมีเครื่องมือค้นหาเพิ่มเติม ที่ช่วยให้การค้นหาที่มีประสิทธิภาพง่ายขึ้น
iOS
การตรวจสอบบันทึก
หากใช้อุปกรณ์จริง ให้เชื่อมต่ออุปกรณ์กับคอมพิวเตอร์ ตรวจสอบ lldb ใน Xcode
ปัญหาเกี่ยวกับ Swift
หากคุณพบบันทึกข้อผิดพลาดที่กล่าวถึง Swift โปรดดูส่วน External Dependency Manager for Unity ที่เกี่ยวข้อง
ขั้นตอนเพิ่มเติม
หากเกมยังคงมีปัญหาในการคอมไพล์ บิลด์ หรือการทำงานที่เกี่ยวข้องกับ Firebase ให้ตรวจสอบหน้าปัญหา Firebase SDK สำหรับ Unity และพิจารณายื่นปัญหาใหม่ นอกจากนี้ โปรดดูหน้าการสนับสนุนของ Firebase เพื่อดูตัวเลือกเพิ่มเติม