Найти тему

Unity 2D. Ruby's Adventure. Part 8

Теперь, когда вы создали основу игрового мира, нужно обставить его, добавив игровые объекты, с которыми 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
Изменение Pivot

Таким образом можно изменить Pivot для одного спрайта, но, например, для Tileset такой способ не сработает. В этом случает изменить Pivot можно через редактор спрайтов. Разберем на примере спрайта Ruby, хотя для него первый способ тоже подойдет.

В окне проекта перейдите в Assets > Art > Sprites > Characters и выберите спрайт Ruby. В Инспекторе нажмите кнопку Sprite Editor, после чего откроется редактор спрайтов , который мы использовали в предыдущей части:

Редактор спрайта
Редактор спрайта

В центре спрайта расположен маленький синий кружок. Это текущее положение Pivot. Редактор спрайтов позволяет вам перетаскивать этот синий кружок в любое место спрайта вручную.

Но в дополнительном окне можно задать положение на одну из стандартных позиций. Установите в раскрывающемся списке Pivot значение Bottom Center и посмотрите куда переместится синий кружок. Не забудьте применить изменения, нажав на кнопку Apply вверху окна редактора спрайтов:

Изменение Pivot
Изменение Pivot

Сохраните изменение в проекте и запустите игру. Проверьте, что момент изменения отрисовки персонажа теперь происходит точно!