บทนำ
ต่อไปนี้เป็นคำแนะนำในการแก้ไขข้อบกพร่องของกระบวนการคอมไพล์และบิลด์สำหรับเกม Unity โดยใช้ Firebase SDK สําหรับ Unity ซึ่งจะอธิบายวิธีตรวจสอบและแก้ไขปัญหาทั่วไปมากมายที่คุณอาจพบขณะกำหนดค่าและสร้างเกมสำหรับแพลตฟอร์มใหม่หรือหลังการอัปเดต โดยจัดเรียงตามลำดับเวลาที่ข้อผิดพลาดเหล่านี้อาจเกิดขึ้นในกระบวนการ ปรึกษาหารือตามลำดับ และดำเนินการต่อเมื่อปัญหาได้รับการแก้ไข
นอกจากเอกสารนี้แล้ว โปรดดูข้อมูลเพิ่มเติมในคำถามที่พบบ่อยเกี่ยวกับ Firebase สำหรับ Unity
ปัญหาการคอมไพล์โหมดเล่น
ปัญหาการสร้างระดับแรกอาจเกิดขึ้นขณะทดสอบในเครื่องมือแก้ไขก่อนที่จะพยายามเริ่มสร้างเวอร์ชันสำหรับอุปกรณ์เคลื่อนที่ ส่วนนี้เกี่ยวข้องกับข้อผิดพลาดทั้งหมดของ Firebase ที่เกิดขึ้นก่อนและระหว่างโหมดเล่น
เมื่อ Unity เริ่มหรือตรวจพบการเปลี่ยนแปลงใน Dependency, โค้ด หรือชิ้นงานอื่นๆ ระบบจะพยายามสร้างโปรเจ็กต์ขึ้นมาใหม่ หากไม่สามารถคอมไพล์โปรเจ็กต์ได้ในขณะนั้น เครื่องมือแก้ไขจะบันทึกข้อผิดพลาดในการคอมไพล์ไปยังคอนโซล และหากคุณพยายามเข้าสู่โหมด Play คุณจะได้รับป๊อปอัปข้อผิดพลาดในแท็บฉากของ 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 ในโค้ด โปรดตรวจสอบว่าคุณทำให้ใช้คลาสหรือเมธอดของ Firebase ได้ โดยมีคำสั่ง
using
ที่ถูกต้องสำหรับผลิตภัณฑ์ Firebase บางอย่างที่ต้องใช้ตรวจสอบว่าคุณได้นําเข้าแพ็กเกจ Firebase ที่เหมาะสมแล้ว โดยทําดังนี้
- หากต้องการนําเข้าแพ็กเกจที่เหมาะสม ให้ทําอย่างใดอย่างหนึ่งต่อไปนี้
- เพิ่ม Firebase Unity SDK เป็น
.unitypackage
หรือ - ตรวจสอบและดำเนินการตามวิธีใดวิธีหนึ่งในตัวเลือกการติดตั้ง 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 กับระดับเฟรมเวิร์ก .NET ในหัวข้อเพิ่ม Firebase ลงในโปรเจ็กต์ Unity
- หากคุณนําเข้าแพ็กเกจ Firebase ในระดับ .NET Framework ที่ไม่ถูกต้องโดยไม่ตั้งใจ หรือต้องการเปลี่ยนจากการใช้
.unitypackage
ไปใช้ตัวเลือกการติดตั้ง Unity เพิ่มเติม วิธีที่ดีที่สุดคือนําแพ็กเกจ Firebase ทั้งหมดออกด้วยวิธีการที่ระบุไว้ในส่วนการย้ายข้อมูลนี้ จากนั้นนําเข้าแพ็กเกจ Firebase ทั้งหมดอีกครั้ง
ตรวจสอบว่าโปรแกรมแก้ไขกำลังสร้างโปรเจ็กต์ขึ้นมาใหม่และการเล่นของคุณแสดงสถานะล่าสุดของโปรเจ็กต์
- โดยค่าเริ่มต้น โปรแกรมแก้ไข Unity จะตั้งค่าให้สร้างใหม่ทุกครั้งที่ตรวจพบการเปลี่ยนแปลงชิ้นงานหรือการกำหนดค่า
- เป็นไปได้ว่าฟังก์ชันนี้ถูกปิดใช้และ Unity Editor ตั้งค่าเป็นรีเฟรช/คอมไพล์ใหม่ด้วยตนเอง โปรดตรวจสอบเรื่องนี้และลองรีเฟรชด้วยตนเองหากเป็นเช่นนั้น
ข้อผิดพลาดเกี่ยวกับรันไทม์ของโหมดเล่น
หากเกมเริ่มขึ้นแต่พบปัญหาเกี่ยวกับ Firebase ขณะทำงาน ให้ลองทำดังนี้
ตรวจสอบว่าคุณได้อนุมัติแพ็กเกจ Firebase ในส่วน "ความปลอดภัยและความเป็นส่วนตัว" ใน Mac OS
หากเมื่อเริ่มเกมในเครื่องมือแก้ไขบน Mac OS คุณเห็นกล่องโต้ตอบที่ระบุว่า "เปิด FirebaseCppApp-<version>.bundle ไม่ได้เนื่องจากยืนยันนักพัฒนาแอปไม่ได้" คุณต้องอนุมัติไฟล์ Bundle นั้นในเมนูความปลอดภัยและความเป็นส่วนตัวของ Mac
โดยคลิกไอคอน Apple > System Preferences > Security & Privacy
ในเมนูความปลอดภัย ประมาณครึ่งทางของหน้าจะมีส่วนระบุว่า ""FirebaseCppApp-<version>.bundle" ถูกบล็อกไม่ให้ใช้งานเนื่องจากไม่ได้มาจากนักพัฒนาแอปที่ระบุ"
คลิกปุ่มอนุญาตแล้ว
กลับไปที่ 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
ตรวจสอบว่าผลิตภัณฑ์ 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 ทั้งหมดออกด้วยวิธีการที่ระบุไว้ในส่วนการย้ายข้อมูลนี้
ข้อผิดพลาดเกี่ยวกับเครื่องมือแก้ไขและการสร้างอุปกรณ์เป้าหมาย
หากเกมทำงานในเครื่องมือแก้ไข (กำหนดค่าสำหรับเป้าหมายการสร้างที่เหมาะสมซึ่งคุณเลือก) ให้ตรวจสอบว่าเครื่องมือจัดการทรัพยากรภายนอกสำหรับ 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
คือ Flag ที่คุณส่งผ่านบรรทัดคำสั่งเพื่อกรองเอาต์พุต
การใช้ Logcat ผ่าน Android Studio
เมื่อใช้ Logcat ผ่าน Android Studio คุณจะมีเครื่องมือค้นหาเพิ่มเติมที่ช่วยให้คุณสร้างการค้นหาที่มีประสิทธิภาพได้ง่ายขึ้น
iOS
การตรวจสอบบันทึก
หากใช้อุปกรณ์จริง ให้เชื่อมต่อกับคอมพิวเตอร์ ตรวจสอบ lldb ใน Xcode
ปัญหาเกี่ยวกับ Swift
หากพบบันทึกข้อผิดพลาดที่พูดถึง Swift โปรดดูข้อมูลในส่วนเครื่องมือจัดการทรัพยากรภายนอกสําหรับ Unity
ขั้นตอนถัดไป
หากเกมยังคงมีปัญหาเกี่ยวกับการคอมไพล์ การสร้าง หรือรันที่เกี่ยวข้องกับ Firebase ให้ตรวจสอบหน้าปัญหา Firebase SDK สําหรับ Unity และพิจารณาส่งปัญหาใหม่ นอกจากนี้ โปรดไปที่หน้าการสนับสนุนของ Firebase เพื่อดูตัวเลือกเพิ่มเติม