Конвейер игр для магазинов от второкурсников с любовью +3

Промо-коды.apk


Сейчас у многих магазинов популярны так званые «промо-коды», по которым покупатели могут получить скиду на товар. В среднем клиентская база магазинов, использующих такие «инновации» состоит из покупателей в возрасте от 16 до 30 лет. Люди данной возрастной категории практически не расстаются со своими смартфонами. На лицо актуальность мобильных приложений, которая растёт с каждым годом. Это и навело нас с ребятами на мысль о создании приложения для раздачи этих самых промо-кодов.

Концепция и маркетинг


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

Преимущества для пользователя:


  • приложение бесплатное, клиент не должен ни за что платить;
  • увлекательная «гонка» за промо-кодом.

Преимущества для заказчика:


  • увеличение клиентской базы, за счёт оригинального игрового формата раздачи промо-кодов;
  • минимальные затраты на разработку и хостинг приложения;
  • являясь владельцами приложения, возможность внедрения рекламы.

Преимущества для разработчиков:


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


Unity3D как основной инструмент для разработки


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

  • бесплатная версия (если ваша организация имеет заработок меньше 100 000 $ в год);
  • широкий функционал бесплатной версии;
  • мы уже имели небольшой опыт в разработке на данном движке.

Хранение данных


Когда стал вопрос о хранении данных, таких как: название акций, номера промо-кодов, карта лабиринта и т.д., мы пришли к выводу, что хранить данные локально – как минимум глупо.
Во-первых, увеличивается объём приложения, что засоряет память устройства, и, во-вторых, возникнет проблема с обновлением (пришлось бы вечно делать новый build и заливать его на площадку). Так мы пришли к выводу, что игра будет работать по принципу “Клиент-Сервер-БД”.

image

Почему не “Клиент — БД”? – Потому что в таком случае каждый пользователь будет иметь прямой доступ к БД, что сводит её защищённость к нулю.

Так как БД будет находится удаленно, нам понадобился хостинг. Для прототипа нашей игры мы выбрали бесплатный хостинг. Основными критериями были: предоставление сразу двух БД и возможность редактирования данных через PhPMyAdmin. В силу скудного опыта работы с БД, последнее стало для нас ключевым.

Доступ к БД


Так как игра принимает принцип “Клиент-Сервер-БД” – логично, что клиент должен обратиться к серверу, чтобы тот в свою очередь сделал запрос к БД. Возврат данных происходит в обратном порядке. Обращение от клиента к серверу производится с помощью уже существующих в Unity WWW и WWWForm (подробнее смотрите в API Scripting от Unity) с использованием C#, а от сервера к БД с помощью обычного php-скрипта. Для распределения данных, которые берутся из БД, в Unity был использован JSON.

<?php

  $servername = "**";

  $username = "**";

  $password = "**";

  $dbname = "**";

//Create connection_aborted

  
  $con = mysqli_connect($servername,$username,$password,$dbname);

  mysqli_set_charset($con, "utf8");


  
  $id = $_REQUEST["id"];


 

  $sql = "SELECT * FROM UnityDB WHERE id = {$id}";

  $result = mysqli_query($con,$sql);

  $rows = array();

  $rows = mysqli_fetch_assoc($result);

  $rows['Map'] = base64_encode($rows['Map']);

  
  echo json_encode($rows,JSON_UNESCAPED_SLASHES);



  

  mysqli_close($con);

?>

“Какое сегодня число?”


В каждой строке таблицы мы использовали id как идентификатор, по которому мы выбирали из всей таблице то, что нас интересует. Он имел значение от 1 до 31, в зависимости от числа данного месяца. Как вы уже поняли, на каждый id был готов свой лабиринт, промо-код и т.д. Проверка осуществлялась через короткий php-скрипт, который возвращает число в определенном часовом поясе (чтобы у всех было одно и то же число).

Синтаксис был реализован таким образом, чтобы не перегружать БД лишними запросами.
Сначала мы обращались к скрипту с датой, который возвращал число месяца. После этого шла проверка локального числа (которое сохранялось во время последнего запроса к БД) с числом, который возвратил скрипт. Если они одинаковы – тогда мы не обращаемся к БД, а просто используем локальные данные (то, что мы взяли из прошлого обращения к БД), а если даты различаются – тогда мы обращаемся к БД, а локальное число заменяем на то, что возвратил скрипт с датой.

<?php
  
  date_default_timezone_set("UTC"); // Устанавливаем часовой пояс по Гринвичу
  
  $time = time(); // Вот это значение отправляем в базу
  
  $time += 5 * 3600; // Добавляем 3 часа к времени по Гринвичу
  
  echo date("d", $time); // Выводим время пользователя, согласно его часовому поясу


?>

Стилистика игры


После написания основной механики игры, нужно было определиться с дизайном графики. Мы остановились на простом “мультяшном” стиле, потому что:

  • несмотря на шаблонность, он приятен глазу;
  • его легко реализовать как в 3D так и в 2D;
  • данный стиль легко вариацируется в более сложные, что позволяет быстрее и эффективнее выполнить требования заказчика

image

3D модели


Все 3D модели, включая модель персонажа и развертку, были сделаны в 3D Studio MAX.
Анимация же была сделана при помощи Mixamo, так как там уже есть готовые пресеты, которых нам было вполне достаточно.

image

image

Текстурирование


Наша 3D модель состояла не более, чем из трёх цветов. Сама развертка выглядела таким образом:

image

Модель мы разделили на части в зависимости от цвета. В итоге сама текстура выглядела вот так:

image

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

Удобно и быстро создавать различные вариации цветов одежды персонажа, что является несомненным плюсом при корректировки приложения под конкретный заказ.

Создать нужный материал в движке тоже не составило труда — в Unity уже присутствует Toon Shader, который нам практически полностью подходил. Немного изменив его мы достигли нужного нам результата.

Дизайн UI


Интерфейс создавался в Adobe Illustrator.

image

Система создания анимации в Unity сделана довольно удобно, что позволило нам легко анимировать меню, кнопки и пр.

image

Заключение


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

Вы можете помочь и перевести немного средств на развитие сайта



Комментарии (1):

  1. sefus
    /#10561554

    Почему не “Клиент — БД”? – Потому что в таком случае каждый пользователь будет иметь прямой доступ к БД, что сводит её защищённость к нулю.

    Так:
    $id = $_REQUEST["id"];
    $sql = "SELECT * FROM UnityDB WHERE id = {$id}";
    


    Тоже не надо.