Ответ
Позвольте мне начать с прямого ответа на ваш вопрос:
это работает, я могу игнорировать ошибку?
Вы могли бы . Вы не должны , потому что это означает, что что-то идет не так. Вы бы привыкли к этой ошибке, но она может «спрятаться» или вызвать другую ошибку.
В настоящее время у вас есть сообщение об ошибке, и оно все еще работает правильно. С другой стороны, он не работает и не имеет (или, скорее, не признает) обратной связи, почему, это намного хуже!
Совет
Чтобы выяснить, откуда это происходит, разбейте все это на несколько строк.
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);
Выяснить почему
- Теперь немного опыта Unity говорит нам, что «Объект, который вы хотите создать, является нулевым» вызван
Instantiate()
.
- Итак, это означает, что
prefab
есть null
.
- Так что это означает, что
Resources.Load
возвращается null
.
- В документации
Resources.Load
сказано: « Возвращает актив, path
если он может быть найден, иначе возвращает ноль ».
- Так что это означает, что он не находит заданный путь (строка, которую я назвал
resourceLocation
)
Что-то не так с этим путем, поэтому очевидным первым шагом было бы посмотреть, что это на самом деле в конечном итоге, с Debug.Log. Поскольку «все работает как задумано», вполне вероятно, что происходит некоторое дублирование, когда одна версия работает, а другая выдает эту ошибку.
В этом случае хорошей идеей будет использование версии Debug.Log с двумя параметрами Debug.Log(resourceLocation, gameObject);
. Теперь, если вы нажмете на сообщение журнала в редакторе Unity, оно выберет, GameObject
откуда оно пришло.