Buffer icon Проекты
10 заметок с тегом

проекты

У меня есть несколько хобби-проектов, которые я пытаюсь поддерживать, потому что пользуюсь этим сам :_)

MoDI

Простой контейнер для внедрения зависимостей в Unity. Как-то начав изучать Zenject, понял что хочу сделать такое же, но своё и более лёгкое. В результате появился этот проект.

Github

Infinite Scroll

Это скрипт который делает из Unity ScrollRect бесконечный список. Всего один скрипт. Элементы списка можно настраивать как угодно. Поддерживаются элементы разной высоты и ширины. Есть опция pull-to-refresh. Можно делать как вертикальную прокрутку, так и горизонтальную. Демо и исходники по ссылке ниже.

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

Github

UnityMobileInput

В Unity есть такой компонент InputField, это поле пользовательского ввода с клавиатуры. На мобильных устройствах, над клавиатурой появляется дополнительная полоска с полем ввода, которая занимает пространство. Кроме того, в таком поле нет стандартных функций, например, копирования и выделения. Emoji тоже не поддерживается.

Я сделал компонент и плагин, которые заменяют поле ввода Unity на стандартное нативное поле из Android и iOS, со всеми вытекающими. Да, у него есть недостатки, например, такое поле ввода накладывается поверх всего на экране. Разработчик TextMeshPro на форуме обещал, что в одной из версий Unity 2019.x это будет «исправлено», тогда я перестану поддерживать этот компонент.

Github

Рассылка (не поддерживаю уже)

Я решил выпускать рассылку, когда увидел, что в черновиках блога стало копиться много коротких заметок, которые не тянут на полноценной пост или статью. Рассылка об играх, разработке и Unity выходит один раз в месяц, в ней около 20-30 заметок.

Подписаться

Riddut (не поддерживаю уже)

Riddut — это расширения для браузера которое удаляет со страниц HTML элементы содержащие определенные ключевые слова. Я его сделал давным-давно для себя, но потом решил сделать какое-то подобие сервиса, потому что многие интересовались. Но до конца так и не доделал... Если у кого-то есть желание, переписать расширения на WebAssembly (давно пора) и серверную часть на что-то более достойное, чем обычный PHP-говнокод, то напишите мне :)

Riddut


Unity Builder Bot

Бот сделан на основе моего старого скрипта из этой статьи.

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

Unity Builder Helper Unity Builder Helper settings

Телеграм бот написан на Node.js и Telegraf.js. Может пулить апдейты, запускать билд юнити проекта, билдить Xcode проект (на маке), всё подписывать, загружать на сервер и скидывать ссылку. Билды для iOS тоже можно ставить по ссылке, там подключается манифест разработчика.

Основные функции:

  • добавить проект из Git репозитория
  • удалить проект
  • получить список всех проектов
  • перейти в нужную ветку
  • спулить апдейт
  • сбилдить Unity проект
  • сбилдить Xcode проект
  • скомпилировать, сделать архив, экспорт в IPA
  • сгенерировать HTML страницу с ссылками
  • загрузить все файлы на сервер через sshpass
  • получить логи
  • очистить логи и билды

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

Расширение редактора позволяет быстро переключаться между платформами, включать дефайны, запускать локальный и удаленный билд на боте, подставлять данные для Keystore, нужные зависимости для Huawei, добавлять локализации для iOS, также добавлять сторонние файлы в билд. Есть демка с набором файлов и примерной структурой.

Основные функции:

  • изменить платформу
  • установить defines
  • выбрать папку для билдов под каждую платформу
  • изменить версию, номер билда
  • подставить данные для Keystore
  • добавить локали и *.lproj файлы в Xcode проект
  • добавить фреймворки и дополнительные файлы в Xcode проект
  • добавить и применить google-services.json и agconnect-services.json
  • добавить дополнительные файлы в APK
  • пропатчить AndroidManifest.xml
  • пропатчить gradle файлы
  • добавить зависимости для Huawei билда
  • сбилдить Unity проект

Получилось как-то так, думаю кому-то будет полезно и интересно поковырять исходники. Подписывайтесь на Telegram канал, там посты появляются чаще %)

 Нет комментариев    669   21 д   android   ios   nodejs   unity   инструменты   проекты   расширение   с#

200 звёзд на Github

Achievement unlocked!

