Padres e hijos
Parte de la sección Fundamentos de scripting en Unity del Journey de Unity de Coddy. Lección 24 de 67.
En la Hierarchy, un objeto arrastrado sobre otro se convierte en su hijo y aparece con sangría debajo de su padre. Un hijo se mueve, gira y cambia de escala junto con su padre: mueve al padre y todos los hijos lo acompañan, sin necesidad de código en los hijos.
Unity guarda la posición de un hijo relativa a su padre. transform.localPosition es ese desplazamiento, medido desde el padre; transform.position es la posición en el mundo. Este Rider es hijo de un Horse, y su script lo coloca 1 unidad por encima del centro del caballo y media unidad hacia atrás, dondequiera que esté el caballo:
void Start()
{
transform.localPosition = new Vector3(0, 1, -0.5f);
}Con el caballo en (4, 0.5, 2), la position del jinete indica (4, 1.5, 1.5), mientras que su localPosition permanece en (0, 1, -0.5). Cuando el caballo sigue caminando, position cambia y localPosition no. El desplazamiento se mide a lo largo de los propios ejes del padre, así que cuando el padre gira o cambia de escala, el desplazamiento también gira y cambia de escala. Para un objeto sin padre, localPosition y position son iguales.
Desafío
IntermedioLa bandera es hija del barco, y el barco no está en el centro del mundo. El Start() de la bandera debería colocarla al pie del mástil, 0.6 a la derecha y 1 hacia arriba medido desde el barco, pero escribe esos números en position, así que la bandera acaba lejos del barco.
- Corrige
Start()para que la bandera empiece al pie del mástil. - Mientras se mantenga pulsada la flecha hacia arriba, iza la bandera: sube a
climbunidades por segundo hasta que su altura medida desde el barco sea 4, la parte superior del mástil, y se detiene allí.
Pulsa Play, mantén pulsada la flecha hacia arriba y después pulsa Check.
Pruébalo tú mismo
using UnityEngine;
public class Hoist : MonoBehaviour
{
public float climb = 1f;
void Start()
{
// La base del mástil: 0.6 a la derecha y 1 hacia arriba, medidos desde el Ship
transform.position = new Vector3(0.6f, 1, 0);
}
void Update()
{
// Mientras se mantenga pulsada la flecha hacia arriba, asciende hasta que la altura con respecto al Ship sea 4
}
}
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