Как создать простую 2D-игру на Unity
На создание игры обычно уходит много времени и сил, но движок Unity значительно облегчает процесс. И в 2D-, и в 3D-играх.
vlada_maestro / shutterstock
Сохранитесь и подпишитесь: наш Telegram-канал «Чекпоинт» — уютное место, где мы рассказываем об играх и о том, как они создаются.
С помощью Unity сделаны такие игры, как:
- Outlast;
- Hearthstone;
- Cuphead;
- Rust;
- Firewatch;
- Inside;
- Cities: Skylines и другие.
Из статьи вы узнаете, из каких компонентов создаётся игра и как написать свой первый проект. Вот такие нас ждут этапы:
- Создаем проект в Unity.
- Добавляем первый объект.
- Пишем скрипт.
- Назначаем триггер.
Почему Unity
Unity в несколько раз ускоряет разработку, потому что берёт на себя физику, графику, анимацию и работу со звуком. На движке делают игры практически для всех платформ. Причём пользуются им не только инди-разработчики, но и крупные студии.
Как именно пользоваться движком Unity и создавать крутые проекты, — мы учим на курсе «Разработчик игр с 0 до PRO».
Как установить Unity
Скачиваем Unity на официальном сайте. Новичкам достаточно бесплатного тарифа Personal.
Последняя версия движка может не поддерживаться на старых компьютерах. Если так, то подходящую стоит поискать в архиве версий. Игра для этой статьи написана на Unity 5.5.0f3. Интерфейс более поздних версий не сильно менялся, поэтому руководство подойдёт и для них.
Игры на старых версиях движка потребляют больше ресурсов устройства при меньшей сложности. Кроме того, в них встречаются уязвимости и ошибки. Но главная проблема в том, что некоторые платформы больше не поддерживают игры, созданные на старых версиях, так как было изменено API.
Итак:
- Запустите установщик и следуйте инструкциям.
Кроме самого движка, вам предложат установить Microsoft Visual Studio — интегрированную среду разработки. Это лучшие возможности по работе со скриптами в Unity, но она занимает много места на диске. - Если Microsoft Visual Studio установлена или используется другой редактор кода, уберите галочку. Альтернативами могут быть Microsoft Visual Studio Code (более лёгкая версия Visual Studio) или MonoDevelop — встроенный редактор Unity.
- Когда установка завершится, пора приступать к разработке своей первой игры.
Как создать проект в Unity
Запустите Unity и нажмите кнопку New или New project.
Укажите название проекта, его местоположение на диске и количество измерений. Лучше выбрать 2D, потому что с ним проще разобраться с Unity.
На подготовку файлов уйдёт какое-то время, затем появится окно редактора Unity:
На слабых компьютерах может появляться розовый фон и следующая ошибка:
SceneView Selected shader is expected to have 7 passes
Чтобы устранить ее, нажмите кнопку Gizmos, а потом уберите галочку с пункта Selection Outline:
Затем зайдите в пункт меню Edit и в подменю Graphics Emulation выберите Shader Model 2:
Проект создан, можно начинать работу. Полный код игры вы найдете в репозитории на GitHub. Там же есть все ассеты и скрипты.
Как добавить объект в Unity
1. Перетащите ассет из поля Assets внизу экрана.
Ассетами называют компоненты, которые нужны для создания игры. Для удобства поместите их в отдельные папки:
- Scenes — локации в игре.
- Scripts — скрипты на выбранном вами языке программирования, с помощью которых устроена механика игры.
- Sprites — двухмерные изображения предметов, персонажей, фонов и так далее.
- Prefabs — заготовки игровых объектов.
СПРАВКА
Создать папки и добавить файлы можно как в Unity, так и просто в обозревателе Windows. Создавать скрипты лучше с помощью движка, потому что он будет автоматически добавлять заготовку кода (подробнее об этом ниже).
2. Скопируйте несколько картинок игровых объектов
Теперь перетащите нужный спрайт из поля с ассетами в окно сцены. Чтобы сквозь него не пролетали другие объекты, добавьте к нему компонент типа Collider 2D из категории Physics 2D. Выбирайте тот тип, который соответствует форме спрайта: например, Circle Collider 2D (если это шар) или Box Collider 2D (если квадрат).
Коллайдер позволяет указать границы объекта, через которые не сможет пройти другой объект, для которого также указаны рамки.
3. Чтобы подогнать края под размер спрайта, нажмите Edit Collider.
4. Добавьте компонент Rigidbody 2D: именно он отвечает за физику объекта
5. Теперь приступаем к настройкам
Например, поставить галочку возле Freeze Rotation, чтобы запретить объекту вращаться. У нас шар, поэтому замораживать вращение не нужно. В поле Interpolate укажите Interpolate — это сделает движение объекта более плавным.
Чтобы изменить скорость падения, задайте гравитацию для всего проекта. Сделать это можно в меню Edit —> Project Settings —> Physics 2D.
В правом окне появятся настройки, где можно менять гравитацию по оси Y или оси X. По умолчанию она равна –9.98f, но для 2D-игры лучше подойдет –30f.
Если нужно, смените Gravity Scale самого объекта — множитель гравитации. Попробуйте разные значения, чтобы подобрать подходящую скорость.
6. Теперь нажимаем Play над сценой и смотрим, как объект падает.
Чтобы он не летел в пустоту, поставьте под ним платформу.
7. Добавьте в игру спрайт, который изображает землю, и укажите ему подходящий коллайдер.
Обратите внимание, что Rigidbody 2D указывать не нужно, иначе платформа будет падать.
8. Теперь сохраняем платформу как заготовку
Для этого перетащите её из боковой левой панели в папку Prefabs. Оттуда добавляются копии объектов на карту. В редакторе вы можете растягивать и поворачивать объекты: попробуйте это сделать, чтобы создать простую локацию.
Как добавить скрипт в Unity
Поведение объекта прописывают с помощью кода. В Unity для этого используются языки C# и JavaScript. Скрипты тоже являются ассетами и добавляются к объектам в виде компонентов.
1. Начать создание скриптов можно с класса для управления персонажем
Для этого зайдите в папку Scripts, нажмите правую кнопку, выберите
Create —> С# Script. Дайте скрипту понятное название вроде PlayerControl.
2. Откройте созданный скрипт в любом удобном вам редакторе. Вот как выглядит шаблон кода в Unity:
3. Добавьте скрипт в качестве компонента для объекта и приступайте к написанию кода. Начните с создания полей.
4. Внутри метода Start() инициализируйте
Rigidbody 2D
5. Теперь в Update() добавьте следующий код:
Для указания координат используются статические классы Vector2(x, y) и Vector3(x, y, z) — они пригодятся не только для написания скрипта ходьбы, но для любых других целей, в которых требуется указание позиции.
Unity по умолчанию устанавливает клавиши, которые меняют движение по осям:
Так, если пользователь нажмёт стрелку вправо или D, то направление по оси X будет равно +1, если влево, то −1, если ничего не предпримет — 0. Чтобы получить это значение, используется метод GetAxis() статичного класса Input.
Прыжок срабатывает после нажатия отдельной кнопки. Это нужно, чтобы нельзя было лететь вниз при нажатии стрелочки вниз или S.
Этот же скрипт позволяет прыгать даже в воздухе. Есть несколько способов запретить двойные прыжки, но сейчас пройдёмся по основным моментам.
Вот как работает игра с таким управлением.
6. Обратите внимание, что камера следует за игроком. Чтобы это реализовать, добавьте скрипт:
Его нужно подключить к объекту Main Camera:
7. Чтобы передать скрипту объект игрока (в нашем примере это круг), в настройках компонента указывается значение для поля Player.
Если не получается найти нужный объект в списке, просто перетащите его.
По тому же принципу работает полоса здоровья — её положение зависит от координат персонажа:
С помощью transform.localScale, кстати, можно менять размер мяча. Например, если немного приплюснуть его при приземлении, а потом вернуть в исходное состояние, — это создаст более мультяшный эффект.
Как добавить триггер в Unity
Ещё один важный инструмент — триггеры. С их помощью отслеживают попадание чего-либо в определённую область. Для этого либо создается отдельный объект, либо триггер прикрепляется к существующему.
Это пригодится, если нужны препятствия. Например, создать канцелярские кнопки, о которые может уколоться мяч.
1. Чтобы сделать это, добавьте спрайт на локацию, создайте коллайдеры и поставьте галочку Is Trigger:
Обратите внимание, что тут сразу три коллайдера, но триггер установлен только на тот, который находится на острие кнопки.
2. Чтобы обработать событие срабатывания триггера, используйте скрипт:
Так кнопка сначала отнимет здоровье игрока, а потом исчезнет. Ещё можно добавить проверку, какой именно объект запустил триггер (объект будет передан в аргументе obj типа Collider 2D).
То же самое легко проделать и с аптечкой, но уже не отнимать здоровье, а прибавлять его. А чтобы персонаж при падении не летел в пропасть, добавьте область, при попадании в которую объект будет перемещён в точку Respawn.
Заключение
Unity позволяет относительно легко создавать крутые игры. Это в разы быстрее и эффективнее, чем писать всё с нуля, но при условии, что вы хорошо умеете пользоваться этим движком и знаете C# или JS.
Всему этому мы обучаем на курсе «Разработчик игр на Unity». Вы освоите все необходимые инструменты, а в конце обучения у вас будет несколько проектов, которые не стыдно будет показать сообществу геймеров и создателей игр.