Sto creando quello che è essenzialmente il mio sistema prefabbricato. Gli oggetti di gioco sono definiti da un file di dati leggibile dall'uomo. Vorrei creare un GameObject vuoto, caricarlo con i componenti definiti nel file di dati e averlo pronto e in attesa di una Instantiate()
chiamata. Tuttavia, ogni volta che uso GameObject go = new GameObject()
un nuovo oggetto di gioco viene aggiunto alla scena.
Utilizzando i prefabbricati integrati di Unity, posso caricare un prefabbricato come GameObject e non viene aggiunto alla scena. (Vedi esempio sotto)
La logica alla base di questo è che vorrei avere un elenco che contiene GameObjects, alcuni generati caricando i prefabbricati Unity e altri creati dal mio sistema prefabbricato personalizzato. Questo deve avvenire in fase di esecuzione e non può coinvolgere l'Editor Unity (poiché idealmente gli utenti finali sarebbero in grado di definire i propri file di dati).
Come posso creare un nuovo GameObject, senza che Unity lo installi automaticamente per me?
Ad esempio, posso effettuare una chiamata in questo modo:
Resources.LoadAll("PrefabsDirectory", typeof(GameObject))
E otterrò un elenco di GameObjects, nessuno dei quali viene aggiunto alla scena quando viene effettuata la chiamata. In sostanza, sto creando un LoadAll
metodo per i miei prefabbricati e allo stesso modo, non voglio creare un'istanza di GameObjects quando viene effettuata la chiamata.
Destroy
GameObject. Il che lo rimuove dalla scena e lo rilascia, rendendolo inutilizzabile.
go.SetActive(false)
è il modo migliore per creare qualcosa come un pool di oggetti. Non è esattamente quello che vuoi, ma forse potresti avere un piccolo gruppo di oggetti inattivi che verranno successivamente clonati per la tua istanza personalizzata.