Моё новое скромное достижение. Скрипт с data-driven прокруткой для Unity, получил 200 звёзд на Github. Спасибо S1ROZHA :)

Infinite scroll unity 200 stars

Infinite scroll unity 200 stars

Infinite scroll unity 200 stars

Мне как-то писали, что используют его в MTG Arena и ещё какой-то популярной игре. Приятно что этим пользуюсь не только я.

 Нет комментариев    2525   2021   git   ассеты   проекты   разработка

Кастомные шрифты в UnityMobileInput

Обновил плагин UnityMobileInput.

Теперь можно использовать свои шрифты в нативном поле ввода. Просто копируете TTF шрифт в проект, в папку StreamingAssets, дальше плагин всё сделает сам: скопирует в папку приложения на Android или iOS и применит для нужного поля ввода.

Также, был баг (фича), что при тапе по экрану клавиатура исчезала, это её нормальное поведение, в общем-то. Но иногда надо чтобы она оставалась видимой даже если на что-то жмёшь. Теперь есть такая опция.

 3 комментария    1037   2020   android   ios   unity   ассеты   проекты   разработка
 1 комментарий    1093   2019   git   проекты

UnityMobileInput больше не нужен

Обновлено 16.05.2019
Свершилось. В новой версии Unity 2019.1 допилили поле ввода (InputField) в TextMeshPro.

Раньше эта галочка не работала и поле ввода всё равно появлялось.

Теперь дополнительное поле ввода не появляется на iOS и Android! Мой UnityMobileInput не особо-то и нужен, всё можно сделать «штатными» компонентами и оно будет работать как надо, вроде :) Там же есть и поддержка эмоджи.

UPD

Рано радовался, определять высоту экранной клавиатуры юнитеки так и не научились... Всё равно придётся использовать костыль, хоть и меньшего размера :)

 1 комментарий    713   2019   android   ios   unity   ассеты   проекты

Сервер на Node.js и клиент на Unity

Задумал я тут выложить на Github свою очередную поделку — простой сервер на Node.js и клиента к нему на Unity. Много раз сам гуглил различные библиотеки, пробовал, тестировал, пытался сам написать что-то (с моими познаниями в Node.js :), но потом подсмотрел как сделано у старого китайского Pomelo, который уже сто лет не поддерживается.

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

Опыта в Node.js у меня не очень много, поэтому я нагуглил такой фреймворк — Architect. Не знаю насколько это оправдано, но пока сделано с помощью него.

  • многопользовательский сервер для нереалтаймовых игр
  • отправка и получение команд и запросов (аналог JSON RPC)
  • поддержка SSL
  • основная часть на Architect
  • простое добавление команд: один файл = одна команда
  • работает с MongoDB

Команды (события)

public void TestCommand () {
    JsonObject param = new JsonObject();
    param["param"] = "value";
    _connector.Command("test-cmd", param);  
    // _connector.Command("test-cmd");     // without params
}

Чтобы «слушать» команды с сервера надо подписаться на команду (событие):

public void TestCommand () {
    _connector.On("test-cmd", OnTestCmd);  
    // _connector.Off("test-cmd", OnTestCmd);     // unsubscribe
}

void OnTestCmd (JsonObject result) {
    if (_connector.IsError (result)) {
        // handle error
        return;
    }
    // handle result
}

Запросы (RPC)

public void TestRequest () {
    JsonObject param = new JsonObject();
    param["param"] = "value";
    _connector.Request ("test-rqt", param, (result) => {
        // handle answer
    });   
    // _connector.Request ("test-rqt", OnTestRequest);          // without params
    // _connector.Request ("test-rqt", param, OnTestRequest);   // callback in external method
}

void OnTestRequest (JsonObject result) {
    if (_connector.IsError (result)) {
        // handle error
        return;
    }
    // handle result
}

На RPC запросы с сервера можно подписаться также как и на обычные команды. Отличие в том, на них надо обязательно «отвечать».

На сервере каждая команда находится в отдельном файле и экспортируется, как-то так:

module.exports = function (commander, message, imports) {
    if (!validate(message.data, commander.protocol.log)) {
        commander.sendError(message, "invalid_data");
        return;
    }
    ...
    commander.sendResponse(message, { result: "ok" });
};

