Как создать idle игру unity

от admin

Idle clicker game#

In real-time idle clicker and social games, such as farming or city-building games, common considerations include:

  • How to simulate real-time activities in a game that is not running all the time.
  • How the simulation can occur on the cloud, to ensure that all players' games are updated properly, regardless of timezone or any modifications to the date and time on a player's device.

This sample use case shows how to solve both challenges while limiting calls to Unity Gaming Services, which can cause throttling issues or increased costs.

In this sample, the player uses a resource (Water) to purchase Wells, which each produce 1 unit of Water per second.

Overview#

To see this use case in action, open the samples menu and navigate to Idle Clicker Game. To open this scene directly and interact with the use case:

  1. In the Unity Editor Project window, select Assets > Use Case Samples > Idle Clicker Game, then double-click IdleClickerSample.unity to open the sample scene.
  2. Press Play to enter Play mode.

The IdleClickerSceneManager.cs script performs the following initialization tasks in its Start function:

Initializes Unity Gaming Services.

Signs in the player anonymously using the Authentication service. If you’ve previously initialized any of the other sample scenes, Authentication will use your cached Player ID instead of creating a new one.

Retrieves and updates the player's currency balances from the Economy service.

Retrieves or creates the current game state.

Note: If the game is already in progress, this step grants Water based on the quantity produced by all Wells since the last time the game state was updated.

Enables button-click functionality for the available tiles in the play field.

Functionality#

Placing Wells#

You can click any open tile in the play field to place a Well in exchange for 500 Water. Cloud Code validates whether you’re attempting to place a Well in an empty tile. When you click a tile, the following occurs:

  1. Cloud Code calculates the amount of Water generated since the last update, then calls the Economy service to grant that amount to the player’s currency balance (see section on real-time resource updates, below).
  2. The IdleClicker_PlaceWell.js Cloud Code script checks that the requested tileisn't occupied.
  3. If the tile is available, the script attempts a Virtual Purchase through the Economy service that will deduct 500 Coins and return success or failure based on the transaction outcome.
  4. If the Virtual Purchase succeeds, Cloud Code updates the game state with newly the added piece and returns a new state to the client.

If the Virtual Purchase fails, Cloud Code throws an exception back to the client that then displays a pop-up message explaining what happened.

Real-time resource updates#

Between moves, while the player is viewing the game scene but not interacting, the client simulates Water production and updates the Currency HUD accordingly. Each Well produces one Water per second. Because this sample game is intended to be real-time, whenever the client calls Cloud Code, it checks the current time and calculates how much cumulative Water has been produced by each Well since its last production cycle. Every time the game loads, or the player attempts to place a Well, the following occurs:

  1. To determine how much time has passed, Cloud Save stores timestamps for the last time each Well produced Water, along with the full game state that includes obstacle locations, Well locations, and the last update time.
  2. After the Economy service grants the appropriate quantity of Water, each Well’s timestamp is updated, and the fully-updated state is saved back to Cloud Save.

Note: Because the Water quantity displayed in the currency HUD is simulated by the client and not actually in sync with the server until the scene is reloaded or the player attempts to place a Well, its server-side values will often appear inaccurate.

Virtual purchases#

This sample illustrates how virtual purchases occur through the Economy service. In this case, the virtual purchase for a Well costs 500 Water, but, unlike most virtual purchases, the purchase itself does not actually grant anything. Instead, the virtual purchase consumes the transaction cost (500 Water) and updates the game state with a new Well in the corresponding tile. Cloud Save stores the full game state, including the locations of Wells and obstacles.

Note: The service only attempts the transaction after confirming that the space is empty.

Setup#

Requirements#

To replicate this use case, you'll need the following Unity packages in your project:

Package Role
Authentication Automatically signs in the player as an anonymous user to keep track of their data server-side.
Cloud Code Sets up the game state for a new game by placing three random obstacles and setting the starting Water currency to 2000. It also validates moves, grants Water based on real-time production, and updates game state based on virtual purchases.
Cloud Save Stores the updated game state for obstacles and Wells (including last production times). Cloud Code checks and updates these values directly.
Economy Retrieves the player's starting and updated currency balances at runtime.

To use these services in your game, activate each service for your Organization and project in the Unity Dashboard.

Dashboard Setup#

To replicate this sample scene's setup on your own dashboard, you will need to:

  • Publish two scripts in Cloud Code.
  • Create one Currency and one Virtual Purchase for the Economy service.
Cloud Code#

Publish the following scripts in the LiveOps dashboard:

Note: The Cloud Code scripts included in the Cloud Code folder are local copies because you cannot view the sample project's dashboard. Changes to these scripts do not affect the behavior of this sample because they are not automatically uploaded to the Cloud Code service.

