Je crée ce qui est essentiellement mon propre système préfabriqué. Les objets de jeu sont définis par un fichier de données lisibles par l'homme. Je voudrais créer un GameObject vide, le charger avec les composants définis dans le fichier de données et l'avoir prêt et en attente d'un Instantiate()
appel. Cependant, chaque fois que j'utilise GameObject go = new GameObject()
un nouvel objet de jeu est ajouté à la scène.
En utilisant Unity intégré dans les préfabriqués, je peux charger un préfabriqué en tant que GameObject, et il n'est pas ajouté à la scène. (Voir l'exemple ci-dessous)
La raison derrière cela est que j'aimerais avoir une liste qui contient GameObjects, certains générés par le chargement de préfabriqués Unity et d'autres créés par mon système de préfabriqués personnalisés. Cela doit se produire au moment de l'exécution et ne peut pas impliquer l'éditeur Unity (car, idéalement, les utilisateurs finaux pourraient définir leurs propres fichiers de données).
Comment puis-je créer un nouveau GameObject sans que Unity l'instancie automatiquement pour moi?
Par exemple, je peux faire un appel comme celui-ci:
Resources.LoadAll("PrefabsDirectory", typeof(GameObject))
Et je vais obtenir une liste de GameObjects, dont aucun n'est ajouté à la scène lorsque l'appel est effectué. Essentiellement, je crée une LoadAll
méthode pour mes propres préfabriqués, et de même, je ne veux pas instancier les GameObjects lorsque l'appel est effectué.
Destroy
le GameObject. Ce qui le supprime de la scène et le libère, le rendant inutilisable.
go.SetActive(false)
est le meilleur moyen de créer quelque chose comme un pool d'objets. Ce n'est pas exactement ce que vous voulez, mais vous pourriez peut-être avoir un petit groupe d'objets inactifs qui seront ensuite clonés pour votre instanciation personnalisée.