Математические выражения в Inspector Unity — Expression Evaluator

Unity Expression Evaluator: математика прямо в Inspector

·  12 мин чтения Unity Transform Inspector Лайфхаки Секретные фишки Для начинающих

Представьте: вам нужно расставить 10 кубов ровной линией. Или разложить столбы забора на одинаковом расстоянии. Или выстроить объекты по кругу. Большинство новичков делают это вручную — двигают каждый объект по одному, подбирая координаты на глаз. Это долго, утомительно и неточно. А что, если я скажу, что Unity умеет считать за вас — прямо внутри полей Inspector?

В этой статье вы узнаете про Expression Evaluator — встроенную возможность Unity вводить математические выражения в числовые поля. Никакого кода, никаких скриптов — просто пишете формулу в поле Position, Rotation или Scale, нажимаете Enter, и Unity сам вычисляет результат. Это один из тех приёмов, о которых не рассказывают в первых уроках, но который экономит часы работы.

Что такое Expression Evaluator?

Expression Evaluator — это встроенный калькулятор Unity, который работает прямо в числовых полях Inspector. Вместо того чтобы вписывать готовое число, вы можете ввести математическое выражение — и Unity вычислит его автоматически.

Например, вы хотите поставить объект на позицию X = 2.5. Можно просто написать 5/2 — и Unity подставит результат. Или вам нужна позиция на расстоянии ровно трети от нуля до десяти? Пишете 10/3 — и получаете точное значение 3.333…

Но настоящая магия начинается, когда вы выделяете несколько объектов одновременно и используете специальные функции L() и R(). Тогда Unity применяет выражение к каждому объекту индивидуально — и одним действием расставляет десятки объектов именно так, как вам нужно.

Где это работает?

Expression Evaluator работает в любом числовом поле Inspector, которое принимает float или int. В первую очередь это:

Но не только Transform! Выражения также работают в числовых полях других компонентов: интенсивность света, скорость частиц, радиус коллайдера — везде, где вы видите числовое поле в Inspector.

Совет: чтобы Expression Evaluator сработал для группы объектов, нужно выделить несколько объектов в Hierarchy (зажав Shift или Ctrl), а затем ввести выражение в общее поле Transform, которое появится в Inspector.

Первый пример: линия из 10 кубов

Давайте сразу попробуем. Создайте в сцене 10 кубов (меню GameObject → 3D Object → Cube). Назовите их как угодно — Cube_1, Cube_2 и так далее. Сейчас все они стоят в одной точке (0, 0, 0) и сливаются друг с другом.

Теперь выделите все 10 кубов в Hierarchy (кликните первый, зажмите Shift и кликните последний). В Inspector появится общий компонент Transform. Кликните в поле Position X и введите:
L(0,9) → нажмите на участок с кодом что бы скопировать его.

Нажмите Enter. Готово! Ваши 10 кубов выстроились в ровную линию по оси X — от позиции 0 до позиции 9.

Что произошло?

Функция L(a,b) означает Linear — линейное распределение. Unity берёт диапазон от a до b и равномерно распределяет значения между всеми выделенными объектами:

Формула внутри: каждый объект получает значение a + (index / (count - 1)) * (b - a), где index — порядковый номер объекта (с нуля), а count — общее количество выделенных объектов.

10 кубов расставлены в ровную линию после ввода L(0,9) в поле Position X
Результат ввода L(0,9) в поле Position X при выделении 10 кубов.

Создаём интересные расстановки

Линия — это только начало. Давайте пойдём дальше и попробуем более интересные варианты. Для каждого примера выделяйте все 10 кубов и вводите выражения в нужные поля.

Лестница

Чтобы создать лестницу, нужно сдвигать объекты и по горизонтали, и по вертикали одновременно:

Каждый следующий куб сдвигается вправо на 1 и вверх на 0.5 — получается ровная лестница.

Забор

Забор — это линия с увеличенным расстоянием между объектами:

Теперь между столбами расстояние ровно 2 единицы. Если хотите другой шаг — просто измените второе число. Например, L(0,27) даст шаг в 3 единицы.

Волна

Вот тут становится по-настоящему интересно. Функция sin() создаёт волнообразное движение:

Объекты распределяются по оси X линией, а по оси Y каждый получает значение синуса — и вместе они образуют красивую волну. Множитель *2 задаёт высоту (амплитуду) волны.

Объекты расставлены волной с помощью выражения sin(L(0,2*pi))*2
Волна из 10 объектов: Position X = L(0,9), Position Y = sin(L(0,2*pi))*2.

Круг

Круг строится из комбинации sin() и cos(). Чтобы расставить 10 объектов по окружности радиусом 5:

Каждый объект получает свой угол от 0 до 2π (полный оборот), а cos и sin переводят этот угол в координаты X и Z на окружности.

Заметка: функции sin() и cos() работают в радианах, а не в градусах. Полный круг = 2π ≈ 6.28 радиан. В Unity можно написать 2*pi — константа pi распознаётся автоматически.

10 объектов расставлены по кругу радиусом 5 с помощью cos и sin
Круг из 10 объектов: Position X = cos(L(0,2*pi))*5, Position Z = sin(L(0,2*pi))*5.

Спираль

Спираль — это круг, который одновременно поднимается вверх:

Здесь 4*pi — это два полных оборота. Одновременно объекты поднимаются с 0 до 10 по оси Y. Получается красивая спираль из двух витков.

Случайная позиция

Функция R(a,b) даёт каждому объекту случайное значение в указанном диапазоне:

Объекты разбросает по площадке 20×20 в случайном порядке — отлично подходит для деревьев, камней, декора.

Случайный масштаб

Чтобы объекты выглядели разнообразнее, задайте им случайный размер:

