Salut à tous,
Je voudrais implémenter une fonctionnalité pour le projet unity actuel sur lequel je travaille qui permet à un utilisateur de fournir un fichier texte formaté, et pour Unity d'instancier des objets en fonction de ce fichier texte (position, rotation, échelle , couleur, etc.). Naturellement, j'aimerais que ces objets soient associés à des balises, ce qui permet de regrouper rapidement et facilement des objets similaires par balise.
En l'état, mon projet fonctionne comme prévu dans l'éditeur proprement dit, mais si je déplace mon créateur de balises actuel et les scripts associés vers un répertoire séparé 'Assets / Editor' et que je construis mon projet, je perds bien sûr toutes les fonctionnalités associées avec ces scripts.
Existe-t-il un autre moyen de procéder soit
Merci beaucoup!
3 Réponses :
Vous ne pouvez pas inclure UnityEditor dans la construction et, pour autant que je sache, il n'y a aucun moyen de créer des balises lors de l'exécution. La solution serait d'implémenter votre propre système d'indexation pour trouver rapidement des objets qui peuvent être instanciés au moment de l'exécution.
Vous pouvez créer une classe DynamicObject: Monobehaviour pour stocker les balises et toutes les autres informations liées au système d'indexation / d'instanciation.
Une implémentation simple consisterait à utiliser un Dictionary où la clé est une balise.
Lors de l'indexation, vous ajouteriez l'objet à autant de listes qu'il a de balises.
Vous ne vous inscririez dans le système que pour les objets qui doivent être instanciés lors de l'exécution, accélérant ainsi la recherche.
Je pense qu'une implémentation aussi simple serait beaucoup plus rapide que les méthodes intégrées d'Unity GameObject.FindGameObjectsWithTag .
En guise de remarque supplémentaire, si vous avez également besoin de définir dynamiquement de nouveaux types en composant des composants réutilisables, je suggère de regarder dans les bibliothèques Entity Component System.
Résolu!
Une expérimentation plus poussée a en effet confirmé que l'espace de noms UnityEditor ne peut tout simplement pas être utilisé dans les builds. Comme proposé par Trey , un utilisateur qui a commenté la question ci-dessus, créer une simple liste de chaînes était idéal. P >
Chaque objet a maintenant un paramètre psuedoTag, simplement une chaîne directement tirée d'une liste stockée dans un objet tagMaster, et au lieu de vérifier n'importe quel.tag , j'obtiens simplement le composant dans lequel le psuedoTag dans les valeurs de chaîne stockées et comparées. De plus, la nature des listes en C # permet la création et la suppression dynamiques de psuedoTags, et mon projet a exactement la flexibilité que je souhaitais.
Merci encore à tous pour les suggestions!
J'étais confronté à un problème similaire où je devais créer dynamiquement des objets. J'avais besoin d'un moyen de les étiqueter afin de pouvoir les contrôler à l'aide de mes scripts. J'ai donc essayé de les étiqueter dynamiquement mais cela a montré une erreur que la balise ne se ferme pas. J'ai donc essayé de tromper Unity en créant un cube et en lui attribuant la balise que je voulais pour mes objets dynamiques. J'ai gardé le cube au-delà de la mise au point de la caméra et j'ai réussi à le clouer avec succès. Essayez cela peut fonctionner pour vous.
Je ne pense pas que vous puissiez faire ça.
D'accord, cela n'est possible que dans un script d'éditeur et il n'y a aucun moyen d'ajouter une balise après la création de l'application.
Le système d'étiquettes aspire à l'unité. Faites simplement ce que je fais, créez le vôtre, une liste simple fonctionne bien.