บทนำ
ต่อไปนี้เป็นคำแนะนำในการแก้ไขข้อบกพร่องของกระบวนการคอมไพล์และบิลด์สำหรับเกม 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 เป็น
.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 Editor และระดับ .NET Framework ได้ที่หัวข้อเพิ่ม Firebase ลงในโปรเจ็กต์ Unity
- หากคุณนำเข้าแพ็กเกจ Firebase ที่ระดับ .NET Framework ผิดโดยไม่ตั้งใจ หรือต้องการเปลี่ยนจากการใช้
.unitypackageไปเป็นตัวเลือกการติดตั้ง Unity เพิ่มเติม วิธีที่สะอาดที่สุดคือนำแพ็กเกจ Firebase ทุกแพ็กเกจออกด้วยวิธีที่กล่าวถึงในส่วนการย้ายข้อมูลนี้ แล้วนำเข้าแพ็กเกจ Firebase ทั้งหมดอีกครั้ง
ตรวจสอบว่าเครื่องมือแก้ไขกำลังสร้างโปรเจ็กต์ใหม่ และการพยายามเล่นของคุณแสดงสถานะล่าสุดของโปรเจ็กต์ โดยทำดังนี้
- โดยค่าเริ่มต้น เครื่องมือแก้ไข Unity จะตั้งค่าให้สร้างใหม่ทุกครั้งที่ตรวจพบการเปลี่ยนแปลงชิ้นงานหรือการกำหนดค่า
- เป็นไปได้ว่าฟังก์ชันนี้ถูกปิดใช้และ Unity Editor ได้รับการตั้งค่าเป็นรีเฟรช/คอมไพล์ใหม่ด้วยตนเอง ตรวจสอบปัญหานี้และลองรีเฟรชด้วยตนเองหากเป็นกรณีนี้
ข้อผิดพลาดขณะรันไทม์ในโหมดเล่น
หากเกมเริ่มทำงาน แต่พบปัญหาเกี่ยวกับ Firebase ขณะทำงาน ให้ลองทำดังนี้
ตรวจสอบว่าคุณอนุมัติแพ็กเกจ Firebase ใน "ความปลอดภัยและความเป็นส่วนตัว" บน Mac OS
หากเริ่มเกมในเครื่องมือแก้ไขบน Mac OS แล้วเห็นกล่องโต้ตอบที่ระบุว่า "FirebaseCppApp-<version>.bundle Cannot be opened because the developer cannot be verified." คุณต้องอนุมัติไฟล์ Bundle นั้นในเมนูความปลอดภัยและความเป็นส่วนตัวของ Mac
โดยคลิกไอคอน Apple > ค่ากำหนดของระบบ > 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 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 ทุกแพ็กเกจออกด้วยวิธีที่ระบุไว้ในส่วนการย้ายข้อมูลนี้
ข้อผิดพลาดในการบิลด์อุปกรณ์เป้าหมายและ Resolver
หากเกมทำงานในเครื่องมือแก้ไข (กำหนดค่าสำหรับเป้าหมายบิลด์ที่เหมาะสมที่คุณเลือก) ให้ตรวจสอบว่า External Dependency Manager สำหรับ 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 ไฟล์เดียวได้ * ตัวเลือกนี้จะอยู่ใน Player Settings > Android > Publishing Settings > Minify * ตัวเลือกอาจแตกต่างกันไปใน 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