Привет, Пикабу! В прошлом посте я рассказывал как написал и опубликовал игру. С того момента прошло немало времени. За это время я успел написать ещё одну игру, которая будет про карты и поиск покерных комбинаций, но она проходит модерацию, поэтому про неё расскажу чуточку позже. Сегодня же я хочу рассказать про небольшую игру, которую сделал в качестве отдыха между написание других игр.
Идею игру я взял из своих старых заметок, где накидывал идеи игр, которые мне в тот момент казались неплохими. Спустя время, я перечитывал заметки и удалял те, что начинали казаться совсем не интересными. Так что идея текущей игры мне до сих пор кажется не самой плохой, а значит её можно реализовать.
Так в чем смысл игры? Смысл игры максимально прост - нужно с помощью импровизированной катапульты организовать побег хрюшки с фермы. Для ЛЛ: выглядеть это все стало как-то так
Реализация
Как и обычно, игру я писал на Unity.
Первым дело я начал реализовывать катапульту(хотя это скорее требушет). С этим все оказалось достаточно просто как мне это показалось вначале . Создаем объект в форме длинной палки, к нему добавляем Box Collider 2D, чтобы через него не проваливались другие объекты, так же нам понадобится компонент Hinge Joint 2D (шарнирная петля, 1 - на рисунке ниже), который позволяет закрепить объект к точке в пространстве, вокруг которой данный объект может вращаться. Добавим ещё один компонент Box Collider 2D (2 - на рисунке), чтобы при наклоне влево хрюшка не падала с катапульты. Всё, катапульта требушет готова!
2. Создание противовеса. С этим все оказалось ещё проще:
При нажатии левой клавишей мыши или удерживанием тапа по экрану начинаем увеличивать масштаб противовеса(в нашем случае, это тыква) и увеличиваем массу. Делаем это пока не отпустим нажатие или размер не достигнет максимума. В коде это выглядит примерно так.
Можно увидеть переменную canChangeSize, которую добавил, чтобы нельзя было менять масштаб уже после того, как груз летит вниз. Для того, чтобы при создании противовеса - он сразу не падал вниз, я отключил ему гравитацию, а после завершения возвращал её в значение = 1. С реализацией этого механизма я допустил достаточно тривиальную ошибку, но может кто-то тоже столкнется с ней. Изначально в методе ChangeBallSize я менял массу не на Time.deltaTime, а на постоянное число, из-за этого на разных устройство при одном и том же размере груза, его масса существенно отличалась. Напомню, что Update вызывается каждый кадр. В итоге на компьютере метод вызвался каждые 0.006 секунд, а на телефонах примерно раз в 0.017.
3. Создание забора с отверстием
Пока я отлаживал игру, то отверстием в заборе служил префаб, коснувшись которого, уровень был засчитан.
Ближе к концу разработки я начал думать о том, как же на самом деле это должно выглядеть.
Идеи приходили разные: одна изумительней другой
- добавить бочку, через которую будет пролетать хрюня;
- добавить портал в заборе, как в одноименной игре, через который можно было бы попасть по ту сторону забора.
В итоге я остановился на решении строить забор из множества дощечек, выбирать случайную позицию, где этих дощечек не будет, и генерировать число, отвечающее за высоту отверстия, то есть сколько дощечек нужно пропустить.
С забором определились. После забора встал вопрос: как обыграть генерацию следующего уровня? Лучшим решением посчитал добавить грузовик, в который хрюня приземляется и покидает ферму. В грузовике есть водитель, который помогает нам :)
Чтобы как-то обогатить игру, я решил добавить скины для хрюшек. Скины, которые бы ни на что не влияли, только визуально разнообразили бы игру. Я далек от людей искусства, поэтому это часть для меня сложней программирования и большого разнообразия не получилось. Четыре скина, где второй скин должен был изображать ниндзя-хрюшку, но больше стал похоже на хрюшку завсегдатаю БДСМ-вечеринок.
Ну всё, игра готова?!
Казалось, что да. Но когда начал тестировать, никак не удавалось достичь баланса, чтобы противовес одновременно мог запустить хрюшку в самую верхнюю точку и в самую нижнюю. Я часами отлаживал этот момент, даже добавил своеобразную трассировку в виде префабов, которые создаются на текущей позиции хрюшки в каждый момент времени.
Чтение статей и книг по геймдеву и костылях в них, не проходит даром. Решением стало изменение высоты пола, в зависимости от массы противовеса. Конец катапульты сталкивается с полом и позволяет запустить снаряд, как максимально вверх, так и вниз.
Вот теперь всё
Подготовим промо-материл, придумаем название, отправим на модерацию, исправим замечание модерации и игра опубликована.
Спасибо, что прочитали статью. Надеюсь, вам понравилось.
Буду рад ответить на ваши вопросы, а
поиграть в игру можно тут