Tworzę, co w zasadzie jest moim własnym systemem prefabrykowanym. Obiekty gry są definiowane przez plik danych czytelny dla człowieka. Chciałbym utworzyć pusty GameObject, załadować go ze składnikami zdefiniowanymi w pliku danych i przygotować go i czekać na Instantiate()
połączenie. Jednak za każdym razem, gdy używam GameObject go = new GameObject()
nowego obiektu, do sceny jest dodawany obiekt.
Korzystając z wbudowanych prefabrykatów Unity, mogę załadować prefabrykat jako GameObject i nie jest on dodawany do sceny. (Patrz przykład poniżej)
Uzasadnieniem tego jest chęć posiadania jednej listy zawierającej obiekty GameObject, niektóre generowane przez ładowanie prefabrykatów Unity, a inne tworzone przez mój własny system prefabrykatów. Musi się to zdarzyć w czasie wykonywania i nie może obejmować edytora Unity (ponieważ idealnie użytkownicy końcowi mogliby definiować własne pliki danych).
Jak mogę stworzyć nowy GameObject, bez Unity, który automatycznie utworzy go dla mnie?
Na przykład mogę wykonać takie połączenie:
Resources.LoadAll("PrefabsDirectory", typeof(GameObject))
I dostanę listę GameObjects, z których żaden nie jest dodawany do sceny, kiedy jest wykonywane połączenie. Zasadniczo tworzę LoadAll
metodę dla moich własnych prefabrykatów i podobnie nie chcę tworzyć instancji GameObjects podczas wykonywania połączenia.
Destroy
GameObject. Co usuwa go ze sceny i uwalnia, co czyni go bezużytecznym.
go.SetActive(false)
jest najlepszym sposobem na utworzenie czegoś takiego jak pula obiektów. Nie jest to dokładnie to, czego chcesz, ale być może możesz mieć małą grupę nieaktywnych obiektów, które później zostaną sklonowane w celu utworzenia niestandardowej instancji.