КулЛиб - Классная библиотека! Скачать книги бесплатно
Всего книг - 712812 томов
Объем библиотеки - 1401 Гб.
Всего авторов - 274559
Пользователей - 125076

Новое на форуме

Новое в блогах

Впечатления

Влад и мир про Шенгальц: Черные ножи (Альтернативная история)

Читать не интересно. Стиль написания - тягомотина и небывальщина. Как вы представляете 16 летнего пацана за 180, худого, болезненного, с больным сердцем, недоедающего, работающего по 12 часов в цеху по сборке танков, при этом имеющий силы вставать пораньше и заниматься спортом и тренировкой. Тут и здоровый человек сдохнет. Как всегда автор пишет о чём не имеет представление. Я лично общался с рабочим на заводе Свердлова, производившего

  подробнее ...

Рейтинг: 0 ( 0 за, 0 против).
Влад и мир про Владимиров: Ирландец 2 (Альтернативная история)

Написано хорошо. Но сама тема не моя. Становление мафиози! Не люблю ворьё. Вор на воре сидит и вором погоняет и о ворах книжки сочиняет! Любой вор всегда себя считает жертвой обстоятельств, мол не сам, а жизнь такая! А жизнь кругом такая, потому, что сам ты такой! С арифметикой у автора тоже всё печально, как и у ГГ. Простая задачка. Есть игроки, сдающие определённую сумму для участия в игре и получающие определённое количество фишек. Если в

  подробнее ...

Рейтинг: 0 ( 0 за, 0 против).
DXBCKT про Дамиров: Курсант: Назад в СССР (Детективная фантастика)

Месяца 3-4 назад прочел (а вернее прослушал в аудиоверсии) данную книгу - а руки (прокомментировать ее) все никак не доходили)) Ну а вот на выходных, появилось время - за сим, я наконец-таки сподобился это сделать))

С одной стороны - казалось бы вполне «знакомая и местами изьезженная» тема (чуть не сказал - пластинка)) С другой же, именно нюансы порой позволяют отличить очередной «шаблон», от действительно интересной вещи...

В начале

  подробнее ...

Рейтинг: +1 ( 1 за, 0 против).
DXBCKT про Стариков: Геополитика: Как это делается (Политика и дипломатия)

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

