บทนำ
ต่อไปนี้เป็นคำแนะนำในการแก้ไขข้อบกพร่องของกระบวนการคอมไพล์และสร้างสำหรับเกม 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
ประเภท ชั้นเรียน วิธีการ และสมาชิกที่ขาดหายไป
ปัญหา 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 เท่านั้น
- วิธีนำเข้าแพ็กเกจที่เหมาะสม
หากคุณนำเข้า Firebase Unity SDK ก่อนเวอร์ชัน "10.0.0" เป็น
.unitypackage
ไฟล์ ZIP ของ Firebase Unity SDK มีแพ็กเกจสำหรับทั้งการสนับสนุน .NET 3.x และ .NET 4.x ตรวจสอบว่าคุณรวมเฉพาะระดับ .NET Framework ที่ใช้งานร่วมกันได้ในโปรเจ็กต์- เราจะอธิบายความเข้ากันได้ระหว่างเวอร์ชันของ Unity Editor และระดับ .NET Frameworks ในเพิ่ม Firebase ลงในโปรเจ็กต์ Unity
- หากคุณนำเข้าแพ็กเกจ Firebase ที่ระดับ .NET Framework ไม่ถูกต้อง หรือต้องการเปลี่ยนจากการใช้
.unitypackage
ไปใช้ตัวเลือกการติดตั้ง Unity เพิ่มเติมวิธีใดวิธีหนึ่ง วิธีที่ง่ายที่สุดคือการนำแพ็กเกจ Firebase ทุกแพ็กเกจออกผ่านวิธีการที่ระบุไว้ในส่วนการย้ายข้อมูลนี้ แล้วนำเข้าแพ็กเกจ Firebase ทั้งหมดอีกครั้ง
ตรวจสอบว่าเครื่องมือแก้ไขกำลังสร้างโปรเจ็กต์ใหม่ และดูว่าสิ่งที่คุณพยายามเล่นแสดงถึงสถานะปัจจุบันของโปรเจ็กต์
- โดยค่าเริ่มต้น ตัวแก้ไข Unity จะได้รับการตั้งค่าให้สร้างอีกครั้งเมื่อใดก็ตามที่ตรวจพบการเปลี่ยนแปลงของเนื้อหาหรือการกำหนดค่า
- อาจเป็นไปได้ว่าฟังก์ชันการทำงานนี้ปิดใช้อยู่และมีการตั้งค่า Unity Editor เป็นการรีเฟรช/คอมไพล์อีกครั้งด้วยตนเอง ตรวจสอบเรื่องนี้แล้วลองรีเฟรชด้วยตนเองหากเป็นกรณีนี้
ข้อผิดพลาดเกี่ยวกับรันไทม์ของโหมดการเล่น
หากเกมเริ่มต้นแล้ว แต่พบปัญหาเกี่ยวกับ Firebase ขณะเล่น ให้ลองทำตามขั้นตอนต่อไปนี้
ตรวจสอบว่าคุณอนุมัติแพ็กเกจ Firebase ในส่วน "ความปลอดภัยและ ความเป็นส่วนตัว" ใน Mac OS
เมื่อเริ่มต้นเกมในตัวแก้ไขของ Mac OS พบกล่องโต้ตอบ "FirebaseCppApp-<version>.bundle ไม่สามารถเปิดได้เนื่องจากนักพัฒนาแอปยืนยันไม่ได้" คุณจะต้องอนุมัติไฟล์ Bundle ดังกล่าวในส่วน "ความปลอดภัยและแอป" ของ Mac เมนูความเป็นส่วนตัว
โดยคลิกไอคอน Apple > ค่ากำหนดของระบบ > ความปลอดภัยและ ความเป็นส่วนตัว
ในเมนูความปลอดภัยที่ประมาณครึ่งหน้าล่าง จะมีส่วนที่ระบุว่า ""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 สำหรับ 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) มีการกำหนดค่าอย่างถูกต้องและทำงานได้หรือไม่
ที่เก็บ 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 เพื่อดูตัวเลือกเพิ่มเติม