С возвращением. В этой части я хочу рассказать тебе о том как я писал код для своей первой игры, а так же поделится с тобой альфа версией игры, что бы ты смог не только прочитать, но и поиграть в мой шедевр. Если ты не читал первую часть - рекомендую, что быть в курсе.
На чем остановились
В прошлой части я подготовил графику и закинул ее на сцену в unity. Пришло время оживить нашего пирата и скелетов.
Главный герой
Я решил начать разработку с главного персонажа. А почему нет? Из задач, которые мне предстоят:
- Разворот персонажа в зависимости от места клика
Для реализации разворота, я просто отслеживаю клики, смотрю position текущего клика и проверяю, он больше значения ширины экрана/2. Все очень просто.
Скелеты
После создания кое-какого главного персонала, я приступил к врагам. Тут список задач почти такой же:
- Преследование игрока
- Удаление объекта после смерти
С преследованием игрока все просто, у меня есть координаты хитбокса игрока и, очевидно, есть координаты текущего скелета. Я плавно, с определенной скоростью перемещаю скелета к хитбоксу игрока, пока дистанция между ними не будет такой, чтобы скелет мог ударить игрока.
Удаление умершего объекта - очень важная часть. Потому что, если просто скрывать павших скелетов, то рано или поздно игра начнет жутко лагать. Поэтому, после смерти скелета, его кости лежат еще 2 секунды и после этого объект уничтожается.
Анимация персонажа и скелетов
По анимации у меня есть готовая секвенция картинок для разных состояний. Подразумевается что персонаж стоит на месте, поэтому мне не понадобилась анимация хождения. Кстати, как ты считаешь, может было бы прикольнее, если бы персонаж мог перемещаться? Напиши мне об этом в комментариях.
Боевая система
У меня возникла "проблема", нужно было придумать как реализовать боевую систему, что бы она была и не невозможной, и не совсем простой. Я решил сделать следующим образом. Дистанция, с которой игрок достает до скелетов больше, чем дистанция, с которой скелеты достают до игрока. С одной стороны, это не совсем логично, но с другой стороны, когда дистанция совпадает - эта игра становится невозможной аннигиляцией игрока, потому что скелеты гораздо быстрее реагируют на сокращение дистанции до необходимого значения для удара.
Респаун
По поводу респауна, я хотел сделать классическую историю, что через определенное время скелеты воскрешаются и начинают подходить к игроку, но так же каждые 10 убитых скелетов время респауна сокращается. Я решил использовать кадры, для работы с респауном. Изначально, респаун будет составлять 1500 кадров, то есть каждые 1500 кадров будет спауниться новый скелет. И каждые 10 убитых скелетов количество кадров будет уменьшаться на 100 кадров.
Я думал, что буду использовать одну модельку скелета и спаунить ее с разных сторон, переворачивая картинку скелета, но тут меня ждала небольшая засада. С каждым новым респауном скелеты, которые уже идут, тоже начинали крутится, довольно забавно. Чтобы решить данную проблему, я создал 2 разных скелета с разных сторон и, в зависимости от места респауна, буду спаунить либо один объект, либо другой.
Для определения стороны, с который нужно создавать скелета, я просто беру рандомно число 0 или 1 и, в зависимости от него, создаю скелета либо слева, либо справа.
Меню паузы
Как я реализовал паузу в игре? Я просто приостановил на время паузы выполнение игры. По клику на Escape время приостанавливается и появляется меню паузы, а по нажатию на Resume или Escape, все встаёт на круги своя. И все)))
Не стал пока мудрить с меню паузы в игре и добавил 2 кнопки:
- Resume (интересно что же делает эта кнопка)
- Menu (переход в меню)
Пункт меню - это пока заготовка, так как меню ещё не реализовано, реализация меню дальше.
UI
В моем шедевре предельно простой UI, только счётчик количества убитых шкелетов.. и все)
Тут все предельно просто, в разделе «Респаун» я реализовал респаун, который уменьшается каждые 10 убитых скелетов, то есть счётчик у нас уже есть. Все, что мне нужно сделать, это вывести его, иии.. вуаля, UI готов)
Меню игры
Чтобы сделать меню, я решил создать новую сцену и на неё закинуть то, что необходимо для меню - это фон и кнопки. По кнопкам все просто, 2 кнопки:
- Play
- Exit
По кнопке Play просто происходит загрузки сцены с игрой, чтобы делали все это время, а по кнопке Exit, происходит истинная магия.. игра закрывается))
Итог
Как и обещал, самая-самая первая версия игры, которой я могу поделиться с тобой, моим читателем. Скачивай, играй, рассказывай как тебе. Ссылка на игру.
Я буду допиливать эту игру, добавлю музыку, различные виды скелетов, различные скины для персонажа и ещё по мелочи. Поэтому подписывайся, чтобы быть в курсе.
Увидимся.