Las referencias superan a Find
Parte de la sección Fundamentos de scripting en Unity del Journey de Unity de Coddy. Lección 45 de 67.
Un script puede acceder a otro objeto de cuatro maneras: mediante un campo configurado en el Inspector, con GameObject.Find por nombre, mediante una búsqueda por etiqueta o con FindAnyObjectByType por tipo. Para un objeto que está en la escena desde el principio, el código de Unity usa el campo del Inspector por tres razones:
- Rapidez. La referencia se asigna antes de que empiece el juego. Cada búsqueda recorre los objetos de la escena, y una búsqueda en
Update()lo hace en cada fotograma. - Seguridad. Un nombre en una cadena de texto deja de funcionar cuando alguien cambia el nombre del objeto: Find devuelve
nully el error aparece más tarde, en la línea que lo usa. Un campo vacío del Inspector produce UnassignedReferenceException, que indica el nombre del campo y del script. - Claridad. El Inspector muestra de qué depende un script. Una llamada a Find lo oculta dentro del código.
// se asigna una sola vez en el Inspector: no hay búsqueda y cambiarle el nombre no afecta a nada
[SerializeField] private Transform door;
// se busca en cada fotograma y queda null después de cambiarle el nombre a la puerta
void Update()
{
Transform d = GameObject.Find("Door").transform;
}Las búsquedas tienen su utilidad: para objetos que solo existen una vez que el juego está en marcha, como uno que aparece mientras juegas, y para scripts que deben funcionar en cualquier escena. Incluso entonces, busca una sola vez en Start() y guarda el resultado en un campo.
Pruébalo tú mismo
Esta lección no incluye un desafío de código.
Esta lección incluye un breve cuestionario. Empieza la lección para responderlo y registrar tu progreso.
Todas las lecciones de Fundamentos de scripting en Unity
1Tu primer script
Hola, UnityColoca el cuboMuévete en cada fotogramaGira cada segundoDirige con las teclasRepaso: conduce el cubo4Vectores
Sumar vectoresDireccionesEspacio local y globalVelocidad diagonalDistancia entre objetosVector3 es una estructuraRepaso: piloto de dron7Proyecto: Atrapa la estrella
El atrapadorUna estrella fugaz10El ciclo de vida de los scripts
Awake y StartUpdate y LateUpdateOnEnable y OnDisableEl orden del ciclo de vidaRepaso: registrador del ciclo de vida2El Inspector
Campos del InspectorSerializeFieldNúmeros decimales y MathfAtributos del InspectorRepaso: Ascensor5Transformaciones y jerarquía
Padres e hijosEscalaMirar objetosMoverse hacia un puntoRepaso: Luna en órbita8Encontrar cosas
Buscar por nombreEtiquetasBuscar por tipoLas referencias superan a FindEl valor nulo de UnityRepaso: la moneda más cercana11Proyecto: Esquiva los bloques
El corredorBloques que caen6GameObjects y componentes
Referencias en el InspectorObtener un componenteComponentes faltantesAñadir un componenteRequireComponentMostrar y ocultarRepaso: interruptor de luz