Родители и дети
Часть раздела Основы скриптинга в 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 совпадают.
Задание
СреднеФлаг — дочерний объект корабля, а корабль находится не в центре мира. В 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
}
}
В этом уроке есть небольшой тест. Начните урок, чтобы ответить на вопросы и сохранить прогресс.
Все уроки раздела Основы скриптинга в Unity
1Ваш первый скрипт
Привет, UnityРазместите кубДвигайте каждый кадрПоворачивайте каждую секундуУправляйте клавишамиПовторение: управляйте кубом2Инспектор
Поля инспектораSerializeFieldЧисла с плавающей точкой и MathfАтрибуты инспектораПовторение: лифт5Преобразования и иерархия
Родители и детиМасштабПосмотри на объектыДвигайся к точкеПовторение: Луна на орбите6Игровые объекты и компоненты
Ссылки в InspectorПолучение компонентаОтсутствующие компонентыДобавление компонентаRequireComponentПоказать и скрытьПовторение: выключатель света