- PVSM.RU - https://www.pvsm.ru -
Сейчас у многих магазинов популярны так званые «промо-коды», по которым покупатели могут получить скиду на товар. В среднем клиентская база магазинов, использующих такие «инновации» состоит из покупателей в возрасте от 16 до 30 лет. Люди данной возрастной категории практически не расстаются со своими смартфонами. На лицо актуальность мобильных приложений, которая растёт с каждым годом. Это и навело нас с ребятами на мысль о создании приложения для раздачи этих самых промо-кодов.
После краткого обсуждения мы остановились на разработке лабиринта в котором пользователь должен отыскать промо-код. Количество промо-кодов, как и частота генерации лабиринта будет зависеть от заказчика. Найти промо-код в лабиринте может каждый пользователь, но получат его только первые N клиентов.
При выборе игрового движка, мы остановились на Unity3D [2]. Этому послужило сразу несколько причин:
Когда стал вопрос о хранении данных, таких как: название акций, номера промо-кодов, карта лабиринта и т.д., мы пришли к выводу, что хранить данные локально – как минимум глупо.
Во-первых, увеличивается объём приложения, что засоряет память устройства, и, во-вторых, возникнет проблема с обновлением (пришлось бы вечно делать новый build и заливать его на площадку). Так мы пришли к выводу, что игра будет работать по принципу “Клиент-Сервер-БД”.

Почему не “Клиент — БД”? – Потому что в таком случае каждый пользователь будет иметь прямой доступ к БД, что сводит её защищённость к нулю.
Так как БД будет находится удаленно, нам понадобился
Так как игра принимает принцип “Клиент-Сервер-БД” – логично, что клиент должен обратиться к серверу, чтобы тот в свою очередь сделал запрос к БД. Возврат данных происходит в обратном порядке. Обращение от клиента к серверу производится с помощью уже существующих в Unity WWW и WWWForm (подробнее смотрите в API Scripting [3] от 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 модели, включая модель персонажа и развертку, были сделаны в 3D Studio MAX [4].
Анимация же была сделана при помощи Mixamo [5], так как там уже есть готовые пресеты, которых нам было вполне достаточно.


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

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

Текстуру можно сделать любого размера и это не повлияет на качество, так как это всего навсего два сплошных цвета. Естественно, мы сделали её как можно меньше, чтобы она не занимала много места на устройстве.
Удобно и быстро создавать различные вариации цветов одежды персонажа, что является несомненным плюсом при корректировки приложения под конкретный заказ.
Создать нужный материал в движке тоже не составило труда — в Unity уже присутствует Toon Shader, который нам практически полностью подходил. Немного изменив его мы достигли нужного нам результата.
Интерфейс создавался в Adobe Illustrator.

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

Разработав такой нехитрый шаблон, вы можете спокойно предлагать свой товар, магазинам или даже каким-то заведениям. Правильная презентация и портфолио в виде сделок с другими магазинами вам в этом помогут. Вот такой плёвый стартап придумали трое второкурсников холодным зимним вечером.
Автор: warmonger349
Источник [6]
Сайт-источник PVSM.RU: https://www.pvsm.ru
Путь до страницы источника: https://www.pvsm.ru/startap/270410
Ссылки в тексте:
[1] хостинг: https://www.reg.ru/?rlink=reflink-717
[2] Unity3D: https://unity3d.com/ru/get-unity/download
[3] API Scripting: https://docs.unity3d.com/ScriptReference/
[4] 3D Studio MAX: https://www.autodesk.com/products/3ds-max/free-trial
[5] Mixamo: https://www.mixamo.com
[6] Источник: https://habrahabr.ru/post/344392/?utm_source=habrahabr&utm_medium=rss&utm_campaign=sandbox
Нажмите здесь для печати.