Câu trả lời
Hãy để tôi bắt đầu bằng cách trả lời trực tiếp câu hỏi của bạn:
Nó hoạt động, tôi có thể bỏ qua lỗi?
Bạn có thể . Bạn nên không , bởi vì nó có nghĩa là một cái gì đó đang đi sai. Bạn sẽ quen với lỗi này, nhưng nó có thể "ẩn" hoặc gây ra lỗi khác.
Hiện tại bạn có một thông báo lỗi và nó vẫn hoạt động chính xác. Cách khác, nó không động và không có (hoặc đúng hơn: không nhận ra) thông tin phản hồi tại sao, còn tồi tệ hơn nhiều!
Lời khuyên
Để tìm ra nơi này đến từ đâu, hãy chia toàn bộ điều này thành nhiều dòng.
string resourceLocation = "Prefabs/Items/" + someName;
Object prefab = Resources.Load(resourceLocation);
Object instance = Instantiate(prefab);
GameObject someObject = instance as GameObject;
Một lỗi chỉ cho bạn biết nó đã xảy ra ở dòng nào. Nếu lỗi xảy ra trong mã này, số dòng sẽ cho bạn biết thêm về phần nào bị lỗi ở đây. Ngoài ra, tôi khuyên bạn nên sử dụng phiên bản chung của Resources.Load
, điều đó thực sự sẽ giúp chúng tôi bớt đi một bước để lo lắng về:
string resourceLocation = "Prefabs/Items/" + someName;
GameObject prefab = Resources.Load<GameObject>(resourceLocation);
GameObject someObject = Instantiate(prefab);
Tìm hiểu tại sao
- Bây giờ, một chút kinh nghiệm của Unity cho chúng ta biết rằng Đối tượng mà bạn muốn tạo tức thì là null.
Instantiate()
.
- Vì vậy, điều đó có nghĩa
prefab
là null
.
- Vì vậy, điều đó có nghĩa là
Resources.Load
trở lại null
.
- Các tài liệu cho
Resources.Load
biết " Returns tài sản tại path
nếu nó có thể được tìm thấy nếu không thì trả null. "
- Vì vậy, điều đó có nghĩa là nó không tìm thấy đường dẫn đã cho (chuỗi tôi đã gọi
resourceLocation
)
Có gì đó không ổn với con đường này, vì vậy bước đầu tiên rõ ràng sẽ là xem cuối cùng nó thực sự là gì, với Debug.Log. Vì "mọi thứ hoạt động như dự định", có thể có một số sự trùng lặp đang diễn ra khi một phiên bản hoạt động và phiên bản kia cung cấp cho bạn lỗi này.
Trong trường hợp đó, nên sử dụng phiên bản 2 tham số của Debug.Log Debug.Log(resourceLocation, gameObject);
. Bây giờ nếu bạn nhấp vào thông điệp tường trình trong trình soạn thảo Unity, nó sẽ chọn GameObject
nơi nó đến.