Размер шрифта:
Разработка космической стрелялки для android с использованием игрового движка Unity3D
Play

Разработка космической стрелялки для android с использованием игрового движка Unity3D

Доброго времени суток! В этой статье я хочу поделиться опытом разработки своей игры с использованием игрового движка Unity.

Концепция игры заключается в том что вам нужно взять на себя управление звездолетом и уничтожить как можно большее количество метеоритов. На вашем пути будут появляться вражеские звездолеты, которые будут мешать вам и после их уничтожения будут появляться «капсулы» после подбора которых будет доступен новый тип оружия. Игра будет называться Galaxy Desteroid.

Разработка

Графика игры состоит из следующих текстур:

На основе этих текстур были созданы следующие префабы

asteroidrotate — метеорит который нужно уничтожать

enemy — вражеский звездолет

explosionasteroid, explosionenemy, explosionplayer — это анимации взрыва созданные с использованием particle system

gunactivator(s) — это капсулы которые будут активировать разный тип оружия в игре

Все остальное типа laser и т.п. это и есть оружие.

Игра будет включать в себя 2 сцены: главное меню и игровая сцена.

Главное меню

Где «menu» это главное меню а «1» это игровая сцена.

В качестве фона я использовал спрайт с именем «space», на нем нарисован космос.

Далее создаем скрипт «menu.cs» (Щелкаем правой кнопкой → выбираем Create → C# Script) и «вешаем» его на background. background это спрайт со 100% прозрачностью на котором создаются основные элементы управления (START/EXIT) а space служит просто для декорации.

Еще не забываем повесить на «space» скрипт activemenu. Он служит для того чтобы создать анимацию движения фона меню. Потом создаем копию «space» и ставим ее чуть выше.

Содержимое скрипта activemenu:

Должно получиться примерно вот так:

Создание игровой сцены

Игровая сцена состоит из следующих ключевых объектов:

космос (спрайт «space») игрок метеориты вражеские корабли прочее(лазеры и взрывы).

Космос организован также как в главном меню. Здесь можно ничего не трогать.

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

Это можно сделать следующим образом. Создаем новый игровой объект на сцене(у меня это «controlcountobjects»), добавляем к нему компонент boxcollider и растягиваем его вокруг игровой зоны.

Далее добавляем на него скрипт со следующим содержимым:

В этом скрипте происходит удаление элементов при выходе из box collider объекта controlcountobject. Таким образом получается некая зона при выходе из которой происходит удаление объектов.

Генерация метеоритов

Добавляем данный скрипт на камеру:

Метеорит

Выше можно заметить, то что метеориты которые появляются на сцене разного размера и еще они вращаются. Это все потому что метеорит реализован с помощью двух GameObject, где один находится внутри другого (матрешка).

Внешний объект «asteroidrotate» описывает движение метеорита, содержит circle collider и запускает эффект взрыва, в случае столкновения, а «aster» рандомно при своем создании задает скорость направления вращения и размер.

Скрипт для asteroidrotate:

Скрипт для aster:

Игрок

Кидаем спрайт с звездолетом на игровую сцену, добавляем на него box collider(не забываем отмечать «Is Triger»), добавляем rigibody(нужно заморозить Y координату). Все это необходимо чтобы игрок мог взаимодействовать с другими игровыми объектами.

Можно еще добавить компонент particle system, который будет изображать струю из двигателя.

В скрипте для игрока происходит установление «связи» с такими префабами как explosionplayer, laser, laser3x, laser3xhor и т.п. а также организация управления и подбор «капсул» для активации других видов оружия. Управление устроено так что игровой объект просто движется за пальцем пользователя и попутно ведет огонь.

Результат работы скрипта.

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

Создаем скрипт со следующим содержимым и подключаем его на камеру:

Данный скрипт наблюдает за состоянием игрока.

Взрывы

Эффект взрыва можно создать с помощью Particle System. Но тогда он будет зацикленным и вечно повторяться. Чтобы этого не было, на префаб взрыва нужно добавить следующий скрипт.

Выстрелы

Выстрелы генерируются из места нахождения игрока во время его движения.

В скрипте для выстрела нужно задать только скорость и направление.

Генерация противников

Генерация противников устроена аналогично генерации метеоритов.

Содержимое скрипта Enemygenerator:

Логика противника

Поведение противника организовано таким образом, что он просто летит по прямой, ведет огонь и в случае своего поражения может оставить капсулу для активации игроком нового оружия

Выглядит это вот так:

Каждый префаб «капсулы» с оружием просто движется по направлению к игроку и в случае пересечения уничтожается.

📎📎📎📎📎📎📎📎📎📎