Menu
CoddyTech

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.

challenge icon

Desafío

Intermedio

La 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 climb unidades 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
    }
}
quiz iconPonte a prueba

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