Внимание: каждое поле получает своё случайное значение. Если вы введёте R(0.5,2) по отдельности в X, Y и Z — объект растянется неравномерно. Чтобы масштаб был одинаковый по всем осям, введите выражение в одно поле, запомните результат и скопируйте вручную — или используйте одинаковый Uniform Scale, если он доступен.

Случайный поворот

Идеально для декоративных объектов типа камней или кустов:

Каждый объект повернётся на случайный угол вокруг вертикальной оси.

Арка

Полукруг — это половина круга (от 0 до π):

Получается арка из объектов в плоскости XY.

Дополнительные возможности

Арифметика в одном объекте

Expression Evaluator удобен даже без мульти-выделения. Если вам нужна позиция «половина от 7», просто впишите 7/2. Нужен сдвиг на треть единицы? Пишите 1/3. Это работает быстрее, чем доставать калькулятор.

Составные выражения (+=, -=, *=, /=)

Если перед выражением поставить +=, -=, *= или /=, Unity применит операцию к текущему значению поля:

Это особенно полезно, когда объекты уже стоят на своих местах и нужно подвинуть их все разом на одинаковое расстояние.

Оператор степени ^

Вместо функции pow() в Unity используется оператор ^. Например, 2^3 вернёт 8.

Самые полезные функции Expression Evaluator

Вот полная таблица всех функций, которые поддерживает Expression Evaluator в Unity 6000.x:

Функция Описание Синтаксис Пример
L(a,b) Линейное распределение от a до b между всеми выделенными объектами L(мин, макс) L(0,10) — расставит объекты от 0 до 10 с равным шагом
R(a,b) Случайное значение в диапазоне от a до b (уникальное для каждого объекта) R(мин, макс) R(-5,5) — случайное число от -5 до 5
sin(x) Синус угла (в радианах). Возвращает значение от -1 до 1 sin(выражение) sin(L(0,2*pi))*3 — волна амплитудой 3
cos(x) Косинус угла (в радианах). Возвращает значение от -1 до 1 cos(выражение) cos(L(0,2*pi))*5 — координата X на окружности радиусом 5
tan(x) Тангенс угла (в радианах) tan(выражение) tan(L(0,pi/4))*3 — нарастающая кривая
sqrt(x) Квадратный корень числа sqrt(выражение) sqrt(L(0,25)) — корень от 0 до 5
^ Возведение в степень (заменяет pow) основание^степень L(0,3)^2 — парабола от 0 до 9
pi Константа π ≈ 3.14159. Можно писать в любом регистре pi 2*pi — полный оборот в радианах (≈ 6.28)
floor(x) Округление вниз (до ближайшего меньшего целого) floor(выражение) floor(L(0,9.9)) — целые числа от 0 до 9
ceil(x) Округление вверх (до ближайшего большего целого) ceil(выражение) ceil(L(0.1,5)) — целые числа от 1 до 5
round(x) Округление до ближайшего целого round(выражение) round(R(1,10)) — случайное целое от 1 до 10
% Остаток от деления (модуль) a%b L(0,20)%5 — значения циклически повторяются: 0,1,2,3,4,0,1…

Важно: функции L и R пишутся заглавными буквами. А sin, cos, tan, sqrt, floor, ceil, round — только строчными. Если перепутать регистр, выражение не сработает.

Шпаргалка: готовые выражения на все случаи

Ниже — большая таблица готовых выражений, которые можно копировать и вставлять прямо в Inspector. Сохраните эту страницу в закладки — она не раз пригодится!

Название Описание Поле : Выражение
Линия Равномерная линия по оси X Pos X : L(0,9)
Забор Линия с шагом 2 между объектами Pos X : L(0,18)
Лестница Ступеньки вверх по X и Y Pos X : L(0,9)
Pos Y : L(0,4.5)
Круг Объекты по окружности радиусом 5 Pos X : cos(L(0,2*pi))*5
Pos Z : sin(L(0,2*pi))*5
Спираль Два витка спирали вверх Pos X : cos(L(0,4*pi))*5
Pos Z : sin(L(0,4*pi))*5
Pos Y : L(0,10)
Волна Синусоида амплитудой 2 Pos X : L(0,9)
Pos Y : sin(L(0,2*pi))*2
Случайная позиция Разброс объектов по площадке Pos X : R(-10,10)
Pos Z : R(-10,10)
Случайный поворот Случайный угол по вертикали Rot Y : R(0,360)
Случайный масштаб Разный размер каждого объекта Scale X, Y, Z : R(0.5,2)
Арка Полукруг (от 0 до π) Pos X : cos(L(0,pi))*5
Pos Y : sin(L(0,pi))*5
Сдвиг всех на 5 Добавить 5 к текущей позиции Pos X : +=5
Удвоить масштаб Умножить текущий размер на 2 Scale X, Y, Z : *=2

Вывод

Expression Evaluator — это одна из тех маленьких встроенных возможностей Unity, которая может сэкономить вам массу времени. Вместо того чтобы двигать объекты по одному, вы можете расставить десятки предметов одним выражением — ровной линией, кругом, волной, спиралью или случайным образом. И для этого не нужно писать ни строчки кода!

Попробуйте прямо сейчас: создайте 10 кубов, выделите все и введите L(0,9) в поле Position X. Увидите результат — и уже не захотите расставлять объекты вручную. А если захотите разобраться глубже в Unity и начать создавать полноценные игры — загляните на бесплатный курс Unity Старт или посмотрите полную программу обучения.

Хочешь научиться делать игры на Unity?

Начни бесплатно с курса Unity Старт — установка, первый проект и первый скрипт, шаг за шагом.

Начать бесплатно