Не собирался же ее брать изначально поскольку (давным давно до этого) после прочтения одной "явно неудавшейся" книги автора, навсегда зарекся это делать... Но потом до меня все-таки дошло что (это все же) не "очередная злободневная" (читай

  подробнее ...

Рейтинг: +1 ( 1 за, 0 против).
DXBCKT про Москаленко: Малой. Книга 3 (Боевая фантастика)

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

В общем герою (лишь формально вникающему в разные железки и нейросети)

  подробнее ...

Рейтинг: +1 ( 1 за, 0 против).

Разработка игры в Unity. С нуля и до реализации [Дмитрий В. Денисов] (pdf) читать онлайн

Книга в формате pdf! Изображения и текст могут не отображаться!


 [Настройки текста]  [Cбросить фильтры]

Дмитрий Денисов
Разработка игры в Unity.
С нуля и до реализации

«ЛитРес: Самиздат»
2021

Денисов Д. В.
Разработка игры в Unity. С нуля и до реализации /
Д. В. Денисов — «ЛитРес: Самиздат», 2021

ISBN 978-5-532-94186-1
Это руководство по разработке игры, в котором шаг за шагом описывается
процесс ее создания с применением языка программирования C# и среды
разработки Unity. Материал книги составлен таким образом, что практически
каждый ваш шаг будет сопровождать скриншот с понятным описанием
последовательности действий. Вы научитесь создавать игровые объекты и
описывать логику их работы, создавать элементы ландшафта, настраивать
камеру, игровые сцены, графический интерфейс, спецэффекты и звуковые
эффекты. Материал практикума завершается публикацией игры на открытой
онлайн платформе. После каждой главы в книге даны рекомендации по
возможным модификациям игры таким образом, чтобы она получилась не
похожей на ту, которую создаем мы. Издание предназначено для тех кто
только знакомится с основной разработки игры в Unity. Неважно, как давно
вы знакомы с Unity, это руководство, под силу выполнить любому человеку с
базовыми навыками работы на компьютере.До встречи за пределами матрицы!
Welcome.

ISBN 978-5-532-94186-1

© Денисов Д. В., 2021
© ЛитРес: Самиздат, 2021

Д. В. Денисов. «Разработка игры в Unity. С нуля и до реализации»

Содержание
Введение
Структура практикума и как с ним работать
Благодарности
Об авторе
Сообщество
Часть 1. Установка необходимого программного обеспечения
Введение
1.1 Установка среды разработки
1.2 Установка редактора кода
1.3 Программа “Hello World” и принципы работы в Unity
Выводы
Часть 2. Создание игрового прототипа
Введение
2.1 Создание проекта и первой сцены
2.2 Импорт игровых персонажей
2.3 Добавление дракона с анимацией
2.4 Создание игрового объекта – драконьего яйца
2.5 Создание игрового объекта – энергетического щита
2.6 Настройка камеры и игровой области
Выводы
Часть 3. Программирование игровых объектов
Введение
3.1 Скрипт-файл EnemyDragon
3.2 Скрипт-файл DragonEgg
3.3 Скрипт-файл DragonPicker
3.4 Скрипт-файл EnergyShield
Выводы
Часть 4. Создание графического интерфейса пользователя
Введение
4.1 Создание счетчика очков
4.2 Добавление очков за пойманные объекты
4.3 Уведомление о том, что яйцо DragonEgg не было поймано
4.4 Уничтожение EnergyShield после потери драконьего яйца
DragonEgg
Выводы
Часть 5. Доработка сцен и создание игрового меню
Введение
5.1 Доработка локации в сцене _1Scene
5.2 Создание стартовой сцены
5.3 Создание игрового меню
5.4 Пауза и возвращение в главное меню
Выводы
Часть 6. Добавление звуковых эффектов
Введение
6.1 Добавление фоновых звуковых файлов

7
9
10
11
12
13
13
14
20
24
40
41
41
43
46
49
56
62
66
69
70
70
71
82
95
98
102
103
103
104
107
110
114
118
119
119
120
125
137
155
161
162
162
163
4

Д. В. Денисов. «Разработка игры в Unity. С нуля и до реализации»

6.2 Добавление звуковых эффектов при взаимодействии с
объектами
Выводы
Часть 7. Подготовка приложения к публикации
Введение
7.1 Структурирование файлов проекта
7.2 Сборка проекта и выгрузка игры на сайт
Заключение

167
174
175
175
176
187
195

5

Д. В. Денисов. «Разработка игры в Unity. С нуля и до реализации»

Дмитрий Денисов
Разработка игры в Unity.
С нуля и до реализации

Посвящается моей любимой жене Насте за ее ум и веру в наши победы, дочери Вике
и сыну Паше за их позитив и любовь. Моим родителям Вадиму и Елене, маме моей жены
Татьяне, за их заботу и поддержку.
I Trust in God

6

Д. В. Денисов. «Разработка игры в Unity. С нуля и до реализации»

Введение
Компьютерные игры давно стали частью нашей культуры, через них можно донести
мысль до широких масс, они развивают интеллект, реакцию и позволяют пережить целый
спектр самых разнообразных эмоций.
В этой книге дано полноценное руководство по разработке игры на Unity с нуля. Без
лишней воды и теории, только практика, потому что лучше один раз сделать что-то самостоятельно (даже по руководству), чем прочитать множество гайдов и посмотреть сотни видео
на YouTube, но ничего не сделать. В отличие от большого количество книг по разработке и
программированию, в этой вы найдете только ту информацию, которая непосредственно относится к созданию вполне конкретного игрового прототипа.
Это значит, что в книге не будет раздела по основам разработки на C# – языке программирования, который используется для написания сценариев в Unity. С другой стороны, вы
получите всю информацию по созданию необходимых скриптов в создаваемой вами игре, а
в приведенных листингах будут даны подробные комментарии. Это позволит сконцентрироваться на изучении только тех функций среды разработки, или возможностях языка программирования, которые нужны для выполнения поставленной задачи.
Автор убежден, что важнее заложить базовые знания, дав реализовать свой первый проект. А копнуть глубже и разобраться в тонкостях поможет множество других гайдов, статей,
учебников и руководств из официальной документации, “разбросанной” по просторам интернета.
В практикуме предлагается разработать прототип игры «Dragon Picker», под который
может быть адаптировано достаточно большое количество игровых механик и процессов.
Смысл работы прототипа достаточно прост – нужно ловить различные предметы. Практикум
разбит на основные разделы, в каждом из которых будут описаны основные этапы разработки
игры, буквально пара абзацев теории, после чего мы сразу перейдем к разработке (программированию). Вид стартовой страницы готовой реализации приведен на рисунке ниже.

Цель практикума заключается в том, чтобы не только дать информацию о разработке
прототипа, но и донести до читателя основные подходы к разработке игр такого типа. Другими
7

Д. В. Денисов. «Разработка игры в Unity. С нуля и до реализации»

словами, поняв, как создается Picker, вы без труда сможете сделать свою игру, непохожую на
“исходный” прототип, но со схожей механикой. В конце каждой главы будут даны рекомендации по вариантам изменения и доработки базового прототипа. Следуя им вы сможете не только
глубже изучить работу с Unity, но и создать свою уникальную игру на основе предложенной
базовой версии.
Иногда, по ходу выполнения практикума, будет предложено несколько вариантов реализации какой-либо задачи. Это сделано преднамеренно, так как гибкость выбора решения в
различных ситуациях является крайне важным навыком для разработчика. Изучая и тестируя
различные способы реализации одной и той же задачи, можно достичь наиболее оптимизированной работы игры.
По ходу изучения материалов практикума вы увидите, что программный код приводится
в виде скриншота и в виде текста (листинга) одновременно. По убеждению автора эта избыточность необходима для простоты восприятия того, что требуется сделать. С одной стороны –
вы сможете скопировать код пряма из материалов книги, с другой – будет приведен скриншот
из среды разработки с удобным для восприятия представлением структуры кода.
Материалы книги не претендуют на гениальность изложенных подходов и решений в
области разработки игр, однако они однозначно дадут вам базовые представления о порядке
разработки компьютерной игры на Unity.
В практикуме показано, как создать собственную игру по принципу конструктора,
используя бесплатно доступные текстур-паки, немного строк кода и фантазии. В любом случае процесс создания игры крайне сложен. Достаточно редки случаи, когда один разработчик
способен создать достойную реализацию с приятной графикой и звуковыми эффектами. Но
мы попробуем.

8

Д. В. Денисов. «Разработка игры в Unity. С нуля и до реализации»

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

9

Д. В. Денисов. «Разработка игры в Unity. С нуля и до реализации»

Благодарности
При подготовке материалов данного практикума мне помогали несколько человек. Им
всем я выражаю признательность и благодарю за потраченное время на поиск и устранение
недочетов.
Фадеев Виталий, ведущий инженер платформы виртуализации VMware ПАО Сбербанк.
Виталий принимал участие в подготовке разделов, связанных с установкой необходимого программного обеспечения и выгрузки игры на внешнюю платформу. Его рекомендации были
ценны и позволили сделать пошаговые инструкции более доступнымми для понимания начинающим разработчикам игр.
Коровин Илья, Junior C#/Unity программист. Илья проделал весь практикум в самой
сырой версии от начала и до конца, дал ряд ценных рекомендаций по объяснению некоторых
важных функций, реализованных в разрабатываемой игре.
Тагатов Альберт, UX/UI дизайнер, графический дизайнер, да и просто хороший, отзывчивый человек. Альберт сделал так, чтобы печатный экземпляр книги было приятно держать в
руках, а электронная версия притягивала своим внешним видом. Благодарю Альберта за разработку прекрасной обложки для издания, с которым вы работаете.

10

Д. В. Денисов. «Разработка игры в Unity. С нуля и до реализации»

Об авторе
Автор просто человек, который любит Unity, делать игры и играть в чужие игры. Какихто больших наград и достижений пока не имеет, но очень к этому стремится. Делает самую
разную работу, начиная с создания междисциплинарных физических моделей в программном
пакете ANSYS, заканчивая разработкой игр на Unity и работой в должности доцента Уральского Федерального Университета. Стремится объять необъятное и объяснить как можно большему количеству людей, что IT-сфера это просто и интересно, а самое главное – она меняет
наш мир с невероятной скоростью.

11

Д. В. Денисов. «Разработка игры в Unity. С нуля и до реализации»

Сообщество
В этом разделе приведены некоторые ссылки на внешние ресурсы, которые будут полезны
при изучении принципов разработки игры на Unity и станут хорошим дополнением к материалам, данным в этом практикуме.
Сайт автора: https://sciencepub.ru/unity-book/. На сайте размещена информация о книге,
на нем вы найдете ссылки на ресурсы, которые использовались при создании игры, а также
исходные файлы к игре. Если после издания будут обнаружены неточности в описании или
опечатки, то о них будет также сообщаться на указанном сайте.
Telegram-канал: https://t.me/EpicUnity. В телеграмме можно задать вопросы автору, или
просто обсудить реализацию игры в кругу единомышленников.
YouTube-канал: https://www.youtube.com/sciencepub. На Youtube-канале со временем
появится play-лист с разбором дополнительных заданий, которые даются в конце каждого раздела. Пока что вы найдете на канале достаточно много увлекательных видеоматериалов научнопопулярной направленности.
GitHub: https://github.com/Den1sovDm1triy. В отдельном репозитории вы найдете исходники к игре.
SIMMER.io: https://simmer.io/@Den1sov. Мини-игра, разработанная в этом практикуме
размещена на web-портале, ссылка указана на профиль автора.
Свои отзывы и предложения, а также информацию о найденных неточностях и опечатках
вы можете отправить на личный e-mail автора: mr.denisov.dv@gmail.com.
Посмотреть на готовую реализацию игры Dragon Picker можно по ссылке: https://
simmer.io/@Den1sov/dragon-picker.

12

Д. В. Денисов. «Разработка игры в Unity. С нуля и до реализации»

Часть 1. Установка необходимого
программного обеспечения
Введение
Чтобы создать игру нужны инструменты разработки. В качестве основного инструмента мы будем использовать Unity, а для написания программного кода понадобится среда
разработки, например Microsoft Visual Studio. Unity – межплатформенная среда разработки
компьютерных игр, которую выпустила и активно продвигает американская компания Unity
Technologies. Unity позволяет создавать приложения, работающие на более чем 25 различных
платформах, включающих персональные компьютеры, игровые консоли, мобильные устройства, интернет-приложения и другие.
В этом разделе вы:
– Пройдете регистрацию на портале Unity.com и получите свой Unity ID.
– Скачаете Unity Hub и установите среду разработки Unity.
– Скачаете Microsoft Visual Studio.
– Создадите тестовый проект, в котором проверите корректность работы скачанного и
установленного программного обеспечения.

13

Д. В. Денисов. «Разработка игры в Unity. С нуля и до реализации»

1.1 Установка среды разработки
Как было указано ранее, Unity – это среда разработки компьютерных игр и мультимедийных приложений. Для того чтобы начать с ней работу необходимо выполнить действия,
описанные в пунктах ниже.
1. Откройте официальную страницу Unity (unity.com) в браузере. Вы сразу попадете на
главную страницу компании Unity, где можете ознакомиться с актуальными новостями, поддерживаемыми платформами и предстоящими релизами продуктов компании.
2. На странице найдите кнопку Get Started и нажмите ее:

3. На открывшейся странице вам будет предложено выбрать план подписки. У компании
Unity Technologies очень гибкая система, благодаря этому каждый разработчик может подобрать тарифный план под свои задачи. До тех пор, пока доход с вашего проекта за последние
12 месяцев не превышает $100 000 вы можете выбирать подписку Individual Personal (вкладка
Individual – Personal – Get Started):

14

Д. В. Денисов. «Разработка игры в Unity. С нуля и до реализации»

4. После этого вы попадете на страницу Unity Store. Если вы являетесь новым пользователем, нажмите кнопку Start Here:

5. Далее появится всплывающее диалоговое окно, на котором нужно принять лицензионное соглашение. Нажмите кнопку Agree and download.
6. Начнется автоматическая загрузка файла UnityHubSetup.
7. После завершения загрузки файла, запустите его. Начнется процесс установки приложения Unity Hub. Unity Hub – это десктопное приложение, спроектированное для удобной
работы пользователей. Из него происходит доступ к экосистеме игрового движка Unity, работа
с менеджером проектов созданных в Unity, управление лицензиями и установка дополнительных компонентов.
15

Д. В. Денисов. «Разработка игры в Unity. С нуля и до реализации»

8. После завершения установки запустите Unity Hub. При первом запуске система предложит вам войти или создать свой аккаунт. Это можно сделать также при помощи популярных
социальных сетей:

9. После того, как вы зашли в свой аккаунт Unity, откроется окно приложения Unity
Hub. В центральной части приложения указаны проекты (Projects), с которыми вы работаете.
Если вы используете Unity впервые, то это окно у вас должно быть пустым, однако очень скоро
в нем начнут появляться созданные вами проекты, и Unity Hub будет выглядеть примерно
следующим образом:

16

Д. В. Денисов. «Разработка игры в Unity. С нуля и до реализации»

10. Оставаясь в Unity Hub нажмите кнопку Installs в левом меню и после того, как
перейдете в новое окно, нажмите кнопку Add. После этого откроется окно выбора версий
Unity для установки. Для начинающих пользователей лучше устанавливать рекомендованный
релиз (Recommended Release) последней версии (как правило выбран по умолчанию). В книге
используется версия Unity 2020.3.14f1:

11. После выбора последней рекомендованной версии, нажмите кнопку Next.
12. В следующем окне нам предлагается выбрать компоненты редактора (модули).
Модули также удобно разделены по платформам, на которые мы хотим создавать игры. Мы
будем делать игру для выгрузки на Web-сервис, поэтому установите дополнительно модуль
WebGL (поставьте флажок напротив модуля с таким названием). Кроме этого, Unity позволяет
17

Д. В. Денисов. «Разработка игры в Unity. С нуля и до реализации»

делать игры под самые разные платформы. Например, если в дальнейшем вы захотите сделать
игру под мобильное устройство, то все что вам потребуется – это установить модули Android
Build Support и iOS Build Support:

13. Жмем кнопку Next, на следующей странице принимаем соглашение, поставив
галочку. Жмем Done и ожидаем скачивания и установки редактора. На компьютере можно
держать несколько разных версий Unity (см. пример ниже):

14. На этом процесс установки закончен.
18

Д. В. Денисов. «Разработка игры в Unity. С нуля и до реализации»

15. Если в дальнейшем вам понадобятся другие версии среды разработки Unity (например, вы найдете и захотите посмотреть готовые проекты, сделанные под более ранние версии
среды разработки), – то вы всегда сможете открыть Unity Hub, перейти во вкладку Install и
скачать недостающие версии Unity и модули:

Таким образом, Unity Hub является своего рода “точкой старта”, в которой происходит создание новых проектов (вкладка Projects), установка различных версий Unity (вкладка
Installs) и т.д. Отмечу, что в Unity Hub можно держать несколько различных версий Unity, если
у вас есть потребность работы с проектами, разработанными на ранних версиях.
По итогу пошагового выполнения всех указаний из данного раздела, у вас должна быть
установлена среда разработки Unity. Также у вас должна быть создана учетная запись на сайте
Unity.com. Не теряйте ее, так как через эту учетную запись происходит синхронизация проектов на вашем компьютере и на официальном сайте Unity. Кроме того, учетная запись нужна
для работы с некоторыми полезными ресурсами, такими как Asset Store (подробнее об этом
см. в разделе 2.2 Импорт игровых персонажей из Unity Asset Store).

19

Д. В. Денисов. «Разработка игры в Unity. С нуля и до реализации»

1.2 Установка редактора кода
Несмотря на то, что Unity является полноценной средой разработки компьютерных игр,
вам понадобится отдельное приложение для работы с кодом (для написания скриптов на языке
программирования). Написать код для Unity можно даже в обычном блокноте, главное, чтобы
он был написан корректно на языке C#. Однако, удобнее использовать специализированные
среды разработки. Мы будем использовать Microsoft Visual Studio, установить которую можно
как стандартное приложение в системе Windows, либо с помощью Unity Hub.
Воспользуйтесь одним из двух предложенных способов установки среды для работы с
кодом. Чтобы перейти к скачиванию и установке Microsoft Visual Studio, выполните следующие
действия:
1. Перейдите на сайт https://visualstudio.microsoft.com/ru/
2. На сайте вы увидите несколько ссылок на скачивание среды разработки под различные операционные системы. Ниже будет показан пример установки для Windows. Выберите из
выпадающего списка Download Visual Studio и выберите версию Community 2019:

3. После этого автоматически начнется скачивание файла установки. После завершения
скачивания запустите скачанный установочный файл.
4. Запустится Visual Studio Installer, который некоторое время будет скачивать необходимые файлы. Далее откроется окно с выбором компонентов, необходимых для установки:

20

Д. В. Денисов. «Разработка игры в Unity. С нуля и до реализации»

5. Среди множества компонентов найдите “Разработка игр с помощью Unity”:

6. После выбора необходимого компонента нажмите “Установить”. Скачивание и установка займет определенное время, которое зависит от производительности вашего компьютера
и скорости Интернет-соединения.
7. После завершения установки, возможно, потребуется перезагрузка компьютера (в этом
случае рекомендуется согласиться на столь заманчивое предложение и перезагрузиться).
8. После перезагрузки запустите Visual Studio. При первом запуске среда разработки
предложит вам выполнить вход под своей учетной записью (см. рисунок ниже слева) и выбрать
вид темы (см. рисунок ниже справа):

21

Д. В. Денисов. «Разработка игры в Unity. С нуля и до реализации»

9. Указанные в предыдущем пункте действия необходимо сделать только один раз, далее
среда разработки будет запускаться без каких-либо дополнительных всплывающих окон.
10. На этом установку Visual Studio можно считать законченной. Если среда разработки
открыта, то вы можете ее просто закрыть. В дальнейшем мы будем открывать проекты напрямую из Unity и использовать среду разработки Visual Studio для работы с кодом.
11. Установить Visual Studio можно также из Unity Hub. Чтобы это сделать выберите
вкладку Installs – Add (можете пропустить этот и следующие два шага, если среда разработки
уже была установлена):

22

Д. В. Денисов. «Разработка игры в Unity. С нуля и до реализации»

12. В появившемся окне сначала предлагается выбрать нужную версию Unity (окно Add
Unity Version), а если нажать кнопку Next, то при переходе на вторую страницу (Add modules
to your install) можно выбрать установку Visual Studio:

13. Поставьте галочку напротив Microsoft Visual Studio Community 2019. Эта опция
доступна как для iOS, так и для Windows. Обратите внимание, если у вас уже установлена
Visual Studio, она не будет отображаться в качестве опции с дополнительной установкой.
Нажмите Done, начнется скачивание и установка в автоматическом режиме среды разработки
Visual Studio. Это программное обеспечение вы будете использовать для редактирования кода.

23

Д. В. Денисов. «Разработка игры в Unity. С нуля и до реализации»

1.3 Программа “Hello World” и принципы работы в Unity
Проверить корректность работы всех установленных программных пакетов можно, написав простейшую программу. По традиции принято создавать программу, которая выводит
сообщение Hello World. В нашем примере мы не просто выведем сообщение, но и научимся
взаимодействовать с объектами в среде Unity.
1. Чтобы создать первый проект на Unity, откройте Unity Hub и перейдите во вкладку
Project. Нажмите New чтобы перейти в окно создания нового проекта:

2. В появившемся новом окне выберите тип проекта – 3D, дайте имя новому проекту,
например 01_HelloWorld. Проверьте путь к папке, в которой будет создан проект (здесь скорее
важно, чтобы вы осознанно указали папку для проекта и не потеряли его в дальнейшем). После
этого нажмите Create:

24

Д. В. Денисов. «Разработка игры в Unity. С нуля и до реализации»

3. Проект будет создан и открыт в новом окне Unity. На рисунке ниже показано, как
выглядит запущенная среда разработки Unity, в данный момент вам может показаться, что она
содержит довольно большое количество разнообразных и непонятных окон, но в дальнейшем
мы разберемся в том, как они устроены и за что отвечают отдельные элементы среды разработки:

4. Возможно при первом запуске Unity появится сообщение о необходимости обновить
встроенный Visual Studio Editor до последней версии (сообщение с желтым восклицатель25

Д. В. Денисов. «Разработка игры в Unity. С нуля и до реализации»

ным знаком внизу среды разработки). В этом случае перейдите во вкладку Window – Package
Manager, выберите Visual Studio Editor и нажмите Update:

5. Создадим новый C# Script-файл с простой командой, которая выводит сообщение
“Hello World”. Для этого на панели Project перейдите в папку Assets, в данный момент в ней
находится только одна папка с названием Scenes:

6. Кликните правой кнопкой мыши внутри папки Assets и выберите из контекстного
меню Create – C# Script, как показано ниже:

26

Д. В. Денисов. «Разработка игры в Unity. С нуля и до реализации»

7. Назовите созданный скрипт-файл HelloWorld. Содержимое папки Assets после этого
должно выглядеть так, как показано на рисунке ниже:

8. Откройте файл HelloWorld.cs, кликнув по нему дважды. Файл автоматически откроется в Visual Studio Community 2019. Содержимое файла и вид среды разработки показаны на
рисунке ниже:

27

Д. В. Денисов. «Разработка игры в Unity. С нуля и до реализации»

9. В дальнейшем мы будем приводить программный код и в виде скриншотов, и в виде
листинга (текстом). Его будет удобнее читать, а в случае использования электронной версии
издания – копировать и вставлять части кода в свой проект. В дальнейшем мы разберемся с
каждой строкой приведенного выше программного кода. Пока лишь обратите внимание на то,
что внутри кода содержится два метода: void Start() и void Update().
– void Start() – это метод, который запускается при старте игры в Unity. Это значит, что
команды, написанные внутри фигурных скобок этого метода, отработают один раз при запуске
сцены в Unity.
– void Update () – это метод, который запускается каждый кадр на сцене. Другими словами, в метод Update() следует писать тот функционал, который требует регулярного обновления в процессе игры.
10. Добавьте строку кода, которая будет выводить сообщение «Hello World!11!». Для
этого внутрь фигурных скобок метода void Start(), как показано в листинге ниже (листинг приводится целиком), нужно написать команду print:
// Start Code
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public class HelloWorld : MonoBehaviour
{
void Start()
{
print("Hello World!11!");
}
void Update()
{
}
28

Д. В. Денисов. «Разработка игры в Unity. С нуля и до реализации»

}
// End Code
Листинг дублируется ниже в виде скриншота из MS Visual Studio .

11. Скрипт-файл с названием HelloWorld.cs написан. Однако, чтобы он начал работать,
нам следует его подключить к одному из игровых объектов внутри сцены Unity. Давайте создадим такой объект, например, простейший куб.
12. Чтобы создать игровой объект “Куб”, на верхней панели быстрого доступа в среде
Unity выберите GameObject – 3D Object – Cube:

29

Д. В. Денисов. «Разработка игры в Unity. С нуля и до реализации»

13. Таким образом, на сцене появится новый игровой объект:

14. Чтобы подключить скрипт HelloWorld.cs к объекту Cube, можно просто перетащить
(зажав левую кнопку мыши) скрипт-файл на куб.
30

Д. В. Денисов. «Разработка игры в Unity. С нуля и до реализации»

15. Теперь, если выделить объект Cube, кликнув по нему левой кнопкой мыши, то можно
увидеть, что в правой части среды разработки (окно Inspector) к кубу подключился файл
HelloWorld.cs (Script-файл):

31

Д. В. Денисов. «Разработка игры в Unity. С нуля и до реализации»

16. Теперь, можно запустить сцену и проверить ее работу. Для этого нужно нажать кнопку
Run в верхней центральной части среды разработки.

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

32

Д. В. Денисов. «Разработка игры в Unity. С нуля и до реализации»

Вместо функции print, можно использовать функцию Debug.Log(), которая является
частью движка Unity. Отличие функции Debug.Log() от функции print() заключается в том,
что print() не позволяет увидеть какую-либо информацию, после сборки проект. То есть
print() выводит информацию только в консоль среды разработки Unity, тогда как функция
Debug.Log() выводит сообщение в специальный файл в папке проекта при запуске готовой
игры, содержимое которого потом можно просмотреть. По сути обе эти функции делают
одно и тоже, но рекомендуют использовать именно Debug.Log(). В качестве эксперимента вы
можете заменить функцию print(“Hello World”) в листинге выше на функцию Debug.Log(“Hello
World”).
Обычным сообщением в окне консоли сложно удивить, особенно если речь идет о разработке игры. Поэтому давайте добавим еще немного функций для наглядности. Следует отметить, что многие моменты, связанные с разработкой игры, на себя берет Unity без необходимости написания какого-либо функционала. Иногда даже очень сложный функционал в игре
можно реализовать просто настройками внутри среды разработки Unity. Продемонстрируем
это на примере ниже.
18. Сделаем так, чтобы созданный 3D объект Cube при запуске сцены падал вниз. Для
этого выделите объект Cube (клик левой кнопкой мыши в окне Hierarchy), после этого в правой
части среды разработки станет активно окно Inspector:

33

Д. В. Денисов. «Разработка игры в Unity. С нуля и до реализации»

19. Содержание окна Inspector зависит от типа выбранного объекта. В нем содержатся
свойства объекта, его параметры, подключаемые Script-файлы и т. д. Нажмите в нижней части
окна Inspector кнопку Add Component:

20. После этого появится список с перечнем компонентов, которые могут быть подключены к выбранному объекту Cube. Найдите с помощью поиска компонент Rigidbody и кликните по нему левой кнопкой мыши так, чтобы он добавился в окно Inspector.

34

Д. В. Денисов. «Разработка игры в Unity. С нуля и до реализации»

21. Rigidbody – это механическое свойство объекта, определенное в базовом движке
Unity. Другими словами, если назначить этот компонент объекту, то он начнет вести себя в
соответствии с механикой абсолютно твердого тела. Запустите сцену еще раз (нажмите Run) и
убедитесь, что теперь объект Cube начинает падать вниз.
22. Создадим еще один объект – плоскость (Plane), которая будет ограничивать падение
куба за пределы начальной сцены. Для этого выполните действия, которые уже выполнялись
при создании объекта Cube, – в верхней части меню выберите GameObject – 3D Object – Plane:

35

Д. В. Денисов. «Разработка игры в Unity. С нуля и до реализации»

23. После создания плоскости переместим ее немного ниже уровня объекта Cube. Для
этого выделите объект Plane в окне Hierarchy (клик левой кнопкой мыши) и в окне Inspector в
верхней части установите значения напротив свойства Transform – Position [X:0, Y: -3, Z:0]:

24. Запустите сцену еще раз. Теперь объект куб (Cube) падает на плоскость (Plane) при
старте сцены.
25. Теперь добавим немного интерактивности. Откройте скрипт-файл, который мы
создали ранее с именем HelloWorld.cs и напишите туда небольшой функционал, который будет
уничтожать объект Cube при нажатии клавиши пробел. В программном коде ниже показано
содержимое файла HelloWorld.cs, а жирным шрифтом в комментариях показаны новые строки
кода, которые нужно ввести дополнительно:
// Start Code
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public class HelloWorld : MonoBehaviour
}
36

