об играх, разработке на Unity и личном опыте

Buffer icon Проекты
Позднее Ctrl + ↑

Cериализация в XML и обратно

Обновлено 17.04.17
Продвинутая версия сериализации в XML, работает в несколько раз быстрее штатной

Как преобразовать объект в строку, например для сохранения или передачи, а потом обратно? Есть две простые функции, которые я использовал в одном из Unity проектов:

public static object Deserialize<T> (string toDeserialize) {
	XmlSerializer xmlSerializer = new XmlSerializer (typeof (T));
	StringReader textReader = new StringReader (toDeserialize);
	return xmlSerializer.Deserialize (textReader);
}

public static string Serialize<T> (T toSerialize) {
	XmlSerializer xmlSerializer = new XmlSerializer (typeof (T));
	StringWriter textWriter = new StringWriter ();
	xmlSerializer.Serialize (textWriter, toSerialize);
	return textWriter.ToString ();
}

Использовать очень просто:

Vectror3 vector = new Vector3 (10f, 10f, 10f); // какой-то объект
string data = Serialize<Vector3> (vector); // преобразовываем в строку
vector = (Vector3) Deserialize<Vector3> (data); // обратно из строки в объект

Как убрать InputBox в Android над клавиатурой

Обновлено 04.10.2018
Моя версия «unity mobile input» для iOS и Android.

Если вы не знаете, о чем речь, то эта заметка не для вас :)

Другие же, наверняка гуглили «unity hide mobile input». И не находили стандартного решения — потому что его нет. Все написано в документации:

Note: Android: only TouchScreenKeyboard.visible input field is supported, hence this value is always false.

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

Идея в том, что на экран добавляется нативное невидимое поле ввода откуда потом забирается текст. Все просто. Да, это не изящное решение, а грязный хак, но он работает — верхнего поля ввода нет и появляется стандартная клавиатура Android или iOS. Если к этому добавить ассет Text Mesh Pro, то будут еще и эмоджи. Да, еще не видно курсора. Я думаю над этим... :)

Если есть более красивое решение — киньте ссылку :)

Ссылка на Github

Unity UI data binding

Как отделить логику от интерфейса в Unity, чтобы не получилась каша?

Есть давно устоявшиеся паттерны и «best practices». Хотя для Unity последних не так уж и много, как например для node.js. Можно использовать эвенты, делегаты, обсерверы, вот это все, если говорить об использовании C# в Unity. Есть и готовые ассеты в Asset Store.

В общем, это то, что я начал писать сам, но вовремя нашел почти готовое решение, которое меня устраивает. После небольшого допиливания будет вообще супер — библиотека для простого биндинга в Unity.

Работает все очень просто:

  1. Импортируете DataBind.unitypackage в Unity
  2. Добавляете скрипт DataBindContext к родительскому объекту
  3. Добавляете скрипт Bind[нужный тип] к основным объектам
  4. Вызываете dataBindContext[key] = value для биндинга
  5. Все. Присвоили значение переменной — оно поменялось в UI Text, например.

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

Ссылка на Github

Обновление 25.01.2017
У Leopotam «прокачанная» версия биндинга https://github.com/Leopotam/LeopotamGroupLibraryUnity/tree/master/SystemUi/DataBinding

 2 комментария    488   2016   git   unity   ссылки

Sitemap для Эгеи

Обновлено для последней беты

Знаю, что Илья Бирман, разработчик движка для блога Эгея, «против» нативной генерации sitemap файла, поэтому пришлось сделать небольшой PHP скрипт для себя. Добавил задание в Cron, чтобы раз в неделю генерил новый файл. Квест пройден.

<?
$domain = 'mopsicus.ru'; // домен
$db_user = 'login'; // логин к БД
$db_password = 'password'; // пароль к БД
$db_database = 'blog'; // название БД
$db_host = 'localhost'; // адрес БД

$db = new mysqli($db_host, $db_user, $db_password, $db_database);