Economy#

Configure the following resource in the LiveOps dashboard:

Resource type Resource name ID Description
Currency Water WATER Granted at the start of a new game, consumed in virtual purchases to place new Wells, and granted every second for each Well on the play field.
Virtual Purchase name ID This purchase buys This purchase costs
Idle Clicker Game Well IDLE_CLICKER_GAME_WELL None * Water (500)

* The Well itself is not granted by the virtual purchase; Cloud Code adds it to the game state directly upon a successful transaction.

Как создать свою игру на Unity. История. Idle Collection Tycoon

Как создать свою игру на Unity. История. Idle Collection Tycoon

Всем привет! Не так давно, я решил, что хочу написать простую игру. У меня уже были проекты, был даже один который я уже выкладывал в google play, он даже насобирал неплохих отзывов на мое удивление, однако разошелся тиражом в 3000 копий. В этот раз решил, что хочу написать простую игру, очень простую, такую, чтоб потратить не больше месяца, выложить в маркет и радоваться положительным отзывам, ну и конечно копеечке с рекламы.

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

Решение пришло совершенно неожиданно, как это обычно и бывает. Я смотрел видео на ютубе и увидел ролик, как люди ловили предметы, которые падали из башен. Что поймал, то и унес домой. Вроде звучит достаточно просто. Не так ли?

Какого же было мое удивление, когда я смотрел видео и переживал за игроков! В этот момент меня осенило, и уже на середине ролика я горел идеей написать быстрый проект на такую тематику!

За пол часа я накидал простой прототип. Ничего сложного. Есть 2 башни, из которых падают квадраты. Другим квадратом ты ловишь эти квадраты. Выглядело это примерно так.

Как создать свою игру на Unity. История. Idle Collection Tycoon

Первый набросок игры.

Начало разработки. Прототип

Как создать свою игру на Unity. История. Idle Collection Tycoon

В тот момент я еще не делал скрины, так как показывать было не чего. Этот скрин я сделал уже позже, когда появились предметы.

Выглядит так себе, понимаю. Но главное ведь идея? Я горел желанием все сделать быстро и качественно, чтобы не перегореть раньше времени. Я понимал, что идея по сути-то так себе, но мне было интересно ловить эти пиксельные предметы, и моим друзьям идея тоже зашла, на мое удивление)

Первые проблемы

До тех пор, пока предмет был один, простой квадрат, все казалось простым. Я думал выпущу игру за неделю, ну может две, так как еще графику рисовать, нюансы всякие.. Ага, как же..

Выделив какое то время рисованию предметов я задумался: — «А как мне их теперь хранить в игре??».

На этом вопросе я залип надолго. Так как не хотел все переделывать, когда будет уже очень много предметов, скажем 500.

Самым адекватным решением было создать mySql базу и работать с ней, но раньше в играх я их не использовал, поэтому были еще варианты. Например, создать структуры классов, собрать в массивы и каким то образом их сохранять куда либо.. Но пришлось бы пилить свой редактор.. Были и еще какие то мысли, в общей сложности я решал этот вопрос 2 дня (по вечерам после работы).

Было решено разбираться в базах данных. Точнее как с ними работать из под Unity.

Посмотрел пару видео, прочел пару статей. Да вроде не сложно, подумал я и начал делать. Скачал нужные библиотеки, написал примитивный код. Работает! Но не на телефоне, тут меня ждало разочарование. Библиотека, которую я скачал из того видео, не работала на телефоне ни в какую. Я скачивал ее их разных источников, разных версий. Одна из 10 заработала! Я был счастлив и добавил все свои 10 предметов в базу.

Разработка в самом разгаре

Далее я начал разрабатывать инвентарь и его «дизайн». Первые наброски, были выполнены из стандартных плашек и кнопок.

Как создать свою игру на Unity. История. Idle Collection Tycoon

Одна из первых версий инвентаря

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

Как создать свою игру на Unity. История. Idle Collection TycoonНекий промежуточный результат. Предметы, квадратный герой, часть города, синее небо
Как создать свою игру на Unity. История. Idle Collection TycoonРешил немного побаловаться и проверить быстродействие системы)

Как создать свою игру на Unity. История. Idle Collection Tycoon

и еще немного xD.

Хотя тут я немного забежал вперед. Я так же нарисовал машины, сделал небо градиентным и нарисовал предметов побольше. На тот момент, кажется, их было порядка 20.

Пора бы нарисовать персонажа

Шла 3 неделя, я понимал, что уже ну ни как не укладываюсь в сроки. Код становился все монструознее, так как я хотел сделать все быстро, пришлось жертвовать и костылять, костылять.