Д. В. Денисов. «Разработка игры в Unity. С нуля и до реализации»

public GameObject obj;
void Start()
{
print("Hello World!11!");
}
void Update()
{
if (Input.GetKeyUp(KeyCode.Space))
{
Destroy(obj);
}
}
}
// End Code
Листинг дублируется ниже в виде скриншота из MS Visual Studio.

В листинг были добавлены следующие строки кода:
– создается переменная класса GameObject c именем obj, в которую можно будет поместить объект (как это сделать будет показано далее). Класс GameObject – это встроенный класс
Unity, в дальнейшем мы познакомимся с множеством встроенных классов и их методов;
– создается условие if, которое уничтожает объект (Destroy(obj)) при нажатии клавиши Space. При этом используется метод Input.GetKeyUp, который срабатывает, после того
как игрок отпустил клавишу. Также есть похожий метод Input.GeyKeyDown, который срабатывает сразу при нажатии клавиши. В качестве эксперимента можете изменить метод на
Inputy.GetKeyDown.
26. Вернитесь в среду разработки Unity и снова выберите объект Cube. обратите внимание, что теперь в окне Inspector внутри скрипт-файла HelloWorld.cs появилась новая перемен37

Д. В. Денисов. «Разработка игры в Unity. С нуля и до реализации»

