Menu
CoddyTech

Родители и дети

Часть раздела Основы скриптинга в Unity путешествия по Unity на Coddy. Урок 24 из 67.

В Hierarchy объект, перетащенный на другой объект, становится его дочерним объектом и отображается с отступом под своим родительским объектом. Дочерний объект перемещается, поворачивается и масштабируется вместе с родительским: переместите родительский объект — и все дочерние объекты переместятся вместе с ним, без кода на дочерних объектах.

Unity хранит положение дочернего объекта относительно родительского. transform.localPosition — это смещение, измеряемое относительно родительского объекта; transform.position — положение в мире. Этот Всадник — дочерний объект Лошади, и его скрипт размещает его на 1 единицу выше центра лошади и на пол-единицы позади него, где бы ни находилась лошадь:

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

Когда лошадь находится в точке (4, 0.5, 2), значение position всадника равно (4, 1.5, 1.5), а его localPosition остаётся равным (0, 1, -0.5). Когда лошадь продолжает идти, position меняется, а localPosition — нет. Смещение измеряется вдоль собственных осей родительского объекта, поэтому при повороте или масштабировании родительского объекта смещение также поворачивается и масштабируется. Для объекта без родительского объекта localPosition и position совпадают.

challenge icon

Задание

Средне

Флаг — дочерний объект корабля, а корабль находится не в центре мира. В Start() флага задаётся его положение у основания мачты: на 0.6 вправо и на 1 вверх относительно корабля, но эти числа записываются в position, поэтому флаг оказывается в стороне от корабля.

  • Исправь Start(), чтобы флаг начинал у основания мачты.
  • Пока удерживается клавиша со стрелкой вверх, поднимай флаг: он поднимается со скоростью climb единиц в секунду, пока его высота относительно корабля не достигнет 4 — верхушки мачты, — и останавливается там.

Нажми Играть, удерживай клавишу со стрелкой вверх, затем нажми Проверить.

Попробуйте сами

using UnityEngine;

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

    void Start()
    {
        // Основание мачты: на 0.6 вправо и на 1 вверх относительно Ship
        transform.position = new Vector3(0.6f, 1, 0);
    }

    void Update()
    {
        // Пока удерживается стрелка вверх, поднимайтесь, пока высота относительно Ship не достигнет 4
    }
}
quiz iconПроверьте себя

В этом уроке есть небольшой тест. Начните урок, чтобы ответить на вопросы и сохранить прогресс.

Все уроки раздела Основы скриптинга в Unity