Представьте: вам нужно расставить 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. В первую очередь это:
- Position (X, Y, Z) — позиция объекта в пространстве
- Rotation (X, Y, Z) — вращение объекта в градусах
- Scale (X, Y, Z) — масштаб объекта
Но не только 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 и равномерно распределяет значения между всеми выделенными объектами:
- Первый куб получил Position X = 0
- Второй куб — 1
- Третий — 2
- … и так далее …
- Десятый куб — 9
Формула внутри: каждый объект получает значение a + (index / (count - 1)) * (b - a), где index — порядковый номер объекта (с нуля), а count — общее количество выделенных объектов.
Создаём интересные расстановки
Линия — это только начало. Давайте пойдём дальше и попробуем более интересные варианты. Для каждого примера выделяйте все 10 кубов и вводите выражения в нужные поля.
Лестница
Чтобы создать лестницу, нужно сдвигать объекты и по горизонтали, и по вертикали одновременно:
- Position X:
L(0,9) - Position Y:
L(0,4.5)
Каждый следующий куб сдвигается вправо на 1 и вверх на 0.5 — получается ровная лестница.
Забор
Забор — это линия с увеличенным расстоянием между объектами:
- Position X:
L(0,18)
Теперь между столбами расстояние ровно 2 единицы. Если хотите другой шаг — просто измените второе число. Например, L(0,27) даст шаг в 3 единицы.
Волна
Вот тут становится по-настоящему интересно. Функция sin() создаёт волнообразное движение:
- Position X:
L(0,9) - Position Y:
sin(L(0,2*pi))*2
Объекты распределяются по оси X линией, а по оси Y каждый получает значение синуса — и вместе они образуют красивую волну. Множитель *2 задаёт высоту (амплитуду) волны.
Круг
Круг строится из комбинации sin() и cos(). Чтобы расставить 10 объектов по окружности радиусом 5:
- Position X:
cos(L(0,2*pi))*5 - Position Z:
sin(L(0,2*pi))*5
Каждый объект получает свой угол от 0 до 2π (полный оборот), а cos и sin переводят этот угол в координаты X и Z на окружности.
Заметка: функции sin() и cos() работают в радианах, а не в градусах. Полный круг = 2π ≈ 6.28 радиан. В Unity можно написать 2*pi — константа pi распознаётся автоматически.
Спираль
Спираль — это круг, который одновременно поднимается вверх:
- Position X:
cos(L(0,4*pi))*5 - Position Y:
L(0,10) - Position Z:
sin(L(0,4*pi))*5
Здесь 4*pi — это два полных оборота. Одновременно объекты поднимаются с 0 до 10 по оси Y. Получается красивая спираль из двух витков.
Случайная позиция
Функция R(a,b) даёт каждому объекту случайное значение в указанном диапазоне:
- Position X:
R(-10,10) - Position Z:
R(-10,10)
Объекты разбросает по площадке 20×20 в случайном порядке — отлично подходит для деревьев, камней, декора.
Случайный масштаб
Чтобы объекты выглядели разнообразнее, задайте им случайный размер:
- Scale X:
R(0.5,2) - Scale Y:
R(0.5,2) - Scale Z:
R(0.5,2)
Внимание: каждое поле получает своё случайное значение. Если вы введёте R(0.5,2) по отдельности в X, Y и Z — объект растянется неравномерно. Чтобы масштаб был одинаковый по всем осям, введите выражение в одно поле, запомните результат и скопируйте вручную — или используйте одинаковый Uniform Scale, если он доступен.
Случайный поворот
Идеально для декоративных объектов типа камней или кустов:
- Rotation Y:
R(0,360)
Каждый объект повернётся на случайный угол вокруг вертикальной оси.
Арка
Полукруг — это половина круга (от 0 до π):
- Position X:
cos(L(0,pi))*5 - Position Y:
sin(L(0,pi))*5
Получается арка из объектов в плоскости XY.
Дополнительные возможности
Арифметика в одном объекте
Expression Evaluator удобен даже без мульти-выделения. Если вам нужна позиция «половина от 7», просто впишите 7/2. Нужен сдвиг на треть единицы? Пишите 1/3. Это работает быстрее, чем доставать калькулятор.
Составные выражения (+=, -=, *=, /=)
Если перед выражением поставить +=, -=, *= или /=, Unity применит операцию к текущему значению поля:
+=2— прибавить 2 к текущему значению*=2— удвоить текущее значение/=3— разделить текущее значение на 3
Это особенно полезно, когда объекты уже стоят на своих местах и нужно подвинуть их все разом на одинаковое расстояние.
Оператор степени ^
Вместо функции 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))*5Pos Z : sin(L(0,2*pi))*5 |
| Спираль | Два витка спирали вверх | Pos X : cos(L(0,4*pi))*5Pos Z : sin(L(0,4*pi))*5Pos 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))*5Pos 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 Старт или посмотрите полную программу обучения.