скачать книгу бесплатно
Разработка игры на Unity. С нуля до реализации
Дмитрий Вадимович Денисов
Это руководство по разработке игры, в котором шаг за шагом описывается процесс ее создания с применением языка программирования C# и среды разработки Unity. Практически каждый ваш шаг будет сопровождать скриншот с понятным описанием последовательности действий. Вы научитесь создавать игровые объекты и описывать логику их работы, создавать элементы ландшафта, настраивать камеру, игровые сцены, графический интерфейс, спецэффекты и звуковые эффекты. Практикум завершается публикацией игры на открытой онлайн платформе. Ознакомиться с игрой, которую вы сделаете, можно по ссылке: simmer.io/@Den1sov/dragon-picker. Практикум подойдет для тех кто только знакомится с основами разработки игр на Unity, его под силу выполнить любому человеку с базовыми навыками работы за ПК. Материалы практикума планируется регулярно обновлять. Последнее обновление случилось в марте 2022 года, так появилось второе издание.
Удачи вам в создании ваших игровых миров и до встречи… за пределами матрицы. Welcome!
Дмитрий Денисов
Разработка игры на Unity. С нуля до реализации
Введение
Компьютерные игры давно стали частью нашей культуры, через них можно донести мысль до широких масс, они развивают интеллект, реакцию и позволяют пережить целый спектр самых разнообразных эмоций.
В этой книге дано полноценное руководство по разработке игры на Unity с нуля. Без лишней воды и теории, только практика, потому что лучше один раз сделать что-то самостоятельно (даже по руководству), чем прочитать множество гайдов и посмотреть сотни видео на YouTube, но ничего не сделать. В отличие от большого количество книг по разработке и программированию, в этой вы найдете только ту информацию, которая непосредственно относится к созданию вполне конкретного игрового прототипа.
Это значит, что в книге не будет раздела по основам разработки на C# – языке программирования, который используется для написания сценариев в Unity. С другой стороны, вы получите информацию по созданию необходимых скриптов в создаваемой вами игре, а в приведенных листингах будут даны комментарии. Это позволит сконцентрироваться на изучении только тех функций среды разработки, или возможностях языка программирования, которые нужны для выполнения поставленной задачи.
Автор убежден, что важнее заложить базовые знания, дав реализовать свой первый проект. А копнуть глубже и разобраться в тонкостях поможет множество других гайдов, статей, учебников и руководств из официальной документации, “разбросанной” по просторам интернета.
В этой книге вы изучите основы работы с Unity – кроссплатформенной средой разработки компьютерных игр. И опубликуете свою первую игру на платформе yandex.ru/games. Под термином кроссплатформенности понимается возможность сборки готового игрового проекта под разные операционные системы и устройства: PC, iOS, Android, PS, WebGL (браузерные игры) и т. д. Материал ориентирован на новичков, которые только начинают работу в Unity. Поэтому мы начнем с установки необходимого программного обеспечения и создадим первую простую сцену.
Как итог изучения материалов вы сможете опубликовать браузерную игру на платформе WebGL, таких как simmer.io, itch.io и Yandex-игры (yandex.ru/games). Все что нужно для выгрузки игры на хостинг, – это собрать её билд и загрузить архив на хостинг. Хостингов для игр существует большое множество и принцип для многих одинаков. О том как собрать билд и загрузить на хостинг рассказывается в последней главе. Ознакомиться с демо-версией игры, которую мы сделаем, можно по ссылке: yandex.ru/games/app/209669. Скриншот стартовой сцены игры показан ниже:
Материал книги регулярно обновляется, последнее обновление произошло весной 2023 года. Задать вопросы в случае возникновения трудностей при работе с книгой можно в группе tg: t.me/BigDigitalCourse, дополнительные ресурсы к книге опубликованы на сайте автора: bigdigital-gamelab.ru/book. Успехов в разработке вашей первой игры на Unity.
Глава 1. Установка необходимого программного обеспечения
1.1 Установка среды разработки
Перейдите на портал unity.com в раздел для загрузки программного обеспечения: unity.com/ru/download. На этой странице можно:
– загрузить версию для Windows [1]
– либо выбрать на той же странице «Как начать работу» [2] и скачать версию для MacOS или Linux.
Разрабатывать на Unity можно в основных операционных системах, что, несомненно, играет большую и важную роль в популярности этой среды разработки игр. После завершения загрузки у вас на компьютере окажется установщик UnityHubSetup, по сути, это загрузчик (лаунчер) для ваших будущих проектов. Установка Unity Hub стандартная, дважды кликните по установщику UnityHubSetup и дождитесь окончания установки.
После завершения установки запустите Unity Hub. При первом запуске система предложит вам войти или создать свой аккаунт. Если этого не произошло автоматически, вы можете войти / создать свою учетную запись, выбрав в левой части Unity Hub – Sign in:
Процесс создания учетной записи для Unity стандартный, поэтому мы не будем здесь расписывать его подробно. Отдельно хочу обратить внимание, что следует использовать единую учетную запись для всех сервисов Unity, с которыми вы работаете. Так как Unity имеет широко развитую инфраструктуру и сеть порталов, облегчающих работу с этим движком:
– assetstore.unity.com – каталог 2D- и 3D-моделей, SDK, шаблонов и инструментов для разработки игр.
– learn.unity.com – портал с бесплатными учебными материалами, курсами и пошаговыми инструкциями для изучения работы в Unity.
Единая учетная запись облегчит навигацию и работу в сервисах Unity и позволит в пару кликов добавлять модели, найденные в каталоге assetstore.unity.com, в ваш проект в среде разработки.
После того как вы создали и вошли в свой аккаунт Unity, откроется окно приложения Unity Hub. В центральной части приложения указаны проекты (Projects), с которыми вы работаете. Если вы используете Unity впервые, то это окно у вас должно быть пустым, однако очень скоро в нем начнут появляться созданные вами проекты, и Unity Hub будет выглядеть наполненным самыми разными проектами:
Теперь перейдем к установке редактора Unity. Оставаясь в Unity Hub нажмите кнопку Installs [1] в левом меню и далее – Install Editor [2]. Из Unity Hub можно запускать множество разных версий среды разработки Unity.
После этого откроется окно выбора версий Unity для установки. Для начинающих пользователей лучше устанавливать ту версию Unity, по которой составлено данное руководство. Если же вы являетесь опытным пользователем, то можете выбрать последний рекомендованный разработчиком релиз (Recommended Version) последней версии (как правило выбран по умолчанию). На момент обновления материалов книги в качестве рекомендованной версии указана версия Unity 2021.3.25f1. Для начала установки в окне Install Unity Editor – Official Releases найдите и установите версию среды разработки 2021.3.25f1. Чтобы начать установку нажмите кнопку Install:
Если позднее вы захотите скачать любую другую версию Unity, перейдите в раздел Archive – download archive и найдите интересующую вас версию на сайте разработчика:
После того как вы нажали на кнопку Install, в следующем окне следует выбрать дополнительные модули. Напомню, что Unity позволяет создавать игры под самые разные платформы. Например, если в дальнейшем вы захотите сделать игру под мобильное устройство, то все что вам потребуется – это установить модули Android Build Support и iOS Build Support. На данном шаге нам потребуется установить среду разработки для работы с кодом. Для создания сценариев на Unity используется язык программирования C# и в самом верхнем списке вам предлагается установить Microsoft Visual Studio (если вы работаете на Windows) или Visual Studio for Mac (если вы работает на соответствующей операционной системе). Поставьте галочки напротив:
– модуля Visual Studio чтобы сразу скачать и установить среду для работы с кодом (поставьте флажок напротив модуля Visual Studio),
– WebGL Build Support, что позволит нам создавать сборку проекта под браузерные игры,
– нажмите кнопку Install:
Скачивание и установка модулей и среды разработки займет некоторое время.
Когда скачивание завершится, произойдет автоматическая установка всех компонентов, и на этом процесс установки завершен. Если в дальнейшем вам понадобятся другие версии среды разработки Unity (например, вы найдете и захотите посмотреть готовые проекты, сделанные под более ранние версии среды разработки), – то вы всегда сможете открыть Unity Hub, перейти во вкладку Install и скачать недостающие версии Unity и модули, нажав кнопку Install Editor. Таким образом, Unity Hub является своего рода “точкой старта”, из которой происходит создание новых проектов (вкладка Projects), установка различных версий Unity (вкладка Installs) и т. д.
По итогу пошагового выполнения пунктов выше, у вас:
– должна быть установлена среда разработки Unity,
– среда для работы с кодом: Microsoft Visual Studio (для работы из-под Windows) или Visual Studio (для работы из-под Mac или Linux),
– создана учетная запись на сайте Unity.com. Не теряйте ее, так как эту учетную запись вы можете использовать для работы в других сервисах Unity.
1.2 Первый проект и настройка среды разработки
Создадим простейшую сцену чтобы проверить корректность работы всех установленных программных пакетов. По традиции принято создавать программу, которая выводит сообщение «Hello World» в терминал. В нашем примере мы не просто выведем сообщение, но и научимся взаимодействовать с объектами в среде Unity.
Чтобы создать первый проект на Unity, откройте Unity Hub и перейдите во вкладку Projects. Нажмите New project чтобы перейти в окно создания нового проекта:
В появившемся окне нужно выбрать тип проекта – 3D, дайте имя новому проекту, например 01_HelloWorld. Проверьте путь к папке, в которой будет создан проект (здесь скорее важно, чтобы вы осознанно указали папку для проекта и не потеряли его в дальнейшем). После этого нажмите Create project:
Проект будет создан и открыт в новом окне Unity. Первый запуск проект может быть длительным, так как создаются необходимые зависимости в библиотеках проекта. На рисунке ниже показано, как выглядит запущенная среда разработки. На данном этапе вам может показаться, что среда содержит довольно большое количество разнообразных и непонятных окон, но в дальнейшем мы разберемся, как они устроены и за что отвечают ее отдельные элементы:
Если вы по какой-то причине захотите установить «светлую» тему, в верхнем меню перейдите во вкладку Unity – Preferences (или Settings для Mac) – General – Editor Theme – Light.
Теперь мы готовы к тому, чтобы начать работу. Первым делом создадим новый C# Script-файл с простой командой, которая выводит сообщение “Hello World”. Для этого на панели Project перейдите в папку Assets, в данный момент в ней находится только одна папка с названием Scenes. Кликните правой кнопкой мыши внутри папки Assets и выберите из контекстного меню Create – C# Script, как показано ниже:
Назовите созданный скрипт-файл HelloWorld. Содержимое папки Assets после этого должно выглядеть так, как показано на рисунке ниже:
Откройте созданный файл HelloWorld.cs, кликнув по нему дважды. Файл автоматически откроется в Visual Studio, если этого не произошло автоматически, зайдите в Unity – Preferences (или Settings для Mac) – External Tools – External Script Editor – убедитесь, что выбрано Visual Studio и откройте скрипт-файл еще раз. Содержимое файла и вид среды разработки показаны на рисунке ниже:
Когда мы перейдет к разработке игры программный код будет приводиться в виде скриншотов, и в виде листинга (то есть в виде текста). Так его будет удобнее воспринимать, а в случае использования электронной версии издания – копировать и вставлять части кода в свой проект. В дальнейшем мы разберемся с каждой строкой приведенного выше программного кода. Пока лишь обратите внимание на то, что внутри кода содержится два метода: void Start() и void Update().
– void Start() – это метод, который запускается при старте игры в Unity. Это значит, что команды, написанные внутри фигурных скобок этого метода, отработают один раз при запуске сцены в Unity.
– void Update () – это метод, который запускается каждый кадр на сцене. Другими словами, в метод Update() следует писать тот функционал, который требует регулярного обновления в процессе игры.
Добавьте строку кода, которая будет выводить сообщение «Hello World». Для этого внутрь фигурных скобок метода void Start(), как показано в листинге ниже, нужно написать команду print:
Скрипт-файл с названием HelloWorld.cs написан. Однако, чтобы он начал работать, нам следует его подключить к одному из игровых объектов внутри сцены Unity. Давайте создадим такой объект, например, простейший куб.
Все объекты на сцене находятся в окне иерархии объектов (Hierarchy в левой части среды разработки). Пока мы ничего не создали, но можете обратить внимание что на сцене уже существует камера (Main Camera), которая играет роль глаз игрока и освещением Direction Light, без которого на сцене было бы значительно темнее. Чтобы создать игровой объект “Куб”, кликните правой кнопкой мыши (ПКМ) внутри окне Hierarchy и в выпадающем меню выберите GameObject – 3D Object – Cube:
Таким образом, на сцене появится новый игровой объект Cube. Приблизить куб можно с помощью колесика мыши. Чтобы подключить скрипт HelloWorld.cs к объекту Cube, можно просто перетащить (зажав левую кнопку мыши) скрипт-файл на куб.
Теперь, если на сцене выделить объект Cube, кликнув по нему левой кнопкой мыши, то можно увидеть, что в правой части среды разработки (окно Inspector) к кубу в качестве компонента подключился файл HelloWorld.cs (Script-файл):
Можете запустить сцену и проверить ее работу. Для этого нужно нажать кнопку Run в верхней центральной части среды разработки.
После этого сцена запустилась. На ней статично висит куб и кажется, что ничего не происходит, но если перейти в окно Console (в нижней части среды разработки), то можно заметить, что при старте сцены, в окно было отправлено сообщение:
Остановите симуляцию сцены, нажав кнопку Run еще раз. Не забывайте выключать симуляцию сцены, так как изменения, которые вы вносите в редакторе не будут сохраняться при запущенной сцене.
Вместо функции print, можно использовать функцию Debug.Log(), которая является частью движка Unity. Отличие функции Debug.Log() от функции print() заключается в том, что print() не позволяет увидеть какую-либо информацию, после сборки проект. То есть print() выводит информацию только в консоль среды разработки Unity, тогда как функция Debug.Log() выводит сообщение в специальный файл в папке проекта при запуске готовой игры, содержимое которого потом можно просмотреть. По сути, обе эти функции делают одно и тоже, но рекомендуют использовать именно Debug.Log(). В качестве эксперимента вы можете заменить функцию print(“Hello World”) в листинге выше на функцию Debug.Log(“Hello World”).
Обычным сообщением в окне консоли сложно удивить, особенно если речь идет о разработке игры. Поэтому давайте добавим еще немного функций для наглядности. Следует отметить, что многие моменты, связанные с разработкой игры, на себя берет Unity без необходимости написания кода. Иногда даже очень сложный функционал в игре можно реализовать просто настройками внутри среды разработки Unity. Продемонстрируем это на примере ниже.
Сделаем так, чтобы созданный 3D объект Cube при запуске сцены падал вниз. Для этого выделите объект Cube (клик левой кнопкой мыши в окне объектов Hierarchy), после этого в правой части среды разработки станет активно окно Inspector для выбранного игрового объекта – куба.
Содержание окна Inspector зависит от типа выбранного объекта. В нем содержатся свойства объекта, его параметры, подключаемые Script-файлы и т. д. Нажмите в нижней части окна Inspector кнопку Add Component:
После этого появится список с перечнем компонентов, которые могут быть подключены к выбранному объекту Cube. Найдите с помощью поиска компонент Rigidbody и кликните по нему левой кнопкой мыши так, чтобы он добавился в окно Inspector.
Компонент Rigidbody добавляет объекту свойства физики твердого тела, определенного в базовом движке Unity. Другими словами, если назначить этот компонент объекту, то он начнет вести себя в соответствии с законами механики: иметь массу, участвовать в упругих столкновениях, действовать на другие объекты с теми же свойствами и так далее. Запустите сцену еще раз (нажмите Run) и убедитесь, что теперь объект Cube начинает падать вниз.
Создадим еще один объект – плоскость (Plane), которая будет ограничивать падение куба за пределы начальной сцены. Для этого выполните действия, которые уже выполнялись при создании объекта Cube, – в верхней части меню выберите GameObject – 3D Object – Plane (или клик ПКМ в окне иерархии объектов GameObject – 3D Object – Plane):
После создания плоскости переместим ее немного ниже уровня объекта Cube. Для этого выделите объект Plane в окне Scene выберите инструмент перемещения Move Tool, кликнув на ось Y сдвиньте плоскость Plane ниже куба. Используя Move Tool вы можете двигать объекты на сцене:
Запустите сцену еще раз. Теперь объект куб (Cube) падает на плоскость (Plane) при старте сцены. Теперь добавим немного интерактивности. Откройте скрипт-файл, который мы создали ранее с именем HelloWorld.cs и напишите туда небольшой функционал, который будет уничтожать объект Cube при нажатии клавиши пробел. В программном коде ниже показано содержимое файла HelloWorld.cs, а рамкой выделены новые строки кода, которые нужно ввести дополнительно:
В листинг были добавлены следующие строки кода:
– создается условие if, которое уничтожает объект с помощью команды Destroy при нажатии клавиши Space. При этом используется метод Input.GetKeyDown, который срабатывает, после того как игрок нажал клавишу. В скобках Destroy указана конструкция this.gameObject, которая означает что нужно удалить this (этот) игровой объект (game object), то есть тот самый к которому подключен скрипт-файл.
Теперь запустите сцену и проверьте, что она работает следующим образом:
– В окно Console выводится сообщение “Hello World”;
– Куб (Cube) начинает падать;
– Куб падает на плоскость Plane и останавливается;
– При нажатии на клавишу пробел объект Cube удаляется.
Выводы
После завершения всех пунктов рекомендуется вернуться в начало раздела и еще раз внимательно просмотреть всю последовательность действий. Попробуйте самостоятельно внести модификации в некоторые пункты на свой выбор. Так вы сможете более детально разобраться в устройстве взаимосвязей между объектами, скрипт-файлами и некоторыми элементами интерфейса Unity. Ниже приведен некоторый список возможных изменений в проекте Unity, который вы можете внести, опираясь на те инструкции, которые были даны в этом разделе:
– Сделайте так, чтобы в Console выводилось сообщение “Goodbye World”.
– Добавьте на сцену больше объектов произвольной формы, измените их размер, положение и ориентацию. При добавлении на объекты компонентов Rigibdoby они будут сталкиваться и падать.
– Создайте новый скрипт-файлы, чтобы разные объекты могли быть удалены со сцены при нажатии разных клавиш на клавиатуре.
– Перенесите строку кода print("Hello World"); из фигурных скобок метода Start() в фигурные скобки метод Update(), и проверьте работу сцены. Что изменилось в выводе в командной строке Console? Метод Update обрабатывается каждый кадр, тогда как метод Start отрабатывает лишь один раз при старте сцены.
Часть 2. Создание игрового прототипа
Введение
Создание геймплея (игрового процесса) называют игровым дизайном (англ. Game Design). Обычно перед началом разработки следует определиться с основными требованиями, предъявляемыми к игре. Если говорить более обобщенно, то в списке требований, с которыми следует определиться при начале разработки, можно выделить следующие:
– платформа, под которую осуществляется разработка (Windows, WebGL, Android / iOS),
– экран: разрешение и ориентация,
– длительность игровой сессии,
– система управления,
– однопользовательская или многопользовательская игра,
система монетизации приложения.
Цель нашего практикума по разработке заключается в том, чтобы сделать игру и опубликовать ее на одном из онлайн-ресурсов (подробнее об этом см. Часть 7). Поэтому, наша игра должна будет удовлетворять следующим требованиям:
– платформа: WebGL,
– экран: ландшафтная ориентация,
– длительность игровой сессии: 3–5 минут,
– система управления: легкое управление при помощи мыши и клавиатуры,
– однопользовательская игра,
– система монетизации не предусмотрена.
В игре “Dragon Picker” центральным объектом в игре будет являться дракон, который периодически роняет драконье яйцо. Игровой процесс будет заключаться в том, чтобы ловить летящие вниз объекты. Позднее в игру могут быть добавлены различные виды объектов, одни из которых могут добавлять очки в игре, жизни, либо отнимать их. Для нас важно будет добавить один вид объектов (например, драконье яйцо), а разные виды других объектов вы сможете добавить самостоятельно по аналогии.
Важно отметить, что игровой дизайн имеет малое отношение к графическому дизайну, картинка приведенная выше призвана лишь передать общую атмосферу создаваемой игры. При создании игры именно текстуры и визуальное оформление позволяют описать общую концепцию игрового процесса. С игрой будет интереснее взаимодействовать, когда она представлена не только в виде кубиков и блоков. Для оформления игры используются текстуры, а взаимодействие с объектами описывается такими свойствами (компонентами в Unity), как Collider и RigidBody. Подробнее об этих компонентах вы узнаете в следующих главах.
2.1 Создание проекта и первой сцены
Последовательность создания проекта и сцены внутри среды разработки не отличается для различных операционных систем.