Протокол сообщений можно легко переделать, добавить шифрование или свой какой-то формат, можно посмотреть в репе Pomelo, у меня будет также примерно.

Для создания простой многопользовательской онлайн игры — этого достаточно. Это будет такая демка, когда можно взять сервер и клиент, запустить и сразу увидеть как оно работает. Код будет полностью доступен, так что умеющие в Node.js и C#, смогут переписать мои «костыли» на свои :)

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

Stay tuned.

 Нет комментариев    1864   2019   js   nodejs   unity   проекты   разработка   с#

Обновление UnityMobileInput

Теперь высота клавиатуры считается правильно везде и экран не сдвигается вверх при появлении клавиатуры. Это на Android такая история была.

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

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

Было

Стало

Вроде работает :)
UnityMobileInput

 Нет комментариев    552   2018   android   git   ios   plugin   проекты   разработка   с#

Обновил Infinite Scroll

Был у меня старый скрипт для бесконечных списков в Unity. Но там было одно ограничение — ячейки должны были быть одной высоты. Но сейчас это стало необходимо, поэтому пришлось переписать скрипт.

Теперь все ячейки могут быть любой высоты! Работает также быстро и с помощью одного скрипта.

Ссылка на Github

 Нет комментариев    858   2018   android   ios   unity   интерфейс   проекты   разработка   с#

Unity Mobile Input

Выложил на Github плагин нативного ввода для мобильных устройств. Это небольшая надстройка над стандартным Unity InputField UI. Работает на iOS и Android.

Зачем он нужен:

  1. Нативное поле ввода и клавиатура
  2. Отсутствует раздражающее дополнительное поле над клавиатурой в Android
  3. Для iOS можно добавить кнопку «Готово»
  4. Настройка кнопки Return для клавиатуры: стандартная, далее, готово, поиск
  5. Для работы нужно просто повестить скрипт MobileInput на родной InputField UI

До этого, было временное решение, которое не обладало необходимыми опциями, да и ошибки были. Собственно, на то оно и временное :) Но в Unity до сих пор нет таких возможностей для ввода, поэтому пришлось сделать такой плагин.

В моей версии исправлены ошибки и отрефакторен почти весь код от старого и неподдерживаемого плагина UnityNativeEdit.

Исходники на Github

 Нет комментариев    1760   2018   android   git   ios   plugin   unity   интерфейс   проекты

Riddut. Возвращение.

В 2015 году я сделал для себя небольшой плагин для браузера — он вырезал из ленты ВК и ФБ ненужные мне записи по стоп-словам. Всё работало очень просто: находил в ленте слово и удалял пост.

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

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

Riddut

Так называется расширение. Да, оно ограждает от нескончаемого потока информационного шума. Это такой персональный AdBlock для контента.
Вот что умеет:

  • удалять любое упоминание стоп-слова на любом сайте
  • удалять посты и рекламу из соц. сетей Фейсбук, ВКонтакте, Одноклассники, Твиттер по ключевым словам
  • удалять позиции в выдаче и рекламу поисковых систем Яндекс, Гугл, Бинг
  • фильтровать дозагруженный контент
  • работать с белыми списками сайтов
  • понимать русскую и английскую морфологию (не полностью)
  • синхронизироваться между браузерами
  • показывать красивую статистику «сэкономленного» времени :_)

Сейчас всё это дело в бета версии, так что, если расширение окажется вам полезным — напишите на mail@mopsicus.ru, что добавить, убрать, исправить, улучшить. Захотите поучаствовать? Буду рад.

Есть версии для Chrome, Safari и Opera. С Firefox пока не разобрался в чём проблема, но думаю решу.

Подробнее на https://riddut.mopsicus.ru

Заметка чтобы попереживать. Да, расширение отправляет на сайт слова, чтобы с помощью библиотеки морфологии, получить в ответ все его формы и отфильтровать страницу. Ещё оно скачивает актуальные данные по вёрстке. Это всё. В любом случае, всё что отправляет и получает расширение можно посмотреть через консоль. Если вас это не устраивает, что ж, вы можете не использовать моё расширение :)

Riddut — это не баннерорезалка. Удаление некоторой рекламы, это приятный бонус, а не основная функция. Но вы легко можете использовать и то и другое вместе.

 1 комментарий    482   2018   js   plugin   riddut   браузер   проекты   расширение