Ich erstelle im Wesentlichen mein eigenes Fertigsystem. Spielobjekte werden durch eine vom Menschen lesbare Datendatei definiert. Ich möchte ein leeres GameObject erstellen, es mit den in der Datendatei definierten Komponenten laden und es bereithalten und auf einen Instantiate()
Anruf warten . Wenn ich jedoch GameObject go = new GameObject()
ein neues Spielobjekt verwende, wird es der Szene hinzugefügt.
Mit in Preity integrierten Unity kann ich ein Fertighaus als GameObject laden und es wird nicht zur Szene hinzugefügt. (Siehe Beispiel unten)
Das Grundprinzip dahinter ist, dass ich eine Liste mit GameObjects haben möchte, von denen einige durch Laden von Unity-Prefabs und andere von meinem benutzerdefinierten Prefab-System erstellt wurden. Dies muss zur Laufzeit geschehen und kann den Unity-Editor nicht einbeziehen (da Endbenutzer im Idealfall ihre eigenen Datendateien definieren können).
Wie kann ich ein neues GameObject erstellen, ohne dass Unity es automatisch für mich instanziiert?
Zum Beispiel kann ich einen Anruf wie folgt tätigen:
Resources.LoadAll("PrefabsDirectory", typeof(GameObject))
Und ich bekomme eine Liste von GameObjects, von denen keines der Szene hinzugefügt wird, wenn der Anruf getätigt wird. Im Wesentlichen erstelle ich eine LoadAll
Methode für meine eigenen Prefabs und möchte die GameObjects ebenfalls nicht instanziieren, wenn der Aufruf erfolgt.
Destroy
das GameObject aufzurufen. Dadurch wird es aus der Szene entfernt und freigegeben, wodurch es unbrauchbar wird.
go.SetActive(false)
ist der beste Weg, um so etwas wie einen Objektpool zu erstellen. Es ist nicht genau das, was Sie wollen, aber vielleicht könnten Sie eine kleine Gruppe inaktiver Objekte haben, die später für Ihre benutzerdefinierte Instanziierung geklont werden.