การดีบักบิลด์เกม ติดตั้ง และรันกระบวนการ

การแนะนำ

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

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

ปัญหาการรวบรวมโหมดการเล่น

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

เมื่อ Unity เริ่มต้นหรือตรวจพบการเปลี่ยนแปลงการขึ้นต่อกัน โค้ด หรือทรัพย์สินอื่น ๆ Unity จะพยายามสร้างโปรเจ็กต์ใหม่ หากโปรเจ็กต์ไม่สามารถคอมไพล์ได้ในขณะนั้น ตัวแก้ไขจะบันทึกข้อผิดพลาดในการคอมไพล์ไปยังคอนโซล และหากคุณพยายามเข้าสู่โหมดการเล่น คุณจะได้รับป๊อปอัปข้อผิดพลาดในแท็บ Scene ของ 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 ในโค้ด ตรวจสอบให้แน่ใจว่าคุณได้ทำให้ใช้งานได้โดยมีคำสั่ง 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 Package Manager โดยเฉพาะ
  3. หากคุณนำเข้า Firebase Unity SDK ก่อนหน้าเวอร์ชัน "10.0.0" เป็น .unitypackage s ไฟล์ 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 ไม่สามารถเปิดได้เนื่องจากไม่สามารถตรวจสอบผู้พัฒนาได้" คุณต้องอนุมัติไฟล์บันเดิลเฉพาะนั้นใน เมนูความปลอดภัยและความเป็นส่วนตัวของ Mac

โดยคลิก ไอคอน Apple > การตั้งค่าระบบ > ความปลอดภัยและความเป็นส่วนตัว

ในเมนูความปลอดภัย ประมาณครึ่งหน้าของหน้า มีส่วนที่ระบุว่า ""FirebaseCppApp-<version>.bundle" ถูกบล็อกไม่ให้ใช้งานเนื่องจากไม่ได้มาจากนักพัฒนาที่ระบุ"

คลิกปุ่มที่มีข้อความ อนุญาตต่อไป

c35166e224cce720.png

กลับไปที่ Unity แล้วกด Play อีกครั้ง

จากนั้นคุณจะเห็นคำเตือนคล้ายกับคำเตือนแรก:

5ad9ddb0d3a52892.png

กด Open แล้วโปรแกรมของคุณจะสามารถดำเนินการต่อได้ คุณจะไม่ถูกถามเกี่ยวกับไฟล์นี้อีก

ตรวจสอบให้แน่ใจว่าโปรเจ็กต์ของคุณมีและใช้ไฟล์การกำหนดค่าที่ถูกต้อง

  1. ตรวจสอบให้แน่ใจว่าการตั้งค่าบิลด์ของคุณได้รับการตั้งค่าสำหรับเป้าหมายที่คุณต้องการ (iOS หรือ Android) ใน ไฟล์ > การตั้งค่าบิลด์ สำหรับการสนทนาที่สมบูรณ์ยิ่งขึ้น โปรดอ่าน เอกสารประกอบการตั้งค่า Unity Build
  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) ได้รับการกำหนดค่าและทำงานอย่างถูกต้อง

พื้นที่เก็บข้อมูล EDM4U GitHub มี คำแนะนำทีละขั้นตอน สำหรับกระบวนการส่วนนี้ที่คุณควรตรวจสอบและปฏิบัติตามก่อนดำเนินการต่อ

ปัญหาและการลดขนาด 'Single Dex' ( บังคับ หากใช้ Cloud Firestore)

ขณะสร้างแอป Android คุณอาจพบความล้มเหลวในการสร้างที่เกี่ยวข้องกับการมีไฟล์ dex ไฟล์เดียว ข้อความแสดงข้อผิดพลาดมีลักษณะคล้ายกับข้อความต่อไปนี้ (หากโครงการของคุณได้รับการกำหนดค่าให้ใช้ระบบ Gradle build):

Cannot fit requested classes in a single dex file.

ไฟล์ .dex ใช้เพื่อเก็บชุดคำจำกัดความของคลาสและข้อมูลเสริมที่เกี่ยวข้องสำหรับแอปพลิเคชัน Android ไฟล์ dex เดียวถูกจำกัดให้อ้างอิงถึง 65,536 วิธี การสร้างจะล้มเหลวหากจำนวนวิธีทั้งหมดจากไลบรารี Android ทั้งหมดในโปรเจ็กต์ของคุณเกินขีดจำกัดนี้

สามารถใช้สองขั้นตอนต่อไปนี้ตามลำดับ เปิดใช้งาน multidex หากการลดขนาดไม่สามารถแก้ไขปัญหาได้

เปิดใช้งานการลดขนาด

Unity เปิดตัว Minification ในปี 2560.2 เพื่อตัดโค้ดที่ไม่ได้ใช้ออก ซึ่งสามารถลดจำนวนวิธีอ้างอิงทั้งหมดในไฟล์ dex ไฟล์เดียว * ตัวเลือกนี้สามารถพบได้ใน การตั้งค่าผู้เล่น > Android > การตั้งค่าการเผยแพร่ > ย่อขนาด * ตัวเลือกอาจแตกต่างกันไปตามเวอร์ชันต่างๆ ของ Unity ดังนั้น โปรดดูเอกสารประกอบของ Unity อย่างเป็นทางการ

เปิดใช้งาน Multidex

หลังจากเปิดใช้งานการลดขนาดแล้ว หากจำนวนวิธีอ้างอิงยังคงเกินขีดจำกัด อีกทางเลือกหนึ่งคือเปิดใช้งาน multidex มีหลายวิธีในการบรรลุเป้าหมายนี้ใน Unity:

  • หากเปิดใช้ งานเทมเพลต Gradle แบบกำหนดเอง ภายใต้ การตั้งค่าผู้เล่น ให้แก้ไข mainTemplate.gradle
  • หากคุณใช้ Android Studio เพื่อสร้างโปรเจ็กต์ที่ส่งออก ให้แก้ไขไฟล์ build.gradle ระดับโมดูล

ดูรายละเอียดเพิ่มเติมได้ใน คู่มือผู้ใช้ multidex

การทำความเข้าใจและแก้ไขข้อผิดพลาดรันไทม์ของอุปกรณ์เป้าหมาย

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

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

หุ่นยนต์

เครื่องจำลอง

  • ตรวจสอบบันทึกที่แสดงในคอนโซลของ Emulator หรือดูหน้าต่าง Logcat

อุปกรณ์

ทำความคุ้นเคยกับ adb และ adb logcat และวิธีใช้งาน

  • แม้ว่าคุณสามารถใช้เครื่องมือต่างๆ ในสภาพแวดล้อมบรรทัดคำสั่งเพื่อกรองเอาต์พุตได้ ลองพิจารณา ตัวเลือก ของ logcat แทน
  • วิธีง่ายๆ ในการเริ่มต้นเซสชัน ADB ด้วยกระดานชนวนที่ชัดเจนคือ:

    adb logcat -c && adb logcat <OPTIONS>
    

    โดยที่ OPTIONS คือแฟล็กใดก็ตามที่คุณส่งผ่านบรรทัดคำสั่งเพื่อกรองเอาต์พุต

ใช้ Logcat ผ่าน Android Studio

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

ไอโอเอส

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

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

ปัญหาที่รวดเร็ว

หากคุณพบบันทึกข้อผิดพลาดที่กล่าวถึงความรวดเร็ว โปรดดูส่วน External Dependency Manager for Unity ที่เกี่ยวข้อง

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

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