Cevap
Sorunuzu doğrudan cevaplayarak başlayayım:
çalışıyor, hatayı yok sayabilir miyim?
Sen olabilir . Sen should bir şey yanlış gidiyor demektir çünkü değil. Bu hataya alışırsınız, ancak "gizleyebilir" veya başka bir hataya neden olabilir.
Şu anda bir hata mesajınız var ve hala doğru çalışıyor. Tersi, bu değil geribildirim neden kötüdür: Çalışma ve olmamasından (tanımama daha doğrusu)!
Tavsiye
Bunun nereden geldiğini öğrenmek için, tüm bunları birkaç satıra ayırın.
string resourceLocation = "Prefabs/Items/" + someName;
Object prefab = Resources.Load(resourceLocation);
Object instance = Instantiate(prefab);
GameObject someObject = instance as GameObject;
Bir hata sadece bunun hangi satırda olduğunu gösterir. Bu kodda hata oluşursa, satır numarası burada hangi parçanın yanlış gittiğiyle ilgili daha fazla bilgi verecektir. Ayrıca, genel sürümü kullanmanızı tavsiye ederim Resources.Load
, bu aslında endişelenmemiz için bir adım daha az olurdu:
string resourceLocation = "Prefabs/Items/" + someName;
GameObject prefab = Resources.Load<GameObject>(resourceLocation);
GameObject someObject = Instantiate(prefab);
Nedenini bulmak
- Şimdi, biraz Unity deneyimi bize “Örneklemek istediğiniz Nesnenin boş olduğunu” söylüyor
Instantiate()
.
- Yani, bu vasıta
prefab
olduğunu null
.
- Yani bu
Resources.Load
geri dönüş demektir null
.
- Belgeleri
Resources.Load
"diyor İade de varlık path
onu bulunabilir, aksi takdirde null döndürür. "
- Bu, verilen yolu bulamadığı anlamına gelir (aradığım dize
resourceLocation
)
Bu yolla ilgili bir sorun var, bu yüzden ilk adım Debug.Log ile gerçekte ne olduğunu görmek olacaktır. "Her şey istendiği gibi çalışıyor", bir sürümün çalıştığı yerde diğerinin size bu hatayı vermesi olasıdır.
Bu durumda, Debug.Log'un 2 parametre sürümünü kullanmak iyi bir fikirdir Debug.Log(resourceLocation, gameObject);
. Şimdi Unity editöründe günlük mesajına tıklarsanız, GameObject
nereden geldiğini seçecektir .