Пришло время рисовать персонажа.

Как создать свою игру на Unity. История. Idle Collection TycoonНаброски Как создать свою игру на Unity. История. Idle Collection TycoonМне показалось, что этот ничего. Нет, он не красавец, просто рисовать и анимировать отдельные части удобнее и быстрее. Как создать свою игру на Unity. История. Idle Collection TycoonНу и вот. Практически готовый персонаж!)

Город тоже бы не помешал

Время шло. Мы, с моим другом Ильей, сидели у меня и делали игру, я писал код, рисовал графику, а он составлял мне компанию и писал музыку (Он первоклассный музыкант😉), подсказывал какие то идеи и т.д. Параллельно мне помогал с рисовкой предметов Саня, в тот момент он находился в армии и рисовал прямо от туда!)

Как создать свою игру на Unity. История. Idle Collection TycoonПора бы перерисовать город, а то как то скучно.. Как создать свою игру на Unity. История. Idle Collection TycoonВзял несколько референсов

Как создать свою игру на Unity. История. Idle Collection Tycoon

и начал творить. но не долго xD

В этот момент на работе появились проблемы, завалы и так далее. Игру пришлось отодвинуть на второй план и ей я занимался меньше. Шел уже второй месяц.

Через неделю или даже две я нашел еще сил и продолжил разработку. Город расширялся, дорисовывался и менялся.

Как создать свою игру на Unity. История. Idle Collection TycoonВ принципе конечный результат города Как создать свою игру на Unity. История. Idle Collection TycoonДалее пошли иконки
Как создать свою игру на Unity. История. Idle Collection TycoonМелкие изменения
Как создать свою игру на Unity. История. Idle Collection TycoonКоробка! наконец то она не просто квадрат))

Как всегда, все сложнее, чем кажется

Начались проблемы с масштабированием проекта, мелкими правками, доработками и всякими мелочами. Очень сложно было правильно настроить баланс экономики в игре. Каждый раз приходилось с самого нуля прокачивать персонажа и проверять — «а интересно ли это в данный момент??».

Я добавлял и убирал различные фичи. Что-то пришлось удалить, так как я уже вышел за границы своего выдуманного дэдлайна.

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

Готовность номер 1! Опять проблемы

Третий месяц подходил к концу, время летело очень быстро. Я решил, пора выкладывать. Некоторые друзья залипали по несколько часов в ловле предметов и это был хороший знак.

Подготовка проекта к выпуску заняла примерно 5 дней, я делал скриншоты, рисовал иконку, придумывал описание, название и бла бла бла.

В этот момент я понял, что многие игроки не понимают что делать. Было решено написать некий туториал. Обучение, простое и понятное. За вечер система была написана и почти отлажена.

Еще несколько дней я тестировал готовый продукт, ну как готовый, играбельный. И он проходил по всем тестам, все хорошо работало. Пора выпускать.

Я собрался с мыслями и. выложил проект в стор. Но стор решил иначе и уведомил меня, что я обязан сделать игру как для 32 бит, так и для 64 бит. Времена такие, телефоны все мощнее и мощнее..

Да ладно, поставить галочку тут, там, ну и здесь. Готово! Выкладываем!

Игра прошла модерацию и спустя сутки появилась в магазине! Я был рад и хотел расслабиться и отдохнуть. Но тут выяснилось, предметы в игре перестали падать! Я был в панике. Как так могло случиться? Я ведь тестировал все несколько дней, и не один я. Все работало!

Проверив логи, было выявлено сообщение о нехватке прав. Ну юнити, не смогла сама попросить нужные разрешения на запись (я обленился). Ладно сейчас сделаем. Однако это не помогло.

Долгие поиски в интернете не давали результатов, я ходил вокруг одного и того же места. В 32 битах игра работает, а в 64 пишет, что недостаточно прав. Бред какой-то!

И тут я понял. Не работает библиотека для взаимодействия с базой данных! Немного погуглив, я нашел старую тему на оф. сайте sqlite. Там говорилось о том, что библиотека не поддерживает 64 бита и пока не планирует.

Как же это так?? И все? на этом все закончено? или переписывать всю систему предметов заново? Да бред!

Я пошел искать дальше и вздохнул с облегчением, она все же обновилась и теперь поддерживает 64 бита! Еще 2 дня танцев с бубном и оно заработало! За это время игру скачали 20 человек..и сразу ее естественно удалили, ведь она не работала..обидно.

Запушил обновление. Проверил все еще несколько раз. Оно заработало. Я выдохнул и решил передохнуть.

