Risposta
Vorrei iniziare rispondendo direttamente alla tua domanda:
funziona, posso ignorare l'errore?
Si potrebbe . Non dovresti , perché significa che qualcosa non va. Ci si abituerebbe a questo errore, ma potrebbe "nascondere" o causare un altro errore.
Attualmente hai un messaggio di errore e funziona ancora correttamente. Al contrario, non funziona e non ha (o meglio: non riconosce) un feedback perché, è molto peggio!
Consigli
Per scoprire da dove proviene, dividi tutto in più righe.
string resourceLocation = "Prefabs/Items/" + someName;
Object prefab = Resources.Load(resourceLocation);
Object instance = Instantiate(prefab);
GameObject someObject = instance as GameObject;
Un errore ti dice solo a quale linea è successo. Se l'errore si verifica in questo codice, il numero di riga ti dirà di più su quale parte è andata storta qui. Inoltre, consiglierei di utilizzare la versione generica di Resources.Load
, che in realtà ci darebbe un passo in meno di cui preoccuparsi:
string resourceLocation = "Prefabs/Items/" + someName;
GameObject prefab = Resources.Load<GameObject>(resourceLocation);
GameObject someObject = Instantiate(prefab);
Scoprendo perché
- Ora, un po 'di esperienza Unity ci dice che "L'oggetto che si desidera istanziare è nullo" è causato da
Instantiate()
.
- Quindi, questo significa che lo
prefab
è null
.
- Ciò significa che
Resources.Load
ritorna null
.
- La documentazione per
Resources.Load
dice " Restituisce la risorsa path
se può essere trovata altrimenti restituisce null. "
- Ciò significa che non trova il percorso specificato (la stringa che ho chiamato
resourceLocation
)
Qualcosa non va in questo percorso, quindi l'ovvio primo passo sarebbe quello di vedere che cosa effettivamente finisce con Debug.Log. Dato che "tutto funziona come previsto", è probabile che ci siano dei duplicati in cui una versione funziona e l'altra ti dà questo errore.
In tal caso, è consigliabile utilizzare la versione con 2 parametri di Debug.Log Debug.Log(resourceLocation, gameObject);
. Ora, se fai clic sul messaggio di registro nell'editor Unity, selezionerà la GameObject
provenienza.