Как создать 2D-шутер в Unity
Создание шутеров позволяет научиться многим вещам, которые пригодятся в разработке игр других жанров.
vlada_maestro / shutterstock
На примере шутеров можно научиться нескольким очень полезным приемам работы с Unity: инстанцированию префабов, созданию логики для NPC, изменению здоровья персонажей и так далее.
Перед чтением статьи рекомендуем ознакомиться с другими нашими материалами о базовых навыках работы с Unity, которые пригодятся для создания шутера:
Что делает шутер шутером
Шутер (от англ. Shoot — стрелять) — это игра, в которой игрок должен стрелять из какого-либо оружия (пистолет, лук, лазерная винтовка), чтобы побеждать врагов. Добавления этой механики в игру достаточно, чтобы ее можно было назвать шутером.
Кроме стрельбы, также можно реализовать и другие возможности:
- управление транспортом;
- прокачку персонажа;
- торговлю;
- исследование мира;
- крафтинг (создание игровых предметов).
При этом не важно, в каком сеттинге находится игра (фэнтези, фантастика, Средневековье) и сколько в ней измерений (два или три), — она все равно будет считаться шутером, если есть возможность стрелять. Поэтому в статье основное внимание уделено именно этой механике.
Стрельба
Есть два основных способа реализовать стрельбу:
- Префабы. Добавляет на карту снаряд, которому можно прописать поведение — направление полета, действия при попадании и так далее.
- Лучи (Raycast). Движок рисует невидимую линию от какой-нибудь точки в заданном направлении и возвращает данные о том, есть ли что-нибудь на пути.
Каждый стоит разобрать более подробно.
Начало выстрела
В первую очередь нужно подготовить всё, чтобы персонаж мог стрелять. Начать стоит с создания точки, откуда будет лететь снаряд или направляться луч. Для этого добавьте пустой объект с именем FirePoint и поместите его внутрь персонажа, расположив возле дула его оружия:
Затем нужно написать код, который позволит персонажу вращаться вместе с этой точкой. Создайте скрипт Controller.cs и прикрепите его к персонажу:
Теперь персонаж сможет двигаться и вращаться вместе с объектом FirePoint:
После этого можно приступить к скрипту, который позволит стрелять. Назовите его Shooting.cs, добавьте к персонажу и используйте следующий код:
Теперь можно разобрать оба способа стрельбы.
Стрельба снарядами
Для начала нужно создать снаряд. Для этого перетащите на карту спрайт и назовите его Bullet:
Добавьте коллайдер с триггером и создайте скрипт Bullet.cs, в котором будут обрабатываться попадания (он будет рассмотрен чуть позже). Сохраните объект в качестве префаба, а потом перетащите его в компонент Shooting.cs. Туда же перетащите FirePoint:
Теперь нужно написать метод, который будет создавать (инстанцировать) новые снаряды на карте:
Вот как это выглядит:
Пока снаряд остается на месте. Чтобы это исправить, нужно прописать в Bullet.CS этот код:
Теперь снаряд будет лететь и уничтожаться при попадании во что-то:
Стрельба лучами
В первую очередь нужно добавить персонажу объект Effect -> Line.
Укажите в X — 1, а в Z — 0, а затем поставьте галочку Use World Space. После этого можно изменить толщину линии, поменять цвет, закруглить края и так далее.
Прикрепите получившуюся линию к скрипту Shooting.cs и добавьте следующий метод:
Вот как это выглядит:
Теперь, выбрав подходящий способ стрельбы, можно реализовать работу с очками здоровья.
Получение повреждений
За очки жизни будет отвечать скрипт Health.cs — его нужно добавить всем объектам, которые должны получать повреждения при попадании.
Теперь нужно изменить код попадания внутри класса Bullet.cs:
Обновленный метод проверяет, есть ли у объекта, в который попал снаряд, компонент Health. Если он существует, то вызывается метод Hit(), который отнимает здоровье.
Примерно такой же код можно добавить в метод запуска луча.
NPC для 2D-шутера
Чтобы игра не превратилась в стрельбу по неподвижным мишеням, нужно написать скрипт поведения объектов — NPC.cs:
Так создается примитивная логика поведения персонажа. Он может двигаться или стоять на месте, а если заметит героя (это проверяется с помощью Raycast), то начнет стрелять.
Заключение
Это довольно простой шутер, но полученных знаний должно хватить, чтобы разработать что-то более сложное и интересное. Если вы хотите глубже погрузиться в тему разработки игр на Unity, читайте статьи в нашем блоге и записывайтесь на курс «Профессия разработчик игр на Unity».