Теперь, когда вы создали основу игрового мира, нужно обставить его, добавив игровые объекты, с которыми Ruby сможет взаимодействовать.
Такие объекты, во-первых, служат украшением, создавая нужную атмосферу игры. А во-вторых, добавляют интерактивности и сложности в процесс.
В окне проекта перейдите в папку Assets > Art > Sprites > Environment и перетащите спрайт MetalCube в окно иерархии! Обратите внимание, что перетащить куб сразу на сцену проблематично, поэтому работайте именно с окном иерархии. Это связано с тем, что фон отрисован в виде Tilemap.
Используйте инструмент «Перемещение» и поместите куб на желаемое место на сцене:
Запустите игру и перемещайте своего персонажа по кубу!
На данный момент Ruby проходит сквозь металлический куб, не сталкиваясь с ним. Также он либо всегда находится поверх куба, либо за ним, в зависимости от того, что из них было нарисовано первым.
Сначала давайте исправим проблему с порядком отрисовки игровых объектов персонажа и куба. Ранее мы изменяли параметр Order In Layer , но здесь это неуместно. Инстинктивно игроки ожидают, что персонаж будет рисовать первым , когда он находится перед кубом, и вторым, когда он находится за кубом. Нам нужно как бы «подделать» перспективу.
Если перейти к техническим терминам, то нужно указать Unity отрисовывать игровые объекты в зависимости от их координаты по оси y (помните, что Y — это вертикальная ось, а X — горизонтальная).
Игровой объект, который находится ниже на экране (у него координата Y меньше), должен быть отрисован после игрового объекта,
расположенного выше на экране (у него координата Y больше). Причем сравнение координаты Y будет происходить в процессе игры, поскольку наш персонаж может изменять свое местоположение.
Чтобы указать Unity рисовать игровые объекты в зависимости от их координаты Y, выберите пункт меню Edit > Project Settings:
В меню категорий слева выберите пункт Graphics. В настройках камеры найдите поле «Transparency Sort Mode» (режим сортировки с прозрачностью), которое определяет порядок, в котором отрисовываются спрайты. Измените это значение с «Default» (по умолчанию) на «Custom Axis» (пользовательская ось):
Задайте следующие координаты оси сортировки прозрачности :
- х = 0
- у = 1
- z = 0
Таким образом мы укажем Unity рисовать спрайты на основе их положения по оси Y:
После внесения изменений просто закройте окно настроек проекта.
Запустите игру - персонаж должен быть нарисован за коробкой, когда она выше ее, и перед коробкой, когда она ниже. Вот так это будет выглядеть:
Если внимательно посмотреть, то момент, когда Ruby рисуется за коробкой наступает слишком раньше. Дело в том, что координата Y у спрайта может быть разная, если брать верхнюю границу спрайта и нижнюю. Поэтому для точного значения любой координаты используется специальная точка, которая называется Pivot (точка опоры), которая действует как «якорь» для спрайта. Это означает, что если игровой объект находится в точке ( 0,0 ), а Pivot установлен на голове персонажа, то в точке ( 0,0 ) будет нарисована голова. Если же точка опоры находится на ногах, то в точке ( 0,0 ) будут нарисованы ноги.
Если же вы будете поворачивать спрайт, то он будет вращаться именно вокруг Pivot. Например, при открывании двери, Pivot должен находиться не в центре спрайта двери, а со стороны, где находятся петли двери, чтобы дверь открывалась правильно.
Нам нужно изменить точки поворота спрайтов Ruby и MetalCube , чтобы они располагались там, где нужно, а именно по центру снизу.
Чтобы изменить Pivot для одиночного спрайта, в окне проекта перейдите в Assets > Art > Sprites > Environment и выберите спрайт MetalCube. В Инспекторе найдите поле Pivot и установите для этого параметра значение «Bottom»:
Таким образом можно изменить Pivot для одного спрайта, но, например, для Tileset такой способ не сработает. В этом случает изменить Pivot можно через редактор спрайтов. Разберем на примере спрайта Ruby, хотя для него первый способ тоже подойдет.
В окне проекта перейдите в Assets > Art > Sprites > Characters и выберите спрайт Ruby. В Инспекторе нажмите кнопку Sprite Editor, после чего откроется редактор спрайтов , который мы использовали в предыдущей части:
В центре спрайта расположен маленький синий кружок. Это текущее положение Pivot. Редактор спрайтов позволяет вам перетаскивать этот синий кружок в любое место спрайта вручную.
Но в дополнительном окне можно задать положение на одну из стандартных позиций. Установите в раскрывающемся списке Pivot значение Bottom Center и посмотрите куда переместится синий кружок. Не забудьте применить изменения, нажав на кнопку Apply вверху окна редактора спрайтов:
Сохраните изменение в проекте и запустите игру. Проверьте, что момент изменения отрисовки персонажа теперь происходит точно!