Tôi đang tạo ra những gì về cơ bản là hệ thống prefab của riêng tôi. Các đối tượng trò chơi được xác định bởi một tệp dữ liệu có thể đọc được của con người. Tôi muốn tạo một GameObject trống, tải nó với các thành phần được xác định trong tệp dữ liệu và chuẩn bị sẵn sàng và chờ Instantiate()
cuộc gọi. Tuy nhiên, bất cứ khi nào tôi sử dụng GameObject go = new GameObject()
một đối tượng trò chơi mới sẽ được thêm vào cảnh.
Sử dụng Unity được xây dựng trong prefab, tôi có thể tải prefab dưới dạng GameObject và nó không được thêm vào cảnh. (Xem ví dụ bên dưới)
Lý do đằng sau điều này là tôi muốn có một danh sách chứa GameObjects, một số được tạo bằng cách tải prefab Unity và các danh sách khác được tạo bởi hệ thống prefab tùy chỉnh của tôi. Điều này cần xảy ra trong thời gian chạy và không thể liên quan đến Unity Editor (vì người dùng cuối lý tưởng sẽ có thể xác định tệp dữ liệu của riêng họ).
Làm cách nào tôi có thể tạo GameObject mới mà không có Unity tự động khởi tạo nó cho tôi?
Ví dụ: tôi có thể thực hiện một cuộc gọi như thế này:
Resources.LoadAll("PrefabsDirectory", typeof(GameObject))
Và tôi sẽ nhận được một danh sách các GameObject, không ai trong số chúng được thêm vào cảnh khi cuộc gọi được thực hiện. Về cơ bản, tôi đang tạo một LoadAll
phương thức cho prefabs của riêng mình và tương tự, tôi không muốn khởi tạo GameObjects khi cuộc gọi được thực hiện.
Destroy
trên GameObject. Mà loại bỏ nó khỏi hiện trường và phát hành nó, làm cho nó không thể sử dụng.
go.SetActive(false)
là cách tốt nhất để tạo ra một cái gì đó giống như một nhóm đối tượng. Đó không phải là chính xác những gì bạn muốn, nhưng có lẽ bạn có thể có một nhóm nhỏ các đối tượng không hoạt động mà sau đó được nhân bản để khởi tạo tùy chỉnh của bạn.