Играбельная версия готова, игра находится в магазине приложений и ждет пользователей. В данный момент идет стадия рекламирования и развития. Конечно же, параллельно ведется разработка и самой игры, в частности я добавил метрики, что бы лучше понимать пользователей. Продолжение будет уже с отчетом через пару месяцев.

Создание простой кликер-игры с нуля

В последние несколько лет набирают большую популярность игры такого жанра, как «кликеры». Мне самому очень интересно играть в них, но не менее интересно создавать игру — кликер самому. Благодаря такому движку как Unity, создать свой шедевр не составит труда даже простому новичку. Давайте перейдем к делу.

Что нужно сделать?
  1. Подумать, почему и на что мы должны кликать?
  2. Что должно произойти, когда мы кликнем?
  3. Что должно произойти, если не кликнем?
  1. Мы должны кликать в любое место на экране.
  2. При клике должен смениться объект.
  3. При игнорировании — проигрыш.
О чем будет игра?

Игроку нужно вовремя выбрать либо меч, либо щит, в зависимости от того, что будет падать сверху. То есть, падает меч — выбираем меч, падает щит — выбираем щит. При неправильном выборе игрок просто проиграет. На словах всё довольно просто, а в реализации еще проще.

Откуда мне новичку брать красивый спрайт и фон? Ответ: нарисовать самому.

Тут нет ничего сложного, так как мы рисуем в Adobe Illustrator. Даже если у вас нет опыта в рисовании, то опять же не расстраиваемся, так как я покажу вам всё по деталям.

  1. Меч
  2. Щит
  3. Задний фон
  4. Ветка с листьями

Техника проста и покажу на примере меча:

  1. Рисуем контур
  2. Заливаем цветами
  3. Рисуем тени

И всё, наш меч готов!

Также проделываем и с другими. Не пугайтесь, если в начале одно ваше творение покажется вам далек от идеала, ведь в совокупности они будут смотреться, как картина Ван Гога. Шутка. А может и нет.

Задний фон сделаем еще хитрее.

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

Можно сказать, что уроки художества на этом закончены и мы наконец идем в Unity.

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

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

Далее украсим игру спрайтами, нарисованными ранее. Первым делом кидаем фон.

  1. Размещаем ветки сверху
  2. Добавим снизу бревно
  3. Посередине разместим мост

Основной секрет дизайна такой: сверху и снизу разместим ветки, а у лесенки уменьшим значение прозрачности. Зачем это делать?

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

Теперь создадим кнопку, которая будет занимать весь экран. Чтобы создать кнопку нужно в иерархии нажать на UI -> Button. Далее:

  1. Нажимаем на Color.
  2. Устанавливаем значение «0» в поле А, которая отвечает за прозрачность нашей кнопки.
  3. Убеждаемся, что кнопка стала такой, какой мы хотели.

Таким же путем создаем текст, чтобы показывать наш текущий счет и рекорд.

И наконец, мы дошли и до программирования.

Что творится в этих методах?

Start (). Он запускается каждый раз, когда мы запускаем игру или же перезапускаем сцену. Всё что прописано внутри этого метода выполняется только один раз. Поэтому мы туда записываем: счет равный нулю, запуск корутины (то, что отвечает за создание префабов), значение времени.

Update (). Выполняется раз за кадр. Сюда удобно записать то, что постоянно должно обновляться. В нашем случае: показатель счета и рекорда, рандомное значение n от которого зависит что создастся – меч или щит.

BtnClick (). Вы спросите, почему перед этим методом стоит «public»? Нам необходимо, чтобы он отражался в самом Unity и мы могли прописать слово «Click», чтобы отследить, на какую именно кнопку мы нажимаем, хотя и кнопка всего одна, знать чуточку больше никому не помешает.

Сюда запишем то, что должно произойти после нажатия на кнопку. При нажатии должно меняться с меча на щит и наоборот, устанавливать значение времени «1», так как при проигрыше она обнуляется.

OnTriggerEnter2D (). Проверяет столкновение объекта. Если теги обеих объектов совпадает, то счет увеличивается на единицу, а префаб уничтожается. Если теги разные, то проигрыш – останавливается время и обнуляется счет.

Осталось добавить эти самые теги. И тут всё очень просто:

  1. В окне Inspector нажимаем на Tag.
  2. В выпавшем списке в самом низу нажимаем на Add Tag.
  3. Жмем на плюсик и называем тег как хотим.

После создания также нажимаем на Tag и выбираем нужный.

Осталось перенести скрипты нужным объектам и заполнить некоторые поля. Создадим пустой объект и добавим скрипт «Main Script», а «Player Script» добавим в наш меч и щит.

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

Как создать idle игру unity

pers2d

Похожие статьи