Привет Хабр. Хочу поделиться опытом в разработке игры-викторины на Unity 5 версии. Замечу, что подобная игра уже выпускалась мной в 2014 году и набирала 7800 скачиваний. Из-за ужасной реализации игра заработала 80% удалений и проект был заброшен. Попробуем запустить игру по новой, исправив ошибки предшественника.
В статье рассмотрим такие темы как:
- Идея игры
- Структура проекта
- Особенности игровой логики и способы реализации
- Внедрение инструментов монетизации in app purchase и официального плагина AdMob
- Продвижение
Идея игры
Идея игры простая. Мы зашифровываем популярные песни в виде смайлов emoji и предлагаем пользователю расшифровать.
На момент публикации, подобных русскоязычных игр в Google Play нет.
Структура проекта
При разработке на Unity я не использую паттернов, но стараюсь разделить логику от отображения.
Игровой объект Display (Canvas) является родительским элементом UI, на нем висит класс для доступа ко всему UI — GameDisplay. Весь интерфейс размещается в родительском Display (Canvas) и мы при необходимости ссылаемся к элементам UI через класс GameDisplay.
Для обработки взаимодействия с UI я создаю пустой игровой объект Handlers и на нем размещаю класс(ы), который содержит методы для обработки нажатия кнопок.
Для удобства группировки, все это мы помещаем в пустой игровой объект UI (не является элементам интерфейса и не отображается).
public class GameDisplay : MonoBehaviour { public GameObject LevelNumText; public GameObject InputField; public static GameObject StaticInputField, StaticAlertsText; public GameObject AlertsText; float AlertHideTimer = 4f; void Awake() { // для доступа к элементам UI создаем static ссылки на объекты StaticInputField = InputField; StaticAlertsText = AlertsText; }
namespace NavigationHandlers { public class NavigationHandlers : MonoBehaviour { public void LoadHowToPlayScene() { SceneManager.LoadScene(1); } public void StartGame() { SceneManager.LoadScene(2); } public void BackToMainMenu() { SceneManager.LoadScene(0); } } }
В объекте Levels содержатся наши уровни Level_(num). Как видно по скрину, Level_1 элемент UI содержащий компонент grid layout group. В Level_1 помещены дочерние Image элементы, которые отображают смайлы и группируются в grid благодаря родительскому компоненту.
Особенности игровой логики и хранения данных
Для сохранения незначительно количества игровых данных (счет\имя игрока и.т.д) я использую PlayerPrefs обернутый для удобства в класс DB.
public class Db : MonoBehaviour { public static List<string> answers = new List<string>(); public static void SaveDb() { PlayerPrefs.Save(); } public static int CurrentLevel { get { return PlayerPrefs.GetInt("CurrentLevel"); } set { PlayerPrefs.SetInt("CurrentLevel", value); } }
С помощь этого, мы имеем возможность удобно обращаться к бд Db.CurrentLevel = Db.CurrentLevel + 1;
Логика игры не сложная и состоит из одного класса Game. Все уровни (имеют тег Level) по умолчанию активированы. Наша задача найти и отключить, за исключением текущего CurrentLevel.
// находим все уровни по тегу Levels = GameObject.FindGameObjectsWithTag("Level"); // деактивируем ненужные foreach (GameObject Level in Levels) { // деактивируем все уровни которые не подходят текущему if (Level.gameObject.name != "Level_" + Db.CurrentLevel + "") { Level.gameObject.SetActive(false); } // который подходит активируем else { Level.gameObject.SetActive(true); } }
Внедрение инструментов монетизации in app purchase и официального плагина AdMob
Раньше пользовался «самопальными» инструментами для сервиса Admob и внутриигровых покупок. Сейчас Unity и Google предоставляют из коробки прекрасные\удобные\простые плагины. Плагин для рекламы можно скачать тут, а для in app purchase в самой Unity → Services. Скачал, загрузил все в проект и используешь. Официальные примеры и документация превосходны.
Продвижение
Раньше я использовал сервисы для накрутки пятерок\скачиваний\комментариев advertmobile и apptools. Я крайне не рекомендую пользоваться этими инструментами. Ребята из корпорации бобра серьезно потрудились, накрученные отзывы удаляются\не отображаются.
Игра находится в GP пятый день, статистика по скачиваниям: 228/459 (+1 игровая покупка). В adMob 5900 показов и 6$ дохода. Мы получили 231 удаление, есть над чем поработать. Возможно хромает качество, или игра не оправдала ожидание. Согласно «доске лидеров» в игру играют, люди пишут мне на почту и просят подсказки.
Для продвижения использую тематические форумы, группы вк, статьи в блогах, группы в телеграмм, Хабрахабр. Смогу ли я набрать 7800 скачиваний как в прошлой версии, или GP для инди стал непостижим? Ответ на этот вопрос и при необходимости\востребованности более подробный разбор логики в следующий раз.
ссылка на оригинал статьи https://habrahabr.ru/post/317236/
Добавить комментарий