ная Obj. Стоит отметить, что если бы мы создали приватную (private) переменную объекта, то
в инспекторе мы бы ее не увидели (приватную переменную можно увидеть, если сверху строки
public GameObject obj добавить [Serialize.Field]):

27. Новая переменная появилась благодаря тем самым строкам кода, которые мы добавили выше. Теперь, если кликнуть на значок “мишени” рядом с надписью None (Game Object)
то можно выбрать любой из существующих на сцене объектов, который будет удаляться при
нажатии клавиши пробел. Например, выберите объект Cube:

28. Теперь запустите сцену и проверьте, что она работает следующим образом:
– В окно Console выводится сообщение “Hello World!11!”;
– Куб (Cube) начинает падать;
– Куб падает на плоскость Plane и останавливается;
– При нажатии на клавишу пробел объект Cube удаляется.
29. В качестве эксперимента замените объект Cube на плоскость Plane внутри скрипта
Hello World (Script) в окне Inspector:

38

Д. В. Денисов. «Разработка игры в Unity. С нуля и до реализации»

30. Проверьте, как теперь отрабатывает сцена после запуска. Что происходит при нажатии на клавиши “пробел”? Теперь, при нажатии клавиши, со сцены должна удаляться плоскость Plane.

39

Д. В. Денисов. «Разработка игры в Unity. С нуля и до реализации»

Выводы
После завершения всех пунктов рекомендуется вернуться в начало раздела и еще раз
внимательно просмотреть всю последовательность действий. Попробуйте самостоятельно внести модификации в некоторые пункты на свой выбор. Так вы сможете более детально разобраться в устройстве взаимосвязей между объектами, скрипт-файлами и некоторыми элементами интерфейса Unity. Ниже приведен некоторый список возможных изменений в проекте
Unity, который вы можете внести, опираясь на те инструкции, которые были получены в этом
разделе:
– Сделайте так, чтобы в Console выводилось сообщение “Goodbye World”.
– Добавьте на сцену больше объектов произвольной формы, измените их размер, положение и ориентацию.
– Модифицируйте скрипт-файл таким образом, чтобы разные объекты могли быть удалены со сцены при нажатии разных клавиш на клавиатуре.
– Перенесите строку кода print("Hello World!11!"); из фигурных скобок метода Start()
в фигурные скобки метод Update(), и проверьте работу сцены. Что изменилось в выводе в
командной строке Console?

40

Д. В. Денисов. «Разработка игры в Unity. С нуля и до реализации»

Часть 2. Создание игрового прототипа
Введение
Создание геймплея (игрового процесса) называют игровым дизайном (англ. Game
Design). Обычно перед началом разработки следует определиться с основными требованиями,
предъявляемыми к игре. Если говорить более обобщенно, то в списке требований, с которыми
следует определиться при начале разработки, можно выделить следующие:
– платформа, под которую осуществляется разработка (Windows, WebGL, Android / iOS),
– экран: разрешение и ориентация,
– длительность игровой сессии,
– система управления,
– однопользовательская или многопользовательская игра,
система монетизации приложения.
Цель нашего практикума по разработке заключается в том, чтобы сделать игру и опубликовать ее на одном из онлайн-ресурсов (подробнее об этом см. Часть 7). Поэтому, наша игра
должна будет удовлетворять следующим требованиям:
– платформа: WebGL,
– экран: ландшафтная ориентация, разрешение не менее 1280х1024,
– длительность игровой сессии: 3–5 минут,
– система управления: легкое управление при помощи мыши и клавиатуры,
– однопользовательская игра,
– система монетизации не предусмотрена.
В игре “Dragon Picker” центральным объектом в игре будет являться дракон, который
периодически роняет драконье яйцо. Игровой процесс будет заключаться в том, чтобы ловить
летящие вниз объекты. В игру могут быть добавлены разные виды объектов, одни из которых
могут добавлять очки в игре, жизни, либо отнимать их. Для нас важно будет добавить один
вид объектов (например, драконье яйцо), а разные виды других объектов вы сможете добавить
самостоятельно по аналогии.
Часто для понимания концепции игры, да и просто для того чтобы передать атмосферу,
полезно сделать наброски в виде скетчей. Выполнить наброски можно как с применением профессиональных средств рисования/прототипирования, так и просто на листе бумаги. В любом
случае рано или поздно придется показать игру всему миру (например, выложив на google
play, app store или simmer.io) и довольно полезно иметь в этом случае контент для визуального оформления страницы с игрой. Довольно много изображений и видеоматериалов можно
найти в открытом доступе для бесплатного коммерческого использования. Их вполне может
быть достаточно для того, чтобы вдохновиться, или использовать на первом этапе чтобы передать концепцию создаваемой игры. Ниже изображен пример скетча для игры “Dragon Picker”
с сайта pixabay.com:

41

Д. В. Денисов. «Разработка игры в Unity. С нуля и до реализации»

