Создание простой кликер-игры с нуля
В последние несколько лет набирают большую популярность игры такого жанра, как «кликеры». Мне самому очень интересно играть в них, но не менее интересно создавать игру — кликер самому. Благодаря такому движку как Unity, создать свой шедевр не составит труда даже простому новичку. Давайте перейдем к делу.
Что нужно сделать?
- Подумать, почему и на что мы должны кликать?
- Что должно произойти, когда мы кликнем?
- Что должно произойти, если не кликнем?
- Мы должны кликать в любое место на экране.
- При клике должен смениться объект.
- При игнорировании — проигрыш.
О чем будет игра?
Игроку нужно вовремя выбрать либо меч, либо щит, в зависимости от того, что будет падать сверху. То есть, падает меч — выбираем меч, падает щит — выбираем щит. При неправильном выборе игрок просто проиграет. На словах всё довольно просто, а в реализации еще проще.
Откуда мне новичку брать красивый спрайт и фон? Ответ: нарисовать самому.
Тут нет ничего сложного, так как мы рисуем в Adobe Illustrator. Даже если у вас нет опыта в рисовании, то опять же не расстраиваемся, так как я покажу вам всё по деталям.
- Меч
- Щит
- Задний фон
- Ветка с листьями
Техника проста и покажу на примере меча:
- Рисуем контур
- Заливаем цветами
- Рисуем тени
И всё, наш меч готов!
Также проделываем и с другими. Не пугайтесь, если в начале одно ваше творение покажется вам далек от идеала, ведь в совокупности они будут смотреться, как картина Ван Гога. Шутка. А может и нет.


Задний фон сделаем еще хитрее.
Нарисуем зеленый прямоугольник и используем градиент. Выглядит вот так:

Можно сказать, что уроки художества на этом закончены и мы наконец идем в Unity.
В первую очередь закинем наши спрайты, а меч и щит перетащим в окно иерархии, так как нам нужно будет создать из них префабы и не только.

- Добавляем Rigidbody 2D и установим значение “0” в поле Gravity Scale, чтобы щит стоял на одном месте.
- Добавим Circle Collider 2D и установим галочку в Is Trigger, чтобы отслеживать действия.
Далее украсим игру спрайтами, нарисованными ранее. Первым делом кидаем фон.

- Размещаем ветки сверху
- Добавим снизу бревно
- Посередине разместим мост
Основной секрет дизайна такой: сверху и снизу разместим ветки, а у лесенки уменьшим значение прозрачности. Зачем это делать?
Дело в том, что таким образом мы создаем некую иллюзию пространства. Игроку будет казаться, что есть передний объект, задний и горизонт. И это классно!
Теперь создадим кнопку, которая будет занимать весь экран. Чтобы создать кнопку нужно в иерархии нажать на UI -> Button. Далее:

- Нажимаем на Color.
- Устанавливаем значение «0» в поле А, которая отвечает за прозрачность нашей кнопки.
- Убеждаемся, что кнопка стала такой, какой мы хотели.
Таким же путем создаем текст, чтобы показывать наш текущий счет и рекорд.
И наконец, мы дошли и до программирования.
using System.Collections; using System.Collections.Generic; using UnityEngine; using UnityEngine.SceneManagement; using UnityEngine.UI; public class MainScript : MonoBehaviour < public GameObject[] prefabs; //массив префабов public GameObject[] players; //массив объектов public static int score,record,n,k = 0; //счёт, рекорд, "n,k" - счетчики public Text scoreT; //текст на экране void Start() < score = 0; Time.timeScale = 1; StartCoroutine (PrefabsCreate ()); scoreT = scoreT.GetComponent(); record = PlayerPrefs.GetInt ("Record"); > void Update() < n = Random.Range (0, prefabs.Length); // генерация случайных чисел //от 0 до кол-ва префабов scoreT.text = score + "/" + record; // вывод счета и рекорда if (score >= record) < record = score; PlayerPrefs.SetInt ("Record", record); // сохранение рекорда >> IEnumerator PrefabsCreate() < // создание случайного префаба while (true) < Instantiate (prefabs [n], new Vector2 (0, 6.5f), Quaternion.identity); yield return new WaitForSeconds (0.5f); >> public void BtnClick(string btn)< // метод для кнопок if(btn == "Click")< Time.timeScale = 1; players [k].SetActive (false); // отключаем активный объект(меч, щит. ) k++; if (k >= prefabs.Length) < k = 0; // обнуляем счетчик, если k превышает кол-во префабов >players [k].SetActive (true); // активируем объект (меч, щит. ) > > >
using System.Collections; using System.Collections.Generic; using UnityEngine; public class PlayerScript : MonoBehaviour < void OnTriggerEnter2D(Collider2D other)/ столкновение объекта (меч, щит) // проверка на соответствие тэга if (other.gameObject.tag != gameObject.tag) < Time.timeScale = 0; MainScript.score = 0; >else < MainScript.score++; Destroy (other.gameObject);// уничтожение префаба >> >
Что творится в этих методах?
Start (). Он запускается каждый раз, когда мы запускаем игру или же перезапускаем сцену. Всё что прописано внутри этого метода выполняется только один раз. Поэтому мы туда записываем: счет равный нулю, запуск корутины (то, что отвечает за создание префабов), значение времени.
Update (). Выполняется раз за кадр. Сюда удобно записать то, что постоянно должно обновляться. В нашем случае: показатель счета и рекорда, рандомное значение n от которого зависит что создастся – меч или щит.
BtnClick (). Вы спросите, почему перед этим методом стоит «public»? Нам необходимо, чтобы он отражался в самом Unity и мы могли прописать слово «Click», чтобы отследить, на какую именно кнопку мы нажимаем, хотя и кнопка всего одна, знать чуточку больше никому не помешает.
Сюда запишем то, что должно произойти после нажатия на кнопку. При нажатии должно меняться с меча на щит и наоборот, устанавливать значение времени «1», так как при проигрыше она обнуляется.
OnTriggerEnter2D (). Проверяет столкновение объекта. Если теги обеих объектов совпадает, то счет увеличивается на единицу, а префаб уничтожается. Если теги разные, то проигрыш – останавливается время и обнуляется счет.
Осталось добавить эти самые теги. И тут всё очень просто:

- В окне Inspector нажимаем на Tag.
- В выпавшем списке в самом низу нажимаем на Add Tag.
- Жмем на плюсик и называем тег как хотим.
После создания также нажимаем на Tag и выбираем нужный.
Осталось перенести скрипты нужным объектам и заполнить некоторые поля. Создадим пустой объект и добавим скрипт «Main Script», а «Player Script» добавим в наш меч и щит.

С полной уверенностью могу сказать, что игра готова. Запускаем и наслаждаемся своим первым творением.

Всем добра и удачи в геймдеве!
- кликер
- игра с нуля
- юнити
- unity
- создание игр для android
- adobe illustrator
- простая игра на юнити
Как создать простой кликер на Unity

Приветствую! Многие начинающие разработчики Unity всегда начинают своё обучение с каких-либо простых вещей. И поэтому я решил показать пример создания максимально простого кликера.
Делать кликер мы будем всего с помощью двух UI элементов.
- Кнопка, при нажатии на которую, будет увеличиваться наш счётчик.
- Текст, в котором будет отображаться наш счётчик, то-есть суммарное количество наших кликов по кнопке.
Давайте их создадим. Но перед этим создадим игровой объект canvas, ведь ни один элемент UI не может существовать без канваса. Для этого ПКМ жмём на любое ПУСТОЕ место в окне Hierarchy. Дале выбираем UI — Canvas.

После созданного канваса, по такому же принципу создаём ещё 2 объекта, которые нам непосредственно понадобятся для нашего кликера:
- Жмём ПМК —> UI — Legacy — Button
- Жмём ПМК —> UI — Legacy — Text
Далее с помощью окна Inspector настраиваем свой канвас, кнопку и текст как Вам удобно. У меня получилось как-то так:

50% кликера сделано. Осталось чуть чуть.
Теперь перейдём к созданию C# скрипта при помощи вкладки Project, и назовём его, например, clicker. Впишем в него следующий C# код:
using UnityEngine; using UnityEngine.UI; public class clicker : MonoBehaviour < private int num; public Text textNum; public void addNum() < num++; textNum.text = num.ToString(); >>
Давайте разберём, что мы тут сделали:
Поскольку мы будем работать с UI элементами(кнопками и текстом), то в строке №2 мы добавили специальную библиотеку: using UnityEngine.UI;
Далее в строке 6 и 7 мы создаём две переменные. В переменной num храним информацию о количестве кликов. А в переменной textNum будем хранить ссылку на уже нами созданный текстовый элемент UI, чтобы в дальнейшем туда записывать количество наших кликов из переменной num.
В строке №9 мы создали функцию addNum(), которая увеличивает наш счётчик num на +1, и в ледующей же строке, конвертирует наше число num, в текст, и записывает этот текст в textNum.text.
На этом всё, счётчик готов. Как видите он очень простой. Единственное что осталось сделать, это связать наши объекты с данным скриптом. Для этого необходимо выполнить 4 простых действия, которые указаны на картинке:

- (1) — перетаскиваем наш скрипт clicker в окно Inspector, для объекта Button(кнопки)
- (2) Перетаскиваем объект Text(наш счётчик) в поле Text Num
- (3) Перетаскиваем объект Button(кнопку) в событие On Click
- (4) Указываем наш скрипт, в котором имеется наша функция: clicker -> addNum()
На этом всё. Надеюсь я максимально подробно объяснил принцип работы счётчика. Если у меня это получилось, буду рад вашим лайкам 🙂
Как создавать игры в жанре кликер: несколько историй от разработчиков
В конце 2022 года команды начинающих разработчиков из студии GameBox соревновались в создании кликеров. Результатом стали девять проектов, многие из которых уже нашли своего издателя. В этом материале гейм-дизайнер студии Diamond Head Сергей Котляров рассказал, что потребуется для создания кликера и какие особенности разработки отличают жанр. А команды из GameBox поделились своим опытом и впечатлениями от работы.
438 показов
6.1K открытий
Как же сделать кликер? Конечно, можно было бы сослаться на всем известный мем
Но мы топим за обучение и обмен знаниями, поэтому давайте изучим детали создания кликера.
Что такое кликер?
Это любая игра, где кор-геймплей строится на постоянном повторении одного действия для достижения результата. А именно простого клика по экрану. Жанр очень часто объединяют с айдлером (от англ. idle game, что значит «ленивая игра»), в котором игровой процесс строится на менеджменте ресурсов во время игровых сессий и их на накоплении в перерывах. Если суммировать, большинство кликеров и айдлеров можно свести к одному мультижанру — инкрементальным играм, в которых игрок развивается и повышает скорость добычи ресурсов в разных математических прогрессиях. При этом ничего не мешает поверх этой формулы добавить дополнительные механики. Как, например, это сделано в легендарной Tap Titans, в которой, кроме «бей монстров за монеты, вкладывай монеты в урон, чтобы бить монстров», есть еще и огромная мета с клановыми боссами, артефактами и прочими активностями.
С сутью и механиками разобрались, настала очередь сеттинга и контента. Кликерам доступен очень широкий разброс по наполнению. В большинстве случаев упор делается на визуальные изменения, чтобы обозначить прогресс игрока. Так, в ExoMiner с каждым улучшением корабли летают быстрее к местам добычи ресурсов, а главное здание обрастает новыми модулями. Но можно обойтись и без этого, как в условно текстовой Universal Paperclips. Вся прогрессия в этой игре заключается в цифрах и словах-сущностях. Полная свобода в выборе сеттинга и сложности контента, а значит, ограничение только одно — фантазия разработчика.
«Мы решили взять за основу механику классического Cookie Clicker и прикрутить к концепту ходячего замка. За визуальную прогрессию отвечает апгрейд главного здания, за числовую — множитель золота. Причем в виде референса замка и его улучшений выступают здания православных церквей. Таким образом, у нас сформировалась идея владельца ходячего замка, который силой алхимии должен улучшать свои владения», — комментируют разработчики GameBox, создатели Walking Castle Dynasty.
Кадр из игры Cookie Clicker
«Проект делали под вдохновением от визуала и геймплея игры „Тургор“ от Ice Pick Lodge и от книги „Снег, зеркало, яблоко“ Нила Геймана. В итоге получился расслабляющий кликер, где жизнь показана через метафору роста дерева в ледяной пустыне, но с бьющимися сердцами близких людей», — комментируют создатели Warm Frost.
Кадр из игры «Тургор» от Ice Pick Lodge
Какой движок и язык программирования подойдет для создания кликера?
Следующим шагом в разработке будет выбор инструментов. И в этом плане кликеры вновь предлагают разработчикам полную свободу действий. Кликеры можно писать на любом языке, в котором есть поддержка математических методов и функций. Подойдет и UE5 с Blueprints, и Unity с C#. Если целевая платформа — смартфоны, то чаще выбирают Unity.
«Мы взяли для разработки Unreal Engine. Конечно, для подобных проектов лучше подойдет Unity, он больше заточен под подобные игры. Но команда постаралась сделать большой проект, который хорошо смотрится на ПК. На наш взгляд, главный плюс UE — то, что он более дружелюбен к новичкам», — комментируют создатели Walking Castle Dynasty.
Кадр из игры Walking Castle Dynasty
«Для нас преимуществом Unity было то, что, помимо unity-прогера, гейм-дизайнер и саунд-дизайнер тоже могли работать в движке в своих областях и ветках. А главным недостатком — то, что работа с интерфейсом не особо интуитивна. К тому же у нас не было аниматора, и художникам пришлось покадрово рисовать движения повозки, которые потом скреплялись в атласе», — комментируют создатели Merchant Traveler.
Кадр из игры Merchant Traveler
Какие специалисты нужны, чтобы сделать кликер?
Костяк стандартный: гейм-дизайнер и разработчики. Если планируете повествование — нарративный дизайнер, а если хорошее звуковое оформление — саунд-дизайнер. В кликерах устоялся стандарт на визуальную прогрессию, так что в приоритете художественные специальности: 2D- и 3D-художники, аниматоры. Лишним не будет отдельный человек на роль менеджера-продюсера, который сможет заниматься вопросами внешней коммуникации — организацией встреч, переговоров с издателями и поиска инвесторов.
Стоит учесть, что на релизе все не заканчивается. Проект должен продолжать развиваться, чтобы у пользователей были причины к нему возвращаться. Потребуется добавлять контент и активности, проводить ивенты и работать с комьюнити. А значит, понадобятся серверы для лидербордов, боевой пропуск с сезонами и, соответственно, человек, который может это спланировать и реализовать. Лучше всего сразу заложить в дизайн игры точки развития, которыми будете оперировать во время пострелизного развития. И подумать, кто будет этим заниматься.
«У нас была команда из семи человек: гейм-дизайнер, юнити-разработчик, саунд-дизайнер, нарратив-дизайнер и несколько 2D-художников», — комментируют создатели Merchant Traveler.
Кадр из игры Snow goose tales
«Мы работали впятером: два 2D-художника, нарративный дизайнер, гейм-дизайнер и unity разработчик», — комментируют создатели Snow goose tales.
Как правильно ставить сроки, делегировать задачи и контролировать работу?
Главное — трезво смотреть на возможности команды. Оцените скиллы своих партнеров по разработке, а потом поделите их на два. Скиллы, а не партнеров. Примерно так же нужно поступить со временем разработки: посчитайте, сколько человеко-часов уйдет на производство того контента, который вы запланировали, а потом удвойте это. Так вы получите примерные сроки и дедлайны. Можете еще добавлять время сверх этого в зависимости от того, насколько команда неопытна, как проводится тестирование продукта и осуществляется контроль качества. Ну и постарайтесь не затягивать. Как можно быстрее выводите прототип в тестирование и смотрите, как он себя показывает по нужным вам метрикам.
«На разработку давалось около месяца. В самом начале составили график работы с датами и списком задач. В отдельный список „хотелок“ вынесли те фичи, на которые времени, скорее всего, не хватит. Но так вышло, что даже весь основной список не освоили. Гейм-дизайнер и наставник следили за выполнением задач и вовремя провели фичекат, так что в срок мы уложились», — комментируют создатели Snow goose tales.
Туториал к игре Snowball Defense
«За процессом пристально следил тимлид и наставник. В начале разработки составили список необходимых элементов для MVP. Далее занесли порядок действий в дорожную карту. И в конце занесли мелкие задачи в ToDo-лист, который обновлялся от созвона к созвону. Благодаря организации работы смогли уложиться в дедлайн. Правда, все реализовать не удалось. Не хватило времени и знаний, чтобы правильно сделать туториал, поэтому он в виде текста на данный момент. Благо игра несложная. Также не успели разграничить пушки с точки зрения гейм-дизайна. Сейчас они практически одинаковые, а планировались с разнообразными пассивками», — комментируют создатели Snowball Defense.
Кадр из игры Warm Frost
Кадр из игры Winter Cat House
«Самой большой сложностью для нашей команды стала разработка игры практически без гейм-дизайнера и тимлида; 2D — за короткий срок нужно выбрать стилистику визуала попроще, иначе сложно будет подгонять все под единое оформление; Unity — не оставлять на самые последние моменты ключевые вопросы и решения; 3D — сложно моделить, не имея общего или хотя бы примерного концепта и референсов; GD — коллективный выбор вместо ГДД и оценка возможностей участников команды», — комментируют создатели Winter Cat House.
«Это была прекрасная демоверсия рабочего процесса, и вся команда осталась довольна и временем, проведенным вместе, и результатом»”, — комментируют создатели Cat trick.
Продюсер Skillbox и руководитель студии GameBox Владислав Борец рассказал про спринт по кликерам подробнее: «В прошлом в нашей студии уже собирали команды для создания раннеров, платформеров, арена-экшенов и игр в других жанрах. И всегда это была уникальная работа. В разных потоках своя специфика и процесс разработки. Для участников команд новый жанр — это вызов. Гейм-дизайнеры прорабатывают механики, с которыми раньше не соприкасались, разработчики изучают новые инструменты, художники генерируют арты и создают модели в нестандартных для себя стилях, и все это в ограниченные сроки. И это только на поверхности. Если погрузиться чуть глубже, то в разных жанрах миллион нюансов и тонкостей, которые определяют, что будет работать, а что нет в конкретном случае. Выбор жанра для потока не делается случайным образом. Каждый раз он привязан к определенному событию или цели. В конце 22-го ориентировались на издателей гиперказуалок и студий партнеров. Представители этих компаний оценивали и комментировали итоговые результаты на защите проектов. А с теми, кто сделал потенциально успешный кликер, будет вестись дальнейшая работа с поддержкой экспертов, чтобы довести игру до MVP».
Гайд: Как создать кликер на Unity
Я являюсь преподавателем в школе программирования ЯЮниор и не так давно мы опубликовали пост с разбором жанра кликеров и пообещали, что если пост наберет 100 плюсов, то жаба разрешит мне выпустить статью по разработке кликера! Мы видим, что тема вам интересна, и не можем просто так оставить это без внимания.
23K открытий
Надеюсь вам понравилась эта статья, пишите в комментариях, что ещё стоит разобрать!
33 комментария
Написать комментарий.
С этим кодом явно что-то не так.
Развернуть ветку
Развернуть ветку
Аккаунт удален
Развернуть ветку
Я про проверку булов через ==. Нужно просто if(Done).
Развернуть ветку
Аккаунт удален
Развернуть ветку
Я так понял он подменяет значение переменной, которая содержала в себе ссылку на префаб, на инстас.
Развернуть ветку
Он по делает клон объекта и вписывает в ту же переменную. Это с архитектурной точки зрения сомнительно, да и с логической не ясно, зачем так делать)
Развернуть ветку
Очень интересно было бы прочитать про создание системы открытия лутбоксов, сохранения инвентаря, вероятности выпадения и т д.
Развернуть ветку
Вы хотите открыть шкатулку Пандоры!
Развернуть ветку
Подождите 3 часа или откройте сразу за хардвалюту
Развернуть ветку
Не торты, а торты
Развернуть ветку
Развернуть ветку
IF(SMTH()) RETURN TRUE ELSE RETURN FALSE
Соре, дальше у меня глаза вытекли.
Развернуть ветку
Аккаунт удален
Развернуть ветку
Потому что многие учатся не языку программирования, алгоритмам, паттернам и прочим связанным дисциплинам, а тому как написать свою игру на юнити за 10 минут. Так вот и получаем костыли на костылях..
Развернуть ветку
Кремовые, простите, торты?
Развернуть ветку
Аккаунт удален
Развернуть ветку
Ждем материал «как выбить лицензию из Capcom на RE Engine и создать на нем «Веселую ферму».
Развернуть ветку
Я не шарю в Unity, поэтому хочу спросить — зачем в начале некоторых переменных стоят _?
Развернуть ветку
Чтобы выделить ими переменные. Обычно приватные, но тут уже как собака укусит. В теории должно повышать читаемость кода.
Развернуть ветку
Ну. Я не знаю, как по мне это не ухудшает, причём сильно. Они режут глаз и отвлекают.
Развернуть ветку
Ну. Я знаю, как по мне это ухудшает, причём не сильно.
Они не режут глаз и не отвлекают.
Развернуть ветку
Ой, я имел ввиду, что они наоборот ухудшают читабельность. Я просто иногда невнимателен)
Развернуть ветку
Прочел как «Дерьмовые порты и плюшки в юнити» 😀
Развернуть ветку
Крайне не рекомендую сей мануал для новичков в юнити. Никогда раньше в этот движок не залезал, имею опыт проганья на С, С++, С#, Яве, питоне, ассемблере. В итоге словил дикую рейджуху от того, что человек не объяснил ничего для старта, тыкай сюда и сюда и будет тебе хорошо. Про то, что камеру на канаву надо перестаскивать — мне нужно было самому догадаться и такие проблемы в мелочах
Развернуть ветку
Что то не нашел в гайде, где автор создает файл с расширением .rsp. В проекте обильно используется атрибут [SerializedField], весь дебаглог будет засрат предупреждениями связаные с использованием этого атрибута. Для этого и нужен файлик с расширением .rsp, в нем можно подавлять ненужные предупреждения.
Пример:
Развернуть ветку
Какими предупреждениями он будет засрат?
