ตอบ
ให้ฉันเริ่มต้นด้วยการตอบคำถามของคุณโดยตรง:
ใช้งานได้ฉันสามารถเพิกเฉยต่อข้อผิดพลาดได้หรือไม่
คุณสามารถทำได้ คุณไม่ควรเพราะมันหมายถึงบางสิ่งผิดปกติ คุณจะคุ้นเคยกับข้อผิดพลาดนี้ แต่อาจ "ซ่อน" หรือทำให้เกิดข้อผิดพลาดอื่น
ขณะนี้คุณมีข้อผิดพลาดและยังคงทำงานได้อย่างถูกต้อง ในทางกลับกันมันไม่ทำงานและไม่มีข้อเสนอแนะ (หรือมากกว่า: ไม่รับรู้) ทำไมมันแย่กว่ามาก!
คำแนะนำ
เพื่อหาว่าสิ่งนี้มาจากไหนให้แยกสิ่งนี้ทั้งหมดออกเป็นหลายบรรทัด
string resourceLocation = "Prefabs/Items/" + someName;
Object prefab = Resources.Load(resourceLocation);
Object instance = Instantiate(prefab);
GameObject someObject = instance as GameObject;
ข้อผิดพลาดเพียงบอกคุณว่ามันเกิดขึ้นที่บรรทัดใด หากเกิดข้อผิดพลาดในรหัสนี้หมายเลขบรรทัดจะแจ้งให้คุณทราบเพิ่มเติมว่าส่วนใดผิดพลาดที่นี่ นอกจากนี้ฉันขอแนะนำให้ใช้เวอร์ชันทั่วไปResources.Load
ซึ่งจริง ๆ แล้วจะช่วยให้เราลดขั้นตอนหนึ่งที่ต้องกังวลเกี่ยวกับ:
string resourceLocation = "Prefabs/Items/" + someName;
GameObject prefab = Resources.Load<GameObject>(resourceLocation);
GameObject someObject = Instantiate(prefab);
หาสาเหตุ
- ตอนนี้บิตของประสบการณ์ความสามัคคีบอกเราว่า“วัตถุที่คุณต้องการที่จะยกตัวอย่างเป็นโมฆะ”
Instantiate()
ที่เกิดจากการ
- ดังนั้นที่หมายถึงคือ
prefab
null
- ดังนั้นที่หมายถึงผลตอบแทน
Resources.Load
null
- เอกสาร
Resources.Load
กล่าวว่า " ผลตอบแทนสินทรัพย์ที่path
ถ้ามันสามารถพบได้มิฉะนั้นจะส่งกลับ null. "
- ดังนั้นหมายความว่าไม่พบเส้นทางที่กำหนด (สตริงที่ฉันเรียก
resourceLocation
)
มีข้อผิดพลาดเกิดขึ้นกับเส้นทางนี้ดังนั้นขั้นตอนแรกที่ชัดเจนคือการดูว่าจริง ๆ แล้วมันคือ Debug.Log ในฐานะ "ทุกอย่างทำงานได้ตามที่ต้องการ" มีความเป็นไปได้ที่จะมีการทำซ้ำบางอย่างเกิดขึ้นในที่ที่รุ่นหนึ่งทำงานได้และอีกรุ่นหนึ่งให้ข้อผิดพลาดนี้แก่คุณ
ในกรณีที่เป็นความคิดที่ดีที่จะใช้รุ่น 2 พารามิเตอร์ของ Debug.Log(resourceLocation, gameObject);
Debug.Log ตอนนี้ถ้าคุณคลิกที่ข้อความบันทึกในตัวแก้ไข Unity มันจะเลือกGameObject
ตำแหน่งที่มาจาก