Важно отметить, что игровой дизайн имеет малое отношение к графическому дизайну,
картинка приведенная выше призвана лишь передать общую атмосферу создаваемой игры.
При создании игры именно текстуры и визуальное оформление позволяют описать общую концепцию игрового процесса. С игрой будет интереснее взаимодействовать, когда она представлена не только в виде кубиков и блоков. Для оформления игры используются текстуры, а взаимодействие с объектами описывается такими свойствами (компонентами в Unity), как Collider
и RigidBody. Подробнее об этих компонентах вы узнаете в следующих главах.

42

Д. В. Денисов. «Разработка игры в Unity. С нуля и до реализации»

2.1 Создание проекта и первой сцены
Последовательность создания проекта и сцены внутри среды разработки практически не
отличается для различных операционных систем.
1. Запустите Unity Hub, который был скачан и установлен в предыдущей главе;
2. Создайте новый проект, для этого внутри Unity Hub нажмите New;

3. Выберите вид проекта Templates – 3D, в поле Project Name дайте имя проекту, например DragonPicker, в поле Location укажите путь к папке с проектом. Напомним, что проект
может находиться в любом месте на вашем компьютере, (главное, чтобы вы смогли его найти
позже):

4. Нажмите кнопку Create. После этого откроется среда разработки Unity. Может потребоваться некоторое время, это зависит от производительности вашего компьютера. Вид среды
разработки после старта изображен на рисунке ниже:

43

Д. В. Денисов. «Разработка игры в Unity. С нуля и до реализации»

5. В левой нижней части среды разработки внутри панели Project находится структура
проекта. Внутри папки Assets хранятся исходные файлы проекта. В данный момент там существует папке Scenes, в которой находится главная сцена с именем SampleScene:

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

Д. В. Денисов. «Разработка игры в Unity. С нуля и до реализации»

имодействии с папками. Кликните по SampleScene правой кнопкой мыши, выберите в выпадающем меню Save, а затем Rename и напишите новое имя _0Scene:

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

45

Д. В. Денисов. «Разработка игры в Unity. С нуля и до реализации»

2.2 Импорт игровых персонажей
В качестве основного источника визуальных моделей и визуального оформления для
своих игр на первом этапе вы можете использовать Unity Asset Store – это магазин, в котором
можно приобрести различные ресурсы (assets) для Unity. Для простоты понимания мы будем
называть их ассетами. В Asset Store можно найти:
–3D модели,
– звуки/музыку,
– элементы пользовательского интерфейса,
– шейдеры/частицы,
– наборы спрайтов,
– готовые скрип-файлы и многое другое.
Основным источником персонажей в нашей игре станет Evil Dragon Pack HP, который
распространяется бесплатно:

Ниже будет приведена подробная последовательность действия по добавлению ассета в
Unity.
1. Зайдите на сайт assetstore.unity.com и войдите со своим Unity ID. Для добавления
ассета используется личный кабинет пользователя с тем же Unity ID, который указывался при
регистрации и входе в UnityHub (см. пункт 1.1).
2. Используя строку поиска в верхней части сайта, найдите Evil Dragon Pack HP:

46

Д. В. Денисов. «Разработка игры в Unity. С нуля и до реализации»

3. Откройте найденный ассет, перейдя на следующую страницу в браузере, и нажмите
кнопку “Add to My Assets”. После этого ассет будет привязан к вашему Unity ID:

4. После добавления ассет-пак в своем личном кабинете, найти добавленный ассет можно
в менеджере пакетов. Он находится внутри среды разработки Unity, установленной на вашем
персональном компьютере. Для этого откройте Unity, на верхней панели выберите Window –
Package Manager:

47

Д. В. Денисов. «Разработка игры в Unity. С нуля и до реализации»

5. Среди установленных пакетов найдите Evil Dragon Pack и скачайте его, нажав кнопку
Download:

6. После завершения скачивания, вместо кнопки Download появляется кнопка Import,
нажмите ее. Появится новое окно со списком импортируемых файлов, еще раз нажмите Import
чтобы импортировать файлы из ассета в проект Unity.

48

Д. В. Денисов. «Разработка игры в Unity. С нуля и до реализации»

2.3 Добавление дракона с анимацией
Импортированный в проект ассет-пак содержит несколько видов драконов и большое
количество анимации для каждого из них. Все они разбиты по папкам и структурированы так,
как показано ниже:

Наша задача заключается в том, чтобы выбрать некоторые 3D-модели и анимации, которые мы планируем использовать в проекте. После этого нужно перенести необходимые файлы
в папку с проектом и добавить на сцену.
1. В окне Project откройте папку с префабом дракона Green, путь к папке: Assets – Prefab
– DragonTerrorBringer.

2. Создайте дубликат дракона Green, для этого выберите его (кликнув левой кнопкой
мыши) и нажмите комбинацию клавиш Ctrl+D (или Command+D для MacOS). Автоматически
будет создана префаб-копия с именем Green 1.
3. Перетащите префаб дракона с именем Green 1 в папку Scene. Для этого наведите курсор мыши на дракона Green 1 и зажав левую кнопку мыши перетащите в папку Scenes:
49

Д. В. Денисов. «Разработка игры в Unity. С нуля и до реализации»

4. Таким образом, в папке Scenes вашего проекта теперь должно находиться два файла:
сцена (_0Scene) и префаб с драконом Green 1. Переименуйте дракона Green 1 в Enemy (для
этого кликните левой кнопкой мыши по объекту и нажмите Rename). Мы сделали это для того,
чтобы:
– префаб с игровым персонажем находился в отдельной папке внутри нашего проекта;
– чтобы не работать с оригинальными файлами внутри импортированного ассет-пака,
содержащего большое количество файлов, не используемых в проекте:

5. Теперь добавим персонажа Enemy на игровую сцену. Для этого перетащите префаб
Enemy в окно Hierarchy:

50

Д. В. Денисов. «Разработка игры в Unity. С нуля и до реализации»

6. После этого игровой персонаж автоматически появится в окне Scene (в центральной
части среды разработки Unity).
7. Как было указано ранее, координаты добавляемых на сцену объектов отображаются в
окне Inspector. Чтобы узнать координаты добавленного персонажа Enemy, кликните по нему
в окне Hierarchy, после этого в окне Inspector отобразятся его свойства. Нас интересуют параметры компонента Transform. Установите их значения:
– Rotation: 0, 0, 0;
– Position: 0, 0, 0;
– Scale: 1, 1, 1.

51

Д. В. Денисов. «Разработка игры в Unity. С нуля и до реализации»

8. Теперь добавим анимацию игровому персонажу. В окне Project, внутри папки Scene
(там где находится префаб Enemy) кликните правой кнопкой мыши и выберите из контекстного меню Create – AnimatorController. Дайте ему имя EnemyCTRL:

9. Контроллер нужен для того, чтобы строить “дерево анимации”, в котором описывается порядок и условия запуска анимации игрового объекта. Кликните дважды по контроллеру
EnemyCTRL чтобы открыть его:

10. Окно Animator выглядит пустым, так как он был только что создан и в него не добавлено ни одной анимации. Давайте добавим подходящую анимацию парения дракона в воздухе,
для этого найдите в скачанном Asset-паке анимацию FlyIdle. Она находится в папке Assets –
FourEvilDragonHP – Animations – DragonTerrorBringer – FlyIdle:

52

Д. В. Денисов. «Разработка игры в Unity. С нуля и до реализации»

11. Создайте дубликат анимации (Ctrl+D или Command+D для MacOS), переместите
созданную копию в папку Scenes:

12. Теперь перетащите анимацию FlyIdle 1 из папки Scenes в окно Animator. Автоматически создается связь Entry -> Fly Float, которая говорит контроллеру о том, что после запуска
игры должна запускаться стандартная анимация Fly Float:

53

Д. В. Денисов. «Разработка игры в Unity. С нуля и до реализации»

13. Таким образом, был создал контроллер, и в него загружена стандартная анимация полета. Осталось лишь подключить контроллер к игровому персонажу. Для этого выберите персонажа Enemy и в окне Inspector найдите компонент Animator. В списке напротив
поля Controller нажмите значок мишени и выберите созданный ранее контроллер с именем
EnemyCTRL:

54

Д. В. Денисов. «Разработка игры в Unity. С нуля и до реализации»

14.

Теперь,

если

запустить

сцену,

нажав

кнопку

Play

