Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Unity_в_действии_Джозеф_Хокинг_Рус.pdf
Скачиваний:
83
Добавлен:
21.06.2022
Размер:
26.33 Mб
Скачать

114      Глава 5. Игра Memory на основе новой 2D-функциональности

и написание сценариев, которые затем присоединяются к объектам. Основной вид ресурсов, необходимых для создания двухмерной графики, называется спрайтом.

ОПРЕДЕЛЕНИЕ  Спрайты (sprites) представляют собой отображаемые непосредственно на экране двухмерные изображения, в то время как такие же изображения, отображаемые на поверхности трехмерных моделей, называются текстурами.

Импорт спрайтов по большей части напоминает импорт текстур (см. главу 4). С технической точки зрения спрайты представляют собой объекты в трехмерном пространстве, обладающие плоской поверхностью и ориентированные относительно оси Z. Так как все они повернуты в одном направлении, камеру можно нацелить прямо на них, в результате игрокам будут видимы только перемещения вдоль осей X и Y (то есть в плоскости).

В главе 2 мы обсудили координатные оси: для получения третьего измерения добавляется ось Z, перпендикулярная уже знакомым вам осям X и Y. Именно этими осями представлены два измерения, с которыми мы будем работать.

5.1. Подготовка к работе с двухмерной графикой

Мы собираемся воспроизвести классическую игру Memory. Опишем ее для тех, кто не знаком с правилами. Набор парных карт раскладывается рубашкой вверх. Расположение карт игроку неизвестно. Он может перевернуть любые две карты, пытаясь найти совпадающие. Если открытые карты не совпали, они переворачиваются назад, а игрок делает следующую попытку.

На рис. 5.1 показан макет этой игры; сравните его с планом, который мы составляли в главе 2.

 

С : 1

С —

К а а а

а а

 

Ка а а а а

а а

Рис. 5.1. Макет игры Memory

Обратите внимание, что на этот раз макет воспроизводит именно то, что увидит играющий (в то время как макет трехмерной сцены описывает пространство вокруг игрока и местоположение камеры, обеспечивающей возможность смотреть по сторонам).

5.1. Подготовка к работе с двухмерной графикой      115

Теперь, когда вы знаете, что мы собираемся создавать, пришло время приступить к делу!

5.1.1. Подготовка проекта

Первым делом нужно собрать и отобразить всю графику. Практически тем же способом, которым раньше создавался трехмерный демонстрационный ролик, мы начнем новую игру с помещения в сцену игровых объектов, после чего приступим к программированию их функциональности.

Это означает, что нужно создать все представленное на рис. 5.1: рубашку карт, их лицевую сторону, табло отображения количества набранных очков в одном углу игрового пространства и кнопку перезагрузки в другом. Кроме того, нам потребуется фон. Весь необходимый арсенал показан на рис. 5.2.

Р а а а

Ф

 

( а а а)

Л а а а (4 а• • а)

К а а а а

Рис. 5.2. Графические ресурсы для игры Memory

СОВЕТ  Как обычно, готовую версию проекта со всеми графическими ресурсами можно скачать со страницы www.manning.com/hocking сайта, посвященного этой книге. Вы можете скопировать предоставленные изображения и использовать их в своем проекте.

Соберите все требуемые изображения и создайте в Unity новый проект. В нижней части появившегося окна вы увидите пару кнопок, позволяющих переключаться между режимами 2D и 3D (рис. 5.3). В предыдущих главах вы работали только с трехмерной графикой, а так как именно этот режим создания проектов используется по умолчанию, мы не обращали на данную настройку внимания. Сейчас же нам нужно переключиться в режим работы с двухмерной графикой.

К а

а

а 2D

Рис. 5.3. Эти кнопки позволяют создавать как двухмерные, так и трехмерные проекты

116      Глава 5. Игра Memory на основе новой 2D-функциональности

РЕЖИМ 2D ДЛЯ РЕДАКТОРА И ВКЛАДКИ SCENE

Кнопка 2D/3D при создании нового проекта меняет настройки редактора Unity, которые при желании можно поменять вручную. Это режим работы самого редактора и режим отображения вкладки Scene. Последний определяет способ показа сцены в Unity; кнопка перехода между режимами находится в верхней части вкладки Scene.

К а а 2D

Кнопка, меняющая режим отображения на вкладке Scene

Для изменения режима работы редактора откройте меню Edit, наведите указатель мыши на строку Project Settings и выберите в дополнительном меню вариант Editor. Среди различных настроек на панели Inspector вы увидите раскрывающийся список Default Behavior Mode, в котором можно выбрать вариант 3D или 2D.

М а а а а а

Список Default Behavior Mode, открываемый командой Edit Project Settings Editor

В режиме 2D все изображения импортируются как спрайты; в главе 4 вы видели, что в обычном режиме они превращаются в текстуры. Кроме того, в режиме 2D сцены лишены настроек освещения. Оно в данном случае просто не требуется. Если когда-нибудь вы захотите удалить освещение из трехмерной сцены, удалите автоматически создаваемый источник света и отключите скайбокс (щелкните на маленьком кружочке рядом с полем выбора файла и выберите в списке вариант None).

