Ini tidak pernah terjadi pada saya jadi saya agak bingung.
GameObject someObject = Instantiate (Resources.Load ("Prefabs/Items/" + someName)) as GameObject;
Ini melempar kesalahan tetapi objek sebenarnya instantiated dan semuanya berfungsi sebagaimana dimaksud. Kesalahan tidak menghentikan program tidak peduli berapa kali saya mereproduksi ini.
Bisakah saya mengabaikan kesalahan ini atau ada masalah yang tidak saya lihat?
Jawaban:
Jika objek dibuat dengan benar terlepas dari
Intantiate()
garis yang melemparkan pengecualian, maka kesalahan tersebut berasal dari contoh lain dari skrip - Anda mungkin secara tidak sengaja memiliki salinan kedua dalam adegan Anda.Satu instance dikonfigurasi dengan benar, dan melakukan
Instantiate()
seperti yang diharapkan tanpa kesalahan, sehingga objek dibuat seperti yang diinginkan.Contoh lain dikonfigurasi secara tidak benar, dan melempar kesalahan. Tetapi jika Anda hanya melihat contoh yang dikonfigurasi dengan benar, kesalahan ini tampaknya datang entah dari mana dan tidak memiliki konsekuensi yang terlihat.
Anda dapat mencetak jalur ke objek pada Mulai - atau dalam cek nol tepat sebelum garis yang menyinggung - untuk membantu melacak duplikat adegan yang tidak diinginkan.
Anda benar-benar tidak boleh mengabaikan kesalahan ini.
Paling-paling, itu membakar siklus komputasi yang tidak perlu. Paling buruk, itu adalah pertanda bahwa gim Anda melakukan sesuatu yang tidak sepenuhnya Anda pahami, dan itu bisa menjadi akar masalah yang jauh lebih besar.
sumber
Menjawab
Biarkan saya memulai dengan menjawab pertanyaan Anda secara langsung:
Kamu bisa . Anda tidak boleh , karena itu berarti ada sesuatu yang salah. Anda akan terbiasa dengan kesalahan ini, tetapi bisa "bersembunyi" atau menyebabkan kesalahan lain.
Saat ini Anda memiliki pesan kesalahan dan masih berfungsi dengan benar. Sebaliknya, itu tidak bekerja dan tidak memiliki (atau lebih tepatnya: tidak mengenali) umpan balik mengapa, jauh lebih buruk!
Nasihat
Untuk mencari tahu dari mana asalnya, pisahkan semua ini menjadi beberapa baris.
Kesalahan hanya memberi tahu Anda di baris mana hal itu terjadi. Jika kesalahan terjadi dalam kode ini, nomor baris akan memberi tahu Anda lebih banyak tentang bagian mana yang salah di sini. Juga, saya sarankan menggunakan versi generik
Resources.Load
, yang sebenarnya akan memberi kita satu langkah lebih sedikit untuk khawatir:Mencari tahu mengapa
Instantiate()
.prefab
adalahnull
.Resources.Load
kembalinull
.Resources.Load
mengatakan " Pengembalian aset dipath
jika dapat ditemukan jika tidak akan mengembalikan null. "resourceLocation
)Ada yang salah dengan jalan ini, jadi langkah pertama yang jelas adalah untuk melihat apa yang sebenarnya menjadi, dengan Debug. Log. Sebagai "semuanya berfungsi sebagaimana dimaksud", kemungkinan ada beberapa duplikasi yang terjadi di mana satu versi berfungsi dan yang lain memberi Anda kesalahan ini.
Dalam hal ini, sebaiknya gunakan versi 2 parameter Debug.Log
Debug.Log(resourceLocation, gameObject);
. Sekarang jika Anda mengklik pesan log di editor Unity, itu akan memilih dariGameObject
mana asalnya.sumber