Menu
CoddyTech

Genitori e figli

Fa parte della sezione Fondamenti di scripting in Unity del percorso Unity di Coddy. Lezione 24 di 67.

Nella Hierarchy, un oggetto trascinato su un altro diventa il suo figlio e viene visualizzato rientrato sotto il suo genitore. Un figlio si sposta, ruota e cambia scala insieme al genitore: sposta il genitore e ogni figlio lo segue, senza bisogno di codice sui figli.

Unity memorizza la posizione di un figlio rispetto al genitore. transform.localPosition è questo offset, misurato dal genitore; transform.position è la posizione nel mondo. Questo Rider è figlio di un Horse e il suo script lo posiziona 1 unità sopra il centro del cavallo e mezzo unità indietro, ovunque si trovi il cavallo:

void Start()
{
    transform.localPosition = new Vector3(0, 1, -0.5f);
}

Con il cavallo in posizione (4, 0.5, 2), la position del cavaliere è (4, 1.5, 1.5), mentre la sua localPosition rimane (0, 1, -0.5). Quando il cavallo prosegue, position cambia e localPosition no. L'offset è misurato lungo gli assi del genitore, quindi quando il genitore ruota o cambia scala, anche l'offset ruota e cambia scala con esso. Per un oggetto senza genitore, localPosition e position sono uguali.

challenge icon

Sfida

Medio

La bandiera è figlia della nave, e la nave non si trova al centro del mondo. Start() della bandiera dovrebbe posizionarla alla base dell’albero, 0.6 a destra e 1 in alto rispetto alla nave, ma scrive quei numeri in position, quindi la bandiera finisce lontano dalla nave.

  • Correggi Start() in modo che la bandiera inizi alla base dell’albero.
  • Mentre tieni premuta la freccia in su, issa la bandiera: sale a climb unità al secondo fino a raggiungere l’altezza 4 rispetto alla nave, la cima dell’albero, dove si ferma.

Premi Play, tieni premuta la freccia in su, poi premi Check.

Provalo tu

using UnityEngine;

public class Hoist : MonoBehaviour
{
    public float climb = 1f;

    void Start()
    {
        // La base dell'albero: 0.6 a destra e 1 in alto rispetto alla Ship
        transform.position = new Vector3(0.6f, 1, 0);
    }

    void Update()
    {
        // Finché la freccia su è premuta, sali fino a raggiungere un'altezza di 4 rispetto alla Ship
    }
}
quiz iconMettiti alla prova

Questa lezione include un breve quiz. Inizia la lezione per rispondere e tenere traccia dei tuoi progressi.

Tutte le lezioni di Fondamenti di scripting in Unity