(стрелка

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

15. Позднее мы настроем вид камеры и выберем более удачное расположение игрового
персонажа Enemy. Нажмите кнопку Play еще раз, чтобы выйти из режима проигрывания сцены
и вернуться к работе в среде разработки Unity.

55

Д. В. Денисов. «Разработка игры в Unity. С нуля и до реализации»

2.4 Создание игрового объекта – драконьего яйца
В Unity возможно создавать игровые объекты встроенными средствами. Конечно, без
использования разработанных в сторонних пакетах игровых объектов не обойтись, но это не
всегда необходимо. Особенно, если речь идет о простых примитивах. В этом пункте нашего
руководства мы создадим игровой объект в виде драконьего яйца, при этом будем использовать
встроенные возможности среды разработки Unity.
1. Создайте шаблон для драконьего яйца, выбрав в меню GameObject – 3D Object –
Sphere. Переименуйте объект в DragonEgg. Проверьте, что его параметры Transform указаны
в следующем виде:
– Position: 0, 0, 0;
– Rotation: 0, 0, 0;
– Scale: 1, 1.5, 1.
2. Созданное яйцо должно появиться под драконом, добавленным ранее:

3. Внутри папки Assets – Scenes создайте материал, кликнув внутри Scenes правой кнопкой мыши и выбрав Create – Material. Назовите созданный материал Mat_Egg:

56

Д. В. Денисов. «Разработка игры в Unity. С нуля и до реализации»

4. Кликните по материалу Mat_Egg, в окне Inspector (см. в правой части среды разработки) появятся свойства материала, доступные для редактирования. Например, кликнув по
полю Albedo можно изменить основной цвет, также можете использовать бегунки Metallic и
Smoothness. Можете поэкспериментировать и установить цвет, который вам покажется наиболее подходящим. В любом случае вы всегда сможете вернуться к этому пункту и отредактировать свойства материала. В нашем примере настройки цвета материала показаны ниже:

5. Чтобы назначить созданный материал объекту, просто перетяните материал Mat_Egg
(из папки Assets – Scenes) на объект DragonEgg (в окне Hierarchy). Мы это уже неоднократно
делали, так материал будет назначен созданному ранее 3D-объекту.

57

Д. В. Денисов. «Разработка игры в Unity. С нуля и до реализации»

6. Выберите объект DragonEgg в панели Hierarchy, и в окне Inspector нажмите кнопку Add
Component. Откроется окно добавления компонентов объекту. В появившейся строке поиска
напишите Rigidbody и кликните по найденному компоненту Rigidbody в окне поиска Search.

7. Так мы добавили яйцу свойство твердого тела. Теперь при воспроизведении сцены
(нажатии кнопки Play) яйцо DragonEgg будет падать вниз, тогда как дракон Enemy останется
парить в воздухе и махать крыльями.
8. Так как на экране будет появляться множество объектов DragonEgg, позднее нам придется работать с массивами этих объектов. Для простоты дальнейшей работы привяжем к
DragonEgg специальный тег. Для этого выберите DragonEgg в окне иерархии (Hierarchy), далее
нажмите по кнопке Tag в окне Inspector и выберите Add Tag…:

58

Д. В. Денисов. «Разработка игры в Unity. С нуля и до реализации»

9. После этого откроется диспетчер тегов и слоев. Внутри окна Tags & Layers кликните
по значку “+” и добавьте новый тег с именем DragonEgg. После того как напишете новое имя,
нажмите Save:

10. Теперь в поле Tag (окно Inspector) для объекта DragonEgg можно задать новый тег
с именем DragonEgg:

59

Д. В. Денисов. «Разработка игры в Unity. С нуля и до реализации»

11. Так как яйцо дракона должно будет генерироваться автоматически, то его нахождение на сцене не требуется. В этом случае в Unity принято работать с так называемыми префабами. Unity prefab – это особый тип ассетов, позволяющий хранить весь GameObject со всеми
компонентами и значениями свойств. Ранее мы уже работали с префабом – драконом Enemy,
который был скачан из Asset Store. Теперь давайте создадим префаб для DragonEgg, чтобы это
сделать просто перетащите 3D объект с именем DragonEgg из окна Hierarchy в окно Project:

60

Д. В. Денисов. «Разработка игры в Unity. С нуля и до реализации»

12. Если все сделано правильно, то DragonEgg в окне Hierarchy поменяет свой цвет.
После того как шаблон будет создан, его можно удалить из окна Hierarchy (и соответственно
со сцены). Удалите DragonEgg из Hierarchy (он останется в папке Assets – Scenes).

61

Д. В. Денисов. «Разработка игры в Unity. С нуля и до реализации»

2.5 Создание игрового объекта – энергетического щита
1. Для создания игрового объекта – EnergyShield, выберите в главном меню GameObject
– 3D Object – Sphere. Переименуйте объект в EnergyShield. Проверьте, что его параметры
Transform указаны в следующем виде:
– Position: 0, -6, 0];
– Rotation: 0, 0, 0;
– Scale: 3, 3, 3;

2. Для объекта EnergyShield создайте материал Mat_Shield. В свойствах материала установите для него Rendering mode – Transparent, а цвет, прозрачность как показано на рисунке
ниже:

62

Д. В. Денисов. «Разработка игры в Unity. С нуля и до реализации»

3. Перетащите материал Mat_Shield на объект EnergyShield, как это делали уже ранее:

63

Д. В. Денисов. «Разработка игры в Unity. С нуля и до реализации»

4. Добавьте в EnegryShield компонент Rigidbody. Внутри компонента снимите флажок
Use Gravity (при выключенной Use Gravity объект не будет падать). Там же установите флажок
Is Kinematic (данный пункт отключает физику для объекта, отключаются силы, не работают
столкновения объектов, эта модификация объекта нам будет полезна далее):

64

Д. В. Денисов. «Разработка игры в Unity. С нуля и до реализации»

5. Создайте Prefab для объекта EnegryShield, перетащив его из окна Hierarchy в Project:

6. Сохраните сцену, кликнув правой кнопкой мыши по сцене и выбрав Save Scene.

65

Д. В. Денисов. «Разработка игры в Unity. С нуля и до реализации»

2.6 Настройка камеры и игровой области
Как и многие вещи в разработке игр, поиск оптимальных настроек камеры – итеративный процесс. Не обязательно следовать всем указаниям в руководстве, вы всегда можете изменить настройки камеры таким образом, чтобы получить наиболее подходящие на ваш взгляд
настройки вида игровой области.
1. Выберите объект Main Camera в иерархии объектов. Настройте компонент Transform:
– Position: 0, 5, 10;
– Rotation: 20, – 180, 0;
– Scale: 1, 1, 0;

2. В инспекторе для компонента Camera установите в поле Projection – Orthographic, в
поле Size значение 14:

66

Д. В. Денисов. «Разработка игры в Unity. С нуля и до реализации»

3. Еще один важный фактор – соотношение сторон панели Game. Вверху панели отображается значение Free Aspect. Выберите из списка 16:9 – стандартное соотношение сторон для
большинства современных экранов.

4. При запуске сцены (кнопка Play) будет показан вид окна игры в соответствии с выбранными настройками камеры:

67

Д. В. Денисов. «Разработка игры в Unity. С нуля и до реализации»

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

68

Д. В. Денисов. «Разработка игры в Unity. С нуля и до реализации»

Выводы
Таким образом, во второй части мы создали заготовку для нашего будущего проекта и
даже добавили парящего дракона с анимацией. Если у вас будет желание разобраться в проекте
чуть более глубоко и получить к концу практикума игру, которая будет отличаться от этой,
рекомендуем вам попробовать самостоятельно внести следующие изменения в проект:
– Замените префаб с драконом на любой другой из скачанного ассет-пака.
– Замените анимацию полета.
– Можете поэкспериментировать со значениями scale в префабе, это позволит изменить
размер игрового объекта.

69

Д. В. Денисов. «Разработка игры в Unity. С нуля и до реализации»

Часть 3. Программирование игровых объектов
Введение
При написании сценариев мы будем использовать пошаговое добавление строк кода,
давая описание команд по ходу добавления нового функционала в скрипт-файлы. Как уже
было отмечено ранее, действия игровых объектов описываются в так называемых Script-файлах. Эти файлы содержат код на языке C# и имеют расширение .cs. При этом следует отметить, что предварительная компиляция файлов не требуется, Unity берет эту работу на себя в
режиме реального времени в процессе работы в среде разработки.

70

Д. В. Денисов. «Разработка игры в Unity. С нуля и до реализации»

3.1 Скрипт-файл EnemyDragon
В пункте 3.1 мы создадим скрипт-файл, который будет выполнять следующие действия:
– перемещать игрового персонажа Enemy влево и вправо;
– через случайные интервалы времени вероятность изменения направления движения
будет изменяться;
– сбрасывать яйцо (DragonEgg) через случайные интервалы времени.
1. Создайте сценарий с именем EnemyDragon.cs в папке Assets – Scenes. Для этого кликните правой кнопкой мыши внутри содержимого окна Scene и из выпадающего меню выберите
Create – C# Script, дайте имя файлу EnemyDragon:

2. Откройте сценарий EnemyDragon.cs, кликнув по нему два раза (файл автоматически
откроется в среде разработки Microsoft Visual Studio) и введите следующий код:
// Start Code
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public class EnemyDragon : MonoBehaviour
{
[Header("Set in Inspector")]
public GameObject dragonEggPrefab;
public float speed = 1f;
public float timeBetweenEggDrops = 1f;
public float leftRightDistance = 10f;
public float chanceDirections = 0.1f;
void Start()
{
}
void Update()
{
}
}
// End Code
Листинг дублируется ниже в виде скриншота из MS Visual Studio.
71

Д. В. Денисов. «Разработка игры в Unity. С нуля и до реализации»

В листинге мы добавили следующие строки кода:
– с помощью команды [Header("Set in Inspector")] создализаголовок в окне Inspector;
– public GameObject dragonEggPrefab создает префаб для драконьего яйца DragonEgg;
– созданная переменная speed определяет скорость движения объекта DragonEgg;
– переменная timeBetweenEggDrops определяет скорость генерации объектов DragonEgg;
– переменная leftRightDistance определяет расстояние от края экрана, на котором меняется направление движения дракона;
– chanceDirections определяет вероятность изменения направления движения.
3. Подключите сценарий к игровому объекту Enemy. Сделать это можно так же, как и
ранее – перетаскиванием скрипта EnemyDragon.cs, на объект Enemy:

72

Д. В. Денисов. «Разработка игры в Unity. С нуля и до реализации»

4. Теперь, если выбрать объект Enemy в окне Hierarchy, то можно увидеть, что в инспекторе объекта (в правой части среды разработки) добавился компонент с соответствующим именем Enemy Dragon (Script). Обратите внимание, что компонент содержит поля, для которых
мы создали переменные на языке C#. Это значит, что в дальнейшем мы сможем изменять значения переменных прямо в этих полях, находясь в среде разработки Unity без лишнего обращения к коду:

