Menjawab
Biarkan saya memulai dengan menjawab pertanyaan Anda secara langsung:
berfungsi, dapatkah saya mengabaikan kesalahan?
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.
string resourceLocation = "Prefabs/Items/" + someName;
Object prefab = Resources.Load(resourceLocation);
Object instance = Instantiate(prefab);
GameObject someObject = instance as GameObject;
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:
string resourceLocation = "Prefabs/Items/" + someName;
GameObject prefab = Resources.Load<GameObject>(resourceLocation);
GameObject someObject = Instantiate(prefab);
Mencari tahu mengapa
- Sekarang, sedikit pengalaman Unity memberitahu kita bahwa "Objek yang ingin Anda Instantiate adalah null" disebabkan oleh
Instantiate()
.
- Jadi, itu berarti
prefab
adalah null
.
- Jadi itu berarti
Resources.Load
kembali null
.
- The dokumentasi untuk
Resources.Load
mengatakan " Pengembalian aset di path
jika dapat ditemukan jika tidak akan mengembalikan null. "
- Jadi itu berarti tidak menemukan jalur yang diberikan (string yang saya sebut
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 dari GameObject
mana asalnya.