Menu
CoddyTech

Pais e filhos

Parte da seção Fundamentos de Scripting no Unity do Journey de Unity da Coddy. Lição 31 de 85.

Na Hierarchy, um objeto arrastado para cima de outro se torna seu filho e aparece indentado abaixo de seu pai. Um filho se move, gira e muda de escala junto com seu pai: mova o pai e todos os filhos o acompanham, sem código nos filhos.

O Unity armazena a posição de um filho em relação ao seu pai. transform.localPosition é esse deslocamento, medido a partir do pai; transform.position é a posição no mundo. Este Cavaleiro é filho de um Cavalo, e seu script o posiciona 1 unidade acima do centro do cavalo e meia unidade para trás, onde quer que o cavalo esteja:

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

Com o cavalo em (4, 0.5, 2), a position do cavaleiro é (4, 1.5, 1.5), enquanto sua localPosition permanece (0, 1, -0.5). Quando o cavalo continua andando, position muda e localPosition não. O deslocamento é medido ao longo dos próprios eixos do pai; portanto, quando o pai gira ou tem sua escala alterada, o deslocamento gira e muda de escala junto com ele. Para um objeto sem pai, localPosition e position são iguais.

challenge icon

Desafio

Médio

Coloque a bandeira na base do mastro, medida em relação ao navio.

  1. Em Start(), os números (0.6, 1, 0) são medidos em relação ao Ship, o objeto pai da bandeira.
  2. Nessa linha, altere transform.position para transform.localPosition.

Pressione “Jogar”: a bandeira fica na base do mastro, no navio. Em seguida, “Verificar”.

Experimente você mesmo

using UnityEngine;

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

    void Start()
    {
        // A base do mastro: 0.6 à direita e 1 para cima, medidos a partir do Ship
        transform.position = new Vector3(0.6f, 1, 0);
    }

    void Update()
    {
        // Enquanto a seta para cima estiver pressionada, suba até que a altura em relação ao Ship seja 4
    }
}

Todas as lições de Fundamentos de Scripting no Unity

Pratique por conta própria: Playground de Unity