Menu
CoddyTech

Масштаб

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

transform.localScale умножает размер объекта вдоль каждой из его осей. Размер стандартного куба составляет 1 единицу по каждой стороне, поэтому куб с localScale (4, 1, 0.5) имеет ширину 4 единицы, высоту 1 единицу и глубину в половину единицы. Для равномерного масштабирования умножь на Vector3.one, то есть на (1, 1, 1). Этот мыльный пузырь увеличивается на 0.3 единицы в секунду, пока не достигнет 3 единиц в ширину:

public float size = 1f;

void Update()
{
    size = Mathf.Min(size + 0.3f * Time.deltaTime, 3f);
    transform.localScale = Vector3.one * size;
}

Mathf.Min(a, b) возвращает меньшее из двух чисел, поэтому size увеличивается, пока не достигнет 3, а затем остаётся равным 3.

Масштабирование выполняется относительно точки опоры объекта, которая у встроенных фигур Unity находится в центре. Центр куба размером 1 единица, стоящего на земле, находится на y = 0.5. Увеличь его высоту до 3 единиц — и он будет простираться на 1.5 вверх и на 1.5 вниз от центра, поэтому его половина уйдёт под землю. Чтобы куб стоял на земле, его центр должен находиться на половине его высоты: y = 1.5.

Размер дочернего объекта умножается на размер родительского: дочерний объект с localScale (1, 1, 1), находящийся внутри родительского объекта, масштабированного в 2 раза, будет отображаться вдвое больше. transform.lossyScale считывает итоговый размер в мировом пространстве; это свойство доступно только для чтения. Задавать нужно localScale.

challenge icon

Задание

Средне

Растопи кубик льда до размера 0.4, оставив его на земле.

  1. Добавь поле float size = 1f;. В Update() установи size = Mathf.Max(size - melt * Time.deltaTime, 0.4f);.
  2. Установи transform.localScale = Vector3.one * size;.
  3. Оставь нижнюю часть куба на уровне y = 0: установи для y позиции значение size / 2, сохранив x и z.

Нажми «Играть»: куб уменьшится и останется на земле. Затем нажми «Проверить».

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

using UnityEngine;

public class Melt : MonoBehaviour
{
    public float melt = 0.2f;

    void Update()
    {
        // Уменьшать размер на melt в секунду до 0.4, сохраняя нижнюю часть на земле
    }
}

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

Потренируйтесь самостоятельно: Песочница Unity