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

проекты

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

Shardy

Фреймворк для онлайн игр и приложений на Node.js. Он даёт базовую функциональность для построения микросервисных решений: мобильных, социальных, веб, многопользовательских игр, приложений реального времени, чатов, middleware сервисов и т. п. Есть клиент на TS встроенный в фреймворк, а также пакет для Unity, который поддерживает сборки под iOS, Android и WebGL.

Github

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


Shardy

Shardy

Shardy

Shardy

Друзья, был у меня давно один проект, который претерпел уже наверное 4 или 5 итераций. Этой штукой я пользуюсь на своих пет-проектах и со временем появилось желание сделать из всего этого опенсорсную историю. Поэтому начну из далека :)

Давным-давно был такой проект на гитхабе Pomelo. По меркам интернета — реально древний, ему больше 10 лет. Он и сейчас там есть, но уже заархивирован и не поддерживается, но форки вроде пилятся. Кто первый раз слышит, это фреймворк для создания игровых серверов на JavaScript и Node.js. Проект довольно большой, куча модулей, клиенты под разные платформы, хорошая дока. Наткнулся я на него несколько лет назад и начал ковырять, запускать, что-то пробовать. В итоге, многие вещи в нём мне понравились, но показалось всё как-то замудрёно что ли. Наверно потому что китайцы писали, а может я в ноду не сильно мог 😅 В общем, оттуда я потягал какие-то скрипты, интересные решения, потом переписал, упростил и, получился у меня такой лайтовый сервер из нескольких файлов, на котором я тестил всякие свои проекты, изучал ноду, яваскрипт и тайпскрипт позднее.

Потом решил поделиться своими поделками и выложить на гитхаб. Когда было свободное время что-то дописывал, переписывал и снова забывал, потому что были задачи поважнее. В какой-то момент, переписал всё на TypeScript (TS). К тому времени уже были наработки не только сервера, но и клиента на C# + Unity и всё это дело стало обретать какой-то полезный вид. И вот, в результате n-ой итерации, архитектура устоялась, протестировалась и получился Shardy.

Shardy — это фреймворк для онлайн игр и приложений на Node.js. Он даёт базовую функциональность для построения микросервисных решений: мобильных, социальных, веб, многопользовательских игр, приложений реального времени, чатов, middleware сервисов и т. п. Есть клиент на TS встроенный в фреймворк, а также пакет для Unity, который поддерживает сборки под iOS, Android и WebGL. Здесь я говорю микросервисных потому что по задумке, за каждый модуль будет отвечать отдельный Shardy-сервис со своими командами, настройками, возможно БД.

Основные фичи:

  • микросервисная парадигма
  • простой API: RPC, команды, подписки и т. п.
  • транспорт данных через сокеты и вебсокеты
  • легкость и быстрота: Node.js и TypeScript
  • поддержка пользовательской сериализации
  • поддержка пользовательской валидации рукопожатий (handshake)
  • продвинутый логгер: теги, фильтры, области
  • справочные материалы: документация, сниппеты, примеры
  • почти нулевая конфигурация

Есть демка с примерами работы API и простенькая онлайн игра «Крестики-Нолики»: как серверная часть, так и клиентская. Всё можно посмотреть, поковырять, запустить у себя и попробовать поиграть. Весь код старался комментировать, иногда даже излишне. Также есть документация с описанием всех компонентов и методов. Это всё в процессе наполнения и улучшения.

Основная цель Shardy — предоставить простое бесплатное решение для создания многопользовательских онлайн игр. Вот так вот громко 😅 На это будет обращено основное внимание при дальнейшей разработке новых функций, сервисов и туторов (было бы время...).

Не претендую на академическую правильность архитектуры и кода, делал в первую очередь для своих нужд. Но как показал опыт: зачастую многие принципы ООП, чистого кода, использование паттернов в «нужных» местах, разбиваются об реальность конкретного проекта :)