Итак, мы создали новый проект, выбрав для него режим 2D. Пришло время добавить в сцену наши изображения.

5.1.Подготовка к работе с двухмерной графикой      117

5.1.2.Отображение двухмерных изображений (спрайтов)

Выполните импорт всех изображений, перетащив их на вкладку Project; убедитесь, что изображения импортированы как спрайты, а не как текстуры. Для этого выделите любую картинку и посмотрите настройки ее импорта на панели Inspector. Нас интересует поле Texture Type. Теперь перетащите спрайт table_top (наше фоновое изображение) с вкладки Project в пустую сцену. Сохраните сцену. Как и в случае с сеточными объектами, на панели Inspector окажется компонент Transform для данного спрайта; присвойте его полям значения 0, 0, 5 для изменения положения фонового изображения.

СОВЕТ  Есть еще одна настройка импорта, на которую следует обратить внимание, — это Pixels To Units. Так как в Unity раньше был трехмерный движок, к которому недавно добавили двухмерную графику, одна единица в Unity далеко не всегда соответствует одному пикселу изображения. Вы можете выбрать для этой настройки вариант 1:1, но лично я рекомендую оставить заданное по умолчанию значение 100:1 (так как физический движок при отображении варианта 1:1 работает не совсем корректно, а вариант, предлагаемый по умолчанию, обеспечивает лучшую совместимость с другим кодом).

АНИМИРОВАННЫЕ СПРАЙТЫ

Для данного проекта мы будем использовать только статичные изображения, но в двухмерных играх повсеместно распространены анимированные спрайты. Они создаются рисованием каждого кадра анимации и последующего воспроизведения полученной последовательности кадров вUnity.

Кадры можно импортировать в виде отдельных изображений, но обычно их выкладывают в виде одной картинки, которая называется листом спрайтов (sprite sheet). Листы спрайтов можно автоматически генерировать в Unity или пользоваться для их создания такими инструментами, как Texture Packer (см. приложение Б). При импорте листа в списке Sprite Mode настроек спрайта следует выбрать вариант Multiple.

На а , а а

а Unity

В а • а

а

а

а а Multiple

Импорт листа спрайтов в Unity

Лист спрайтов появляется на вкладке Project как один ресурс, но щелчок на расположенной сбоку стрелке раскрывает его и дает возможность увидеть отдельные спрайты. Вместо того чтобы перетаскивать спрайты в сцену по одному за раз, можно перетащить их группой.

118      Глава 5. Игра Memory на основе новой 2D-функциональности

Понять, почему мы приравняли к 0 координаты X и Y, несложно — наш спрайт должен заполнить весь экран, поэтому его нужно расположить в центре, но присвоение значения 5 координате Z может показаться странным. Разве для двухмерной графики имеют значение какие-либо координаты, кроме X и Y? Разумеется, только эти координаты определяют положение плоского объекта на экране; а координата Z вступает в дело, если нам нужно положить объекты друг на друга. Меньшие значения координаты Z заставляют спрайты располагаться ближе к камере, поэтому спрайты с такой координатой оказываются поверх прочих объектов (рис. 5.4). Соответственно, у спрайта, служащего фоном, значение координаты Z должно быть максимальным. Мы присвоили ему положительную координату Z, а все остальные объекты будут иметь нулевую или отрицательную координату Z.

П а а

 

 

Т а• ( а•) •

а

 

 

 

( а )

 

С а

 

 

 

О Z

Рис. 5.4. Расположение спрайтов относительно оси Z

Положение остальных спрайтов будет указываться с точностью до двух знаков после запятой из-за упоминавшегося ранее параметра Pixels To Units. Соотношение 100:1 означает, что 100 пикселов изображения соответствуют 1 измерительной единице в Unity; или, если посмотреть с другой стороны, 1 пиксел равен 0,01 единицы. Однако перед размещением в сцене дополнительных спрайтов настроим камеру.

СОЗДАНИЕ АТЛАСОВ

Как упоминалось во врезке «Анимированные спрайты», набор спрайтов можно превратить в одно изображение. В случае, когда таким способом комбинируются кадры двухмерной анимации, такой набор называется листом спрайтов. Но для подобной структуры существует еще один, более общий термин — атлас (atlas).

Листы спрайтов используют для хранения кадров анимации, атласы же зачастую применяются для статичных изображений. Дело в том, что они двумя способами оптимизируют производительность: во-первых, уменьшая количество пустого пространства в изображениях путем их плотной упаковки; во-вторых, уменьшая количество вызовов прорисовки (draw calls) видеокарты (каждое новое загруженное изображение означает дополнительную работу видеокарты).

Для создания атласов спрайтов применяются внешние инструменты (после импорта в настройках спрайта нужно выбрать вариант Multiple), и это прекрасно работает. Но в Unity существует упаков-