$xml = '<?xml version="1.0" encoding="UTF-8"?>';
$xml .= "\n";
$xml .= '<urlset xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://www.sitemaps.org/schemas/sitemap/0.9" xsi:schemaLocation="http://www.sitemaps.org/schemas/sitemap/0.9 http://www.sitemaps.org/schemas/sitemap/0.9/sitemap.xsd">';
$result = $db->query("SELECT MAX(`LastModified`) AS `LastModified` FROM `notes` WHERE 1");
while ($row = $result->fetch_assoc()) {
$xml .= "
<url>
	<loc>http://$domain</loc>
	<priority>1.0</priority>
	<lastmod>".date('Y-m-d\TH:i:s\Z', $row['LastModified'])."</lastmod>
</url>";
}
$result = $db->query("SELECT OriginalAlias, LastModified FROM `notes` WHERE IsPublished = 1 AND isvisible = 1");
while ($row = $result->fetch_assoc()) {
	$page = $row['OriginalAlias'];
	$xml .= "
<url>
	<loc>http://$domain/all/$page</loc>
	<priority>0.8</priority>
	<lastmod>".date('Y-m-d\TH:i:s\Z', $row['LastModified'])."</lastmod>
</url>";
}	
$xml .= "
</urlset>";
$db->close();
$fp = fopen('sitemap.xml', 'w'); 
fwrite($fp, $xml);
fclose($fp);
echo "ok";
?>

Использование альфа маски

Обновлено 19.10.2018
Эта маска не работает внутри стандартной маски и RectMask2D :(

В Unity стандартная маска (компонент Mask) работает без альфа канала, т. е. красивые «мягкие» края сделать не получится. Особенно это актуально, если у вас маска сложной формы.

Но тут нас спасет очень хорошая библиотека скриптов от Simon Jackson — Unity UI Extensions. И один из скриптов из этой библиотеки как раз и позволяет делать «soft smooth ui alpha mask».

Нужно скопировать в свой проект скрипт SoftMaskScript.cs и шейдер с таким же именем. И кинуть скрипт на UI Image.

Получим такой результат. Намного лучше чем стандартная маска.

Да и вообще, в этой либе много других интересных и полезных вещей, рекомендую.

Системы аналитики для Unity

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

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

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

Надо сказать, что основные метрики за которыми обычно следят (DAU, MAU, WAU, retention, ARPU, ARPPU и т. д.) есть у всех систем из списка. Отличаются они некоторыми специфическими функциями, ценой и удобством интерфейса, тут уже нужно попробовать все, чтобы определиться.

Flurry

Хорошая система аналитики, есть все необходимое, но немного тормозит на мой взгляд, нет функций для работы с пушами и не очень работа с воронками. Бесплатна.
Плагин для Unity можно скачать из Asset Store, правда придется заплатить $10.

Mixpanel

У Mixpanel как раз наоборот с воронками все в порядке. Но нет анализа источников трафика, у Flurry есть. Еще в Mixpanel можно сделать свою! метрику, указав как она должна считаться.
Как интегрировать в Unity написано в документации.

Google Analytics

Google считает и собирает большое количество параметров, у него отличное API и кроме того он бесплатен. Для новичков самое оно.
Плагин можно скачать с Github.

Localytics

Система похожа на Mixpanel и кое-где даже ее повторяет. Есть воронки, сегментация, пуши, для анализа трафика надо подключать сторонние сервисы.
Плагин также можно скачать с Github.

devtodev

Интересная система, помоему даже от наших соотечественников. Стоит упомянуть отдельный раздел с игровыми метриками и экономикой. Анализ трафика тоже через сторонние сервисы. И она сразу платная.
Про интеграцию с Unity все написано в документации.

GameAnalytics

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

deltaDNA

Если честно не пользовался, но по отзывам, очень неплохая система. Сегментация, пуши, и анализ трафика, и воронки, события. Также можно строить гибкие отчеты по выбранным метрикам и группировать как угодно.
Как интегрировать в Unity написано в доках.

AppMetrica

Система мобильной аналитики от Яндекса. Запустилась недавно, но быстро наращивает фичи. Бесплатная. Также есть все необходимое для небольшого проекта. Как и Google есть API для построения собственных отчетов из неагрегированных данных.
Как настроить метрику для Unity.

Я «по-умолчанию» использую Google Analytics и еще какую-нибудь. Возможно это дело привычки, но GA мне нравится. А так конечно надо попробовать все, чтобы выбрать для себя по функциям и удобству. Тем более, у всех систем есть бесплатный период или live demo.

Ранее Ctrl + ↓