Приглашаю всех заинтересованных инди и не только, в подписчиках вроде такие есть, посмотреть, покрутить, примерить, потестить на своих каких-то задачах, играх, проектах, прототипах. Если будут вопросы, отвечу тут в комментах или на почту mail@mopsicus.ru. В личку тоже можно, но могу не заметить или долго отвечать.

Вот такое интро. Всем хороших игр! Онлайн игр :)

Shardy
Shardy for Unity
Docs

 Нет комментариев    103   1 мес   android   ios   nodejs   typescript   unity   webgl   игры   проекты   с#

Про донаты

У меня есть пару проектов в опенсорсе которые я давно поддерживаю. И только совсем недавно я добавил в ридми файл инфу с кошельками, на которые можно задонатить и поддержать проект. До этого мне просто писали в личку в телеге с вопросами и благодарностями, спрашивали куда и как можно перевести. Штош, я сократил этот путь :)

Сам закидываю в помощь авторам, где монетой, где пулл реквестом. И это касается не только разработчиков, ютуберы которые снимают интересные видео, тоже получают материальную благодарочку, а им сейчас сложно :( Считаю что хорошая работа должна быть вознаграждена!

К чему это я? Друзья, если давно пользуйтесь какой-то бесплатной программой, утилитой, библиотекой, кодом — скиньте «спасибо» автору, купите премиум, отправьте открытку в конце концов, ему будет приятно, повысит мотивацию не забрасывать свой проект. Всем добра.

 Нет комментариев    436   2 мес   ассеты   мысли   проекты   разработка

Unity infinite scroller v2.0

UIS (Unity infinite scroller)

UIS (Unity infinite scroller)

UIS (Unity infinite scroller)

Обновил скрипт бесконечного списка. Переделал реп в пакет пригодный для Unity, обновил демки, добавил функцию прокрутки к элементу и доку небольшую.

Делалось для мобилок, чтобы не тормозило с большим количеством элементов и была привычная функция pull to refresh. Но некоторые используют и в ПК билдах 😄

Github

 Нет комментариев    660   7 мес   android   ios   unity   ассеты   проекты   разработка   расширение   с#

Unity Mobile Input v2.0

UMI aka Unity Mobile Input

UMI aka Unity Mobile Input

UMI aka Unity Mobile Input

Обновил свой плагин для создания нативных полей ввода на мобилках. Исправил старые баги, причесал немного код, добавил комменты и обновил демо.

Функции:

  • нативное поле ввода и клавиатура для iOS и Android
  • настройка типа кнопки: Стандартная, Далее, Готово, Поиск, Отправить
  • настройка обработки кнопки
  • настройка кнопкок Готово и Очистить (iOS)
  • изменение опций поля ввода во время выполнения
  • скрытие дополнительного поля ввода (Android)
  • отслеживание появления и скрытия клавиатуры (с высотой)
  • отслеживание ориентации экрана
  • поддержка пользовательских шрифтов

В новой версии добавил несколько методов чтобы можно было менять некоторые параметры во время исполнения:

  • SetTextColor — изменение цвета текста
  • SetPlaceholderColor — изменение цвета текста подсказки
  • SetBackgroundColor — изменение цвета фона
  • SetContentType — изменение типа поля ввода
  • SetReadonly — изменение состояния «только для чтения»

Устанавливается как пакет через Unity Package Manager.

Github

 Нет комментариев    768   7 мес   android   ios   unity   ассеты   игры   проекты   разработка   с#

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 канал, там посты появляются чаще %)

 Нет комментариев    5595   2022   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 и ещё какой-то популярной игре. Приятно что этим пользуюсь не только я.

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

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

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

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

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

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

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

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

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

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

UPD

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

 1 комментарий    964   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.

 1 комментарий    2756   2019   js   nodejs   unity   проекты   разработка   с#
Ранее Ctrl + ↓