5. Внутри скрипт-файла EnemyDragon.cs добавьте в метод Update следующие строки
кода, выделенные жирным шрифтом:
// Start Code
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public class EnemyDragon : MonoBehaviour
73

Д. В. Денисов. «Разработка игры в Unity. С нуля и до реализации»

{
[Header("Set in Inspector")]
public GameObject dragonEggPrefab;
public float speed = 1f;
public float timeBetweenEggDrops = 1f;
public float leftRightDistance = 10f;
public float chanceDirections = 0.1f;
void Start()
{
}
void Update()
{
Vector3 pos = transform.position; //1
pos.x += speed * Time.deltaTime; //2
transform.position = pos; //3
}
}
// End Code
Листинг дублируется ниже в виде скриншота из MS Visual Studio.

Каждому закомментированному номеру соответствует следующее:
– Vector3 pos – это локальная переменная для хранения текущий позиции (//1);

74

Д. В. Денисов. «Разработка игры в Unity. С нуля и до реализации»

– x увеличивается на произведение скорости и временного интервала Time.deltaTime
(//2). Это встроенная переменная, которая будет изменять свое значение при разной частоте
кадров. Если говорить простыми словами, то она отвечает за плавность игры при разном FPS;
– изменение значения pos записывается обратно в transform.position (//3).
6. Сохраните сценарий и нажмите Play в Unity. Теперь дракон (игровой объект Enemy)
должен медленно начать двигаться по экрану. Можете самостоятельно подобрать такое значение скорости Speed в окне Inspector, которое покажется вам наиболее подходящим.
7. Чтобы дракон не улетал за край экрана следует добавить в метод Update строки кода:
// Start Code
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public class EnemyDragon : MonoBehaviour
{
[Header("Set in Inspector")]
public GameObject dragonEggPrefab;
public float speed = 1f;
public float timeBetweenEggDrops = 1f;
public float leftRightDistance = 10f;
public float chanceDirections = 0.1f;
void Start()
{
}
void Update()
{
Vector3 pos = transform.position;
pos.x += speed * Time.deltaTime;
transform.position = pos;
if (pos.x < -leftRightDistance) //1
{
speed = Mathf.Abs(speed);
}
else if (pos.x > leftRightDistance) //2
{
speed = -Mathf.Abs(speed);
}
}
}
// End Code
Листинг дублируется ниже в виде скриншота из MS Visual Studio .

75

Д. В. Денисов. «Разработка игры в Unity. С нуля и до реализации»

Каждому закомментированному номеру соответствует следующее:
– если значение pos.x оказалось меньше значения leftRightDistance – переменная speed
имеет положительное значение (движение вправо) (//1);
– иначе если значение pos.x оказалось больше значения leftRightDistance – переменной
speed присваивается отрицательное значение (движение влево) (//2).
8. Сохраните сценарий EnemyDragon.cs в Unity и нажмите Play. Проверьте корректность
движения игрового объекта Enemy, согласно написанному сценарию. Теперь он должен менять
направление движения при приближении к краю экрана.
9. Для добавления случайного изменения направления перемещения дракона, создайте
под методом Update() новый метод с именем FixedUpdate(). FixedUpdate вызывается точно 50
раз в секунду и в отличие от Update() не зависит от быстродействия компьютера.
// Start Code
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
76

Д. В. Денисов. «Разработка игры в Unity. С нуля и до реализации»

public class EnemyDragon : MonoBehaviour
{
[Header("Set in Inspector")]
public GameObject dragonEggPrefab;
public float speed = 1f;
public float timeBetweenEggDrops = 1f;
public float leftRightDistance = 10f;
public float chanceDirections = 0.1f;
void Start()
{
}
void Update()
{
Vector3 pos = transform.position;
pos.x += speed * Time.deltaTime;
transform.position = pos;
if (pos.x < -leftRightDistance)
{
speed = Mathf.Abs(speed);
}
else if (pos.x > leftRightDistance)
{
speed = -Mathf.Abs(speed);
}
}
private void FixedUpdate()
{
if (Random.value < chanceDirections)
{
speed *= -1;
}
}
}
// End Code
Так как листинг достаточно длинный, то для удобства на скриншоте приводится лишь
его нижняя часть, включая уже созданный ранее метод Update и новый метод FixedUpdate.

77

Д. В. Денисов. «Разработка игры в Unity. С нуля и до реализации»

10. Подберите значение переменной chanceDirections таким образом, чтобы объект
Enemy случайно менял направление в среднем 1 раз в секунду. Подобрать подходящее значение поможет формула: 50 вызовов FixedUpdate в секунду * вероятность = среднее число срабатываний в секунду. Напомним, что подбирать подходящие значения можно в окне Inspector
(сразу после сохранения скрипта). Например, у нас получились следующие значения:

11. Запустите игру, нажав Run. Проверьте корректность срабатывания вероятности изменения направления движения Enemy.
78

Д. В. Денисов. «Разработка игры в Unity. С нуля и до реализации»

12. Далее мы реализуем сбрасывание объектов DragonEgg из дракона Enemy. Для этого
выберите игровой объект Enemy и в окне Inspector найдите поле для добавления префаба
DragonEgg.prefab, и добавьте в него префаб игрового объекта DragonEgg. Это можно сделать
также, как мы это делали ранее – перетаскиванием, либо нажав мишень и выбрать нужный из
доступных префабов:

13. После того как объект подключен, добавим необходимые строки кода для генерации
яблок. Для этого нам понадобится создать метод DropEgg() и команду вызова этого метода
внутри Start(). Метод DropEgg будет создавать экземпляр драконьего яйца DragonEgg в точке
нахождения дракона Enemy. Из метода Start будет запускаться генерация объекта-яйцо через
заданное количество секунд:
// Start Code
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public class EnemyDragon : MonoBehaviour
{
[Header("Set in Inspector")]
79

Д. В. Денисов. «Разработка игры в Unity. С нуля и до реализации»

public GameObject dragonEggPrefab;
public float speed = 1f;
public float timeBetweenEggDrops = 1f;
public float leftRightDistance = 10f;
public float chanceDirections = 0.1f;
void Start()
{
Invoke("DropEgg", 2f); // 1
}
void DropEgg() // 2
{
Vector3 myVector = new Vector3(0.0f, 5.0f, 0.0f);
GameObject
egg
=
Instantiate(dragonEggPrefab);
egg.transform.position = transform.position + myVector;
Invoke("DropEgg", timeBetweenEggDrops);
}
void Update()
{
Vector3 pos = transform.position;
pos.x += speed * Time.deltaTime;
transform.position = pos;
if (pos.x < -leftRightDistance)
{
speed = Mathf.Abs(speed);
}
else if (pos.x > leftRightDistance)
{
speed = -Mathf.Abs(speed);
}
}
private void FixedUpdate()
{
if (Random.value < chanceDirections)
{
speed *= -1;
}
}
}
// End Code
На скриншоте листинга показаны первые строки, включающие новые команды внутри
методов Start() и DropEgg().

80

Д. В. Денисов. «Разработка игры в Unity. С нуля и до реализации»

– функция Invoke в методе Start() выше вызывает функцию, заданную именем через указанное число секунд. В данном случае – вызывается функция DropEgg(), с параметром 2f,
т.е. с ожиданием 2 секунды перед каждым новым вызовом. Таким образом, мы можем установить наиболее подходящие значения для частоты генерации объектов. Можете самостоятельно
подобрать наиболее подходящее значение.
– функция DropEgg() создает экземпляр GameObject с именем dragonEggPrefab и присваивает его переменной egg. Далее изменяется положение egg, и функция вызывает саму себя
снова через интервалы времени, равные timeBetweenEggDrops.
14. Теперь если нажать кнопку Play, то движущийся по экрану дракон будет сбрасывать
драконье яйцо через равные интервалы времени.

81

Д. В. Денисов. «Разработка игры в Unity. С нуля и до реализации»

3.2 Скрипт-файл DragonEgg
В этом разделе мы опишем работу драконьего яйца. Создайте сценарий DragonEgg.cs:

Перед тем как открыть файл и перейти к программированию, давайте несколько изменим оформление нашей сцены. В частности, добавим несколько игровых объектов и элементов
визуального оформления. Мы сделаем это для того, чтобы нам стало более наглядно работать,
к тому же в этом разделе мы добавим спецэффекты, а работать с ними конечно же эффективней, когда можно визуально оценить их работу.
1. Дополнительные визуальные эффекты мы возьмем из уже знакомого Asset Store. Зайдите в assetstore.unity.com и используя строку поиска найдите Asset с именем Fire & Spell
Effects. Добавьте его в свой профиль и вернитесь в среду разработки Unity.

82

Д. В. Денисов. «Разработка игры в Unity. С нуля и до реализации»

2. В среде разработки Unity откройте Window – Package Manager, в списке Package: My
Assets найдите добавленный ассет с именем Fire & Spell Effects (если вы его не видите возможно потребуется обновить список, нажмите Refresh в нижней части окна Package Manager)
и нажмите Download и далее Import. Описанная последовательность действий изображена на
скриншоте ниже:

3. После того как импорт будет завершен, в папке Assets появится папка с набором текстур и эффектов:

83

Д. В. Денисов. «Разработка игры в Unity. С нуля и до реализации»

4. Далее мы добавим плоскость Plane, которая будет играть роль поверхности земли.
Также мы оформим ее в виде раскаленной лавы, падая на которую драконьи яйца будут взрываться. Чтобы добавить плоскость на сцену, в верхнем меню выберите Windows – GameObject
– Plane:

5. Переименуйте объект Plane в Ground. Установите размеры объекта Ground:
– Position: 0, -8, 0;
– Rotation: 0, 0, 0;
– Scale: 5, 5, 5;

84

Д. В. Денисов. «Разработка игры в Unity. С нуля и до реализации»

6. Изменим визуальное оформление элемента Ground. В окне Inspector (в правой части)
разверните компонент Mesh Renderer (), нажмите на “мишень” и из появившегося меню Select
Material выберите материал FireParticleMeteorMaterial.

7. В качестве альтернативного варианта наложения текстуры на объект, можете найти
нужную текстуру в папке скачанного ассет-пака и перетащить FireParticleMeteorMaterial в поле
выбора материала, напротив надписи Element 0, как показано на рисунке ниже:

85

Д. В. Денисов. «Разработка игры в Unity. С нуля и до реализации»

8. Текстуры из скачанного ассет-пака можно использовать и для других объектов.
Например, вместо созданного вручную материала драконьего яйца Mat_Egg, можно также
использовать готовую текстуру из Asset Store. Для этого выберите префаб DragonEgg из
папки Scene и внутри компонента MeshRenderer выберите подходящую текстуру, например
FireParticleMeteor2Material:

9. Теперь можете запустить сцену и проверить ее работу. Если вы выполнили все пункты
выше, то сцена должно выглядеть так, как изображено на рисунке ниже:

86

Д. В. Денисов. «Разработка игры в Unity. С нуля и до реализации»

10. Откройте сценарий DragonEgg.cs, подключенный к игровому объекту
DragonEgg.prefab. Этот игровой объект дракон сбрасывает через равные временные интервалы. В скрипт-файл мы добавим следующий функционал:
– При столкновении с плоскостью Ground мы создадим эффект взрыва яйца. А именно,
будет запускаться Particle System – это компонент, который может имитировать генерацию
частиц разного вида (используется при добавлении взрывов, эффектов дыма, молний, тумана
и т. д.). В нашем случае мы будем использовать Particle System для имитации взрыва.
– Генерируемые объекты DragonEgg все время существуют на сцене после создания.
Со временем их количество будет увеличиваться, поэтому будет правильнее удалять объекты
DragonEgg после того, как они будут уходить за пределы сцены.
11. Настройку визуальных эффектов мы можем разделить на два этапа:
– написание кода в скрипт-файл в DragonEgg.cs;
– настройка свойств Particle Syste, в окне Inspector элемента DragonEgg.prefab.
12. Приступим к написанию кода. Для этого добавьте в скрипт-файл DragonEgg.cs следующие строки кода:
// Start Code
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public class DragonEgg : MonoBehaviour
{
public static float bottomY = -30f;
void Start()
{
}
private void OnTriggerEnter(Collider other)
{
ParticleSystem ps = GetComponent();
var em = ps.emission;
em.enabled = true;
87

Д. В. Денисов. «Разработка игры в Unity. С нуля и до реализации»

Renderer rend;
rend = GetComponent();
rend.enabled = false;
}
void Update()
{
if (transform.position.y < bottomY)
{
Destroy(this.gameObject);
}
}
}
// End Code
Как и ранее, скриншот листинга покажем ниже.

В скрипт файле основное функциональные блоки выполняют следующие действия:
– создается переменная bottomY, которая будет указывать, на каком расстоянии Y нужно
будет удалять объекты DragonEgg.
– По названию метода OnTriggerEnter (Collision Other) можно понять, что он начинает
работу, когда происходит пересечение с объектом, который работает как Trigger. В нашем случае таким объектом-триггером будет выступать плоскость Plane. При срабатывании триггера
88

Д. В. Денисов. «Разработка игры в Unity. С нуля и до реализации»

запускается проигрывание Particle System (em.enabled = true), и яйцо становится невидимым
(rend.enabled = false).
– внутри метода Update происходит уничтожение объекта DragonEgg
(Destroy(this.gameObject)), если яйцо падает ниже уровня -10f. Это позволяет избежать накопления ненужных объектов за пределами игровой сцены.
13. Сохраните сценарий DragonEgg.cs и подключите его к префабу (шаблону)
DragonEgg.prefab в панели Project. Для этого вы можете просто перетащить файл DragonEgg.cs
на префаб DragonEgg.prefab:

14. После этого можно убедиться, что в окне инспектора Inspector появится компонент
с подключенным Script-файлом.

15. Выберите DragonEgg.prefab и добавьте компонент Particle System:

89

Д. В. Денисов. «Разработка игры в Unity. С нуля и до реализации»

16. Теперь настроим объект Ground, чтобы он работал в качестве триггера. Сделать это
можно достаточно просто, в окне Hierarchy выберите объект Ground и после этого в окне
Inspector поставьте две галочки в компоненте Mesh Collider – Convex, Is Trigger:

17. Убедитесь, что при нажатии кнопки Play игровые объекты DragonEgg летят вниз,
проходят сквозь Ground с генерацией элементов Particle System и исчезают из иерархии объектов после того как достигнут нижнего края (заданного уровня -10).
18. В данный момент вид элементов Particle System не настроен, поэтому они отображаются в стандартном виде:

90

Д. В. Денисов. «Разработка игры в Unity. С нуля и до реализации»

19. Изменим настройки Particle System, чтобы они имели внешний вид, похожий на
взрыв. Для этого выберите элемент DragonEgg, в окне Inspector разверните компонент Particle
System. Он содержит большое количество дополнительных настроек, ниже выделены основные, на которые следует обратить внимание. Настройте компонент так, как показано на рисунке
ниже:

91

Д. В. Денисов. «Разработка игры в Unity. С нуля и до реализации»

20. Поставьте галочку возле Emission и введите параметры, показанные на рисунке ниже
(чтобы добавить новую линию с параметрами “всплесков” нажмите “+”).

21. Теперь снимите галочку с Emission. Это делается для того, чтобы при запуске сцены
этот параметр был выключен и объект не излучал Particles с эффектами взрыва.
22. Поставьте галочку напротив “Size over Lifetime”, и выберите вид кривой, которая растет от минимума слева до максимума справа. Эта кривая означает, что элемент Particle будет
распространяться от центра в разные стороны, как это происходит во время взрыва. Если обра92

Д. В. Денисов. «Разработка игры в Unity. С нуля и до реализации»

тите внимание, что существует несколько типовых видов кривых, которые позволяют создавать совершенно разные эффекты.

23. Последний элемент, с которым мы поработаем внутри Particle System – это Renderer,
в нем назначается текстура частицы, которая генерируется при запуске. Выберем в качестве
текстуры материал с названием FireParticleSingleMaterial, эта текстура также находится в скачанном ассет-паке в папке PyroParticles.

24. Теперь вы можете запустить сцену и проверить, что при столкновении драконьего
яйца с плоскостью земли, создается эффект взрыва. Но если быть точным, то на самом деле
происходит следующее:
– при столкновении объекта DragonEgg с Ground срабатывает триггер, после этого яйцо
перестает отображаться (rend.enabled = false);
– запускается работа Particle System, имеющей визуальное оформление взрыва
(em.enabled = true);
– объект DragonEgg уничтожается при падении ниже уровня y = -10f.
93

Д. В. Денисов. «Разработка игры в Unity. С нуля и до реализации»

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

94

Д. В. Денисов. «Разработка игры в Unity. С нуля и до реализации»

3.3 Скрипт-файл DragonPicker
Практически во всех играх существует сценарий, который управляет игрой в целом:
запуском и перезапуском сцены, сохранением, загрузкой и т. д. В нашем примере мы создадим такой сценарий, который будет называться DragonPicker.cs. Подключать сценарии, управляющие игрой, следует к тем объектам, которые гарантированно присутствуют в любой сцене,
например к Main Camera. Давайте это сделаем.
1. Создайте сценарий DragonPicker.cs и подключите его (можно так же, как и ранее –
перетаскиванием) к элементу Main Camera в окне Hierarchy:

2. Помимо управления игрой в сценарии будет создаваться три экземпляра EnergyShield
– главного персонажа, который будет ловить летящие вниз яйца дракона. Условно игрок будет
окружен энергетическими шарами EnergyShield, которые будут символизировать количество
жизней.
3. Напишите код, который будет создавать три экземпляра шаблона EnergyShield, располагая их на экране внутри друг друга.
// Start Code
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public classDragonPicker : MonoBehaviour
{
public GameObject energyShieldPrefab;
public int numEnergyShield = 3;
public float energyShieldButtomY = -6f;
95

Д. В. Денисов. «Разработка игры в Unity. С нуля и до реализации»

public float energyShieldRadius = 1.5f;
void Start()
{
for (int i = 1; i (); – в локальную
переменную apScript записывается ссылка на компонент DragonPicker (Script) главной камеры
Main Camera.
– После этого появляется возможность напрямую обращаться к переменным и методам
экземпляра класса DragonPicker.cs, подключенного к главной камере.
– apScript.DragonEggDestroyed(); – это вызов метода DragonEggDestroyed() класса
DragonPicker. Но метода пока не существует, давайте добавим его.
2. Откройте сценарий DragonPicker.cs, добавьте в него новый метод
DragonEggDestroyed():
// Start Code
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public class DragonPicker : MonoBehaviour
{
public GameObject energyShieldPrefab;
public int numEnergyShield = 3;
public float energyShieldButtomY = -6f;
public float energyShieldRadius = 1.5f;
void Start()
{
111

Д. В. Денисов. «Разработка игры в Unity. С нуля и до реализации»

for (int i = 1; i