Buscar..


Sintaxis

  • Búsqueda de GameObject estática pública (nombre de cadena);
  • público estático GameObject FindGameObjectWithTag (etiqueta de cadena);
  • GameObject estático público [] FindGameObjectsWithTag (etiqueta de cadena);
  • objeto estático público FindObjectOfType (tipo de tipo);
  • objeto estático público [] FindObjectsOfType (tipo de tipo);

Observaciones

Qué método utilizar

Tenga cuidado al buscar GameObjects en tiempo de ejecución, ya que esto puede consumir recursos. Especialmente: no ejecute FindObjectOfType o Find in Update, FixedUpdate o más generalmente en un método llamado una o más veces por fotograma.

  • Llame a los métodos de ejecución FindObjectOfType y Find solo cuando sea necesario
  • FindGameObjectWithTag tiene un rendimiento muy bueno en comparación con otros métodos basados ​​en cadenas. Unity mantiene pestañas separadas en los objetos etiquetados y las consulta en lugar de toda la escena.
  • Para GameObjects "estáticos" (como elementos de UI y prefabs) creados en el editor, use la referencia de GameObject serializable en el editor
  • Mantenga sus listas de GameObjects en la Lista o Arreglos que usted mismo administra.
  • En general, si crea una gran cantidad de GameObjects del mismo tipo, eche un vistazo a la Agrupación de objetos
  • Guarda en caché los resultados de búsqueda para evitar ejecutar los métodos de búsqueda costosos una y otra vez.

Yendo mas profundo

Además de los métodos que vienen con Unity, es relativamente fácil diseñar sus propios métodos de búsqueda y recopilación.

  • En el caso de FindObjectsOfType() , puede hacer que sus scripts guarden una lista de ellos mismos en una colección static . Es mucho más rápido iterar una lista de objetos lista que buscar e inspeccionar objetos de la escena.

  • O cree un script que almacene sus instancias en un Dictionary basado en cadenas, y usted tiene un sistema de etiquetado simple que puede ampliar.

Buscando por nombre de GameObject

var go = GameObject.Find("NameOfTheObject");
Pros Contras
Fácil de usar El rendimiento se degrada a lo largo del número de gameobjects en escena
Las cadenas son referencias débiles y sospechosas de errores del usuario

Buscando por las etiquetas de GameObject

var go = GameObject.FindGameObjectWithTag("Player");
Pros Contras
Posibilidad de buscar tanto objetos individuales como grupos enteros Las cadenas son referencias débiles y sospechosas de errores del usuario.
Relativamente rápido y eficiente El código no es portátil, ya que las etiquetas están codificadas en los scripts.

Insertado a scripts en el modo de edición

[SerializeField]
GameObject[] gameObjects;
Pros Contras
Gran actuación La colección de objetos es estática
Codigo portatil Solo se puede referir a GameObjects desde la misma escena.

Encontrando guiones de GameObjects by MonoBehaviour

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

FindObjectOfType() devuelve null si no se encuentra ninguno.

Pros Contras
Fuertemente mecanografiado El rendimiento se degrada a lo largo del número de gameobjects necesarios para evaluar
Posibilidad de buscar tanto objetos individuales como grupos enteros

Encuentra GameObjects por nombre de objetos secundarios

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

Find devoluciones null si no se encuentra ninguna

Pros Contras
Alcance de búsqueda limitado y bien definido. Las cuerdas son referencias débiles


Modified text is an extract of the original Stack Overflow Documentation
Licenciado bajo CC BY-SA 3.0
No afiliado a Stack Overflow