Recherche…


Syntaxe

  • public statique GameObject Find (nom de chaîne);
  • statique publique GameObject FindGameObjectWithTag (balise de chaîne);
  • statique publique GameObject [] FindGameObjectsWithTag (balise de chaîne);
  • objet statique public FindObjectOfType (type type);
  • public static Object [] FindObjectsOfType (type type);

Remarques

Quelle méthode utiliser

Soyez prudent lorsque vous recherchez GameObjects à l'exécution, car cela peut nécessiter beaucoup de ressources. Surtout: ne lancez pas FindObjectOfType ou Find in Update, FixedUpdate ou plus généralement dans une méthode appelée une ou plusieurs fois par frame.

  • Appelez les méthodes d'exécution FindObjectOfType et Find uniquement lorsque cela est nécessaire
  • FindGameObjectWithTag a de très bonnes performances par rapport aux autres méthodes basées sur les chaînes. Unity conserve des onglets séparés sur les objets marqués et interroge ceux-ci au lieu de la scène entière.
  • Pour les GameObjects "statiques" (tels que les éléments d'interface utilisateur et les préfabriqués) créés dans l'éditeur, utilisez la référence sérialisable de GameObject dans l'éditeur.
  • Gardez vos listes de GameObjects dans List ou Arrays que vous gérez vous-même
  • En général, si vous instanciez beaucoup de GameObjects du même type, jetez un coup d’œil au pool d’objets
  • Mettez vos résultats de recherche en cache pour éviter les méthodes de recherche coûteuses.

Aller plus loin

Outre les méthodes fournies par Unity, il est relativement facile de concevoir vos propres méthodes de recherche et de collecte.

  • Dans le cas de FindObjectsOfType() , vos scripts peuvent conserver une liste d'eux-mêmes dans une collection static . Il est beaucoup plus rapide d'itérer une liste d'objets que de rechercher et inspecter des objets de la scène.

  • Ou créez un script qui stocke leurs instances dans un Dictionary basé sur des chaînes, et vous pourrez développer un système de marquage simple.

Recherche par nom de GameObject

var go = GameObject.Find("NameOfTheObject");
Avantages Les inconvénients
Facile à utiliser Les performances se dégradent avec le nombre d'objets de jeu dans la scène
Les chaînes sont des références faibles et suspectent les erreurs de l'utilisateur

Recherche par tags de GameObject

var go = GameObject.FindGameObjectWithTag("Player");
Avantages Les inconvénients
Possibilité de rechercher des objets simples et des groupes entiers Les chaînes sont des références faibles et suspectent les erreurs de l'utilisateur.
Relativement rapide et efficace Le code n'est pas portable car les balises sont codées en dur dans les scripts.

Inséré dans les scripts en mode édition

[SerializeField]
GameObject[] gameObjects;
Avantages Les inconvénients
Belle performance La collection d'objets est statique
Code portable Ne peut se référer qu'à GameObjects de la même scène

Recherche de scripts GameObjects par MonoBehaviour

ExampleScript script = GameObject.FindObjectOfType<ExampleScript>();
GameObject go = script.gameObject;

FindObjectOfType() renvoie null si aucun n'est trouvé.

Avantages Les inconvénients
Fortement typé Les performances se dégradent avec le nombre d'objets de jeu nécessaires pour évaluer
Possibilité de rechercher des objets simples et des groupes entiers

Recherche de GameObjects par nom à partir d'objets enfants

Transform tr = GetComponent<Transform>().Find("NameOfTheObject");
GameObject go = tr.gameObject;

Find renvoie null si aucun n'est trouvé

Avantages Les inconvénients
Portée de recherche limitée et bien définie Les chaînes sont des références faibles


Modified text is an extract of the original Stack Overflow Documentation
Sous licence CC BY-SA 3.0
Non affilié à Stack Overflow