Проекты https://mopsicus.ru/tags/projects/ У меня есть несколько хобби-проектов, которые я пытаюсь поддерживать, потому что пользуюсь этим сам Игорь Лопатин ru E2 (v3572; Aegea) Игорь Лопатин У меня есть несколько хобби-проектов, которые я пытаюсь поддерживать, потому что пользуюсь этим сам 2024 год 271 https://mopsicus.ru/all/2024-year/ Fri, 27 Dec 2024 11:14:53 +0300 Игорь Лопатин https://mopsicus.ru/all/2024-year/ <p>В этом году было всего 8 заметок, вместе с этой 9 😅 Из которых 3 — в декабре. В новом году ухожу с Эгеи...</p> <p>Перевёл все свои заметки и базу знаний в Обсидиан. Оказался удобным, даже с минимумом плагинов. Когда была волна переездов с Ноушена видел статьи как можно обмазаться кучей плагинов и будет почти также, но сам использую только основные. Ещё использую официальный вебклиппер, даже <a href="https://github.com/obsidianmd/obsidian-clipper/commit/13f49fc538041d3399c6afc85ccde4b2283aecc4">запушил</a> русскую локализацию :)</p> <p>И мне понравилась эта идея хранить всё в отдельных файлах, а не в БД, что я решил перевести сайт и блог на такой же формат. Возьму какой-нибудь генератор статичных сайтов или напишу свой, для разминки 🙄 Эгея хороший движок, но все-таки исключительно бложный, который ограничивает многие моменты, да и последние интересные функции платные. Так что, волевым решением, сделаю себе новый сайт и блог, переведу всё на маркдаун файлы и хтмльки, обновлю некоторые заметки которые устарели.</p> <p>Выпустили <a href="https://mopsicus.ru/all/sea-battle-online-game/">Морской Бой</a>. Пока метрики так себе, ожидали немного другого :)) В новом году будет минимум две большие обновы. Ещё в разработке две новые карточные игры, о них как-нибудь расскажу. В начале года выпустил игру <a href="https://mopsicus.ru/all/kanobu-telegram-bot/" class="nu">«<u>Камень, ножницы, бумага</u>»</a> на основе телеграм-бота. Она кстати живая ещё, там даже кто-то играет.</p> <p>Выпустил <a href="https://mopsicus.ru/all/shardy/">Shardy</a> — мой пет-проект, фреймворк для создания онлайн игр. Пока не запушил, но несколько апдейтов уже готовы. Начал делать сервис-дискавери, думаю насчет демки для Яндекс.Игр, может на праздниках получиться, что-то поделать. И статью хотел на Хабр ещё обзорную сделать...</p> <p>Начал пользоваться <a href="https://mopsicus.ru/all/loto-cards-generator-chatgpt/">ChatGPT и другими нейронками</a>. Обработка фото, текстов, саммари, какой-то быстрый анализ. Иногда конечно выглядит как магия, хочет подробнее разобраться и сделать что-то подобное самому.</p> <p>Как-то так. В новом году будет всё лучше и интересней 🔥</p> FSM для C# 270 https://mopsicus.ru/all/fsm-for-csharp/ Thu, 05 Dec 2024 12:18:04 +0300 Игорь Лопатин https://mopsicus.ru/all/fsm-for-csharp/ <p>Доделал пакет для <a href="https://github.com/mopsicus/shardy">Shardy</a>: реализацию машины состояний (finite state machine). Все стейты и триггеры добавляются через билдер, цепочкой.</p> <div class="e2-text-picture"> <h3 style="display: none;" itemprop="name">Finite state machine</h3><h4 style="display: none;" itemprop="description">Finite state machine</h4><img itemprop="contentUrl" src="https://mopsicus.ru/pictures/fsm-example.jpg" width="781" height="1280" alt="Finite state machine" /> </div> <p>Для перехода на стейт надо активировать триггер(ы):</p> <pre class="e2-text-code"><code class="">fsm.Trigger(Action.Down); fsm.Trigger(Action.Down);</code></pre><p>В таком случае получится такой результат:</p> <blockquote> <p>initial is standing<br /> on exit standing<br /> on enter sitting<br /> on exit sitting<br /> on enter lying</p> </blockquote> <p>Ещё подсмотрел, как сгенерить описание для UML диаграммы и <a href="https://www.planttext.com/">отрендерить её на сайте</a> или <a href="http://www.plantuml.com/plantuml/uml/">на этом</a>, по-моему у них один движок:</p> <div class="e2-text-picture"> <h3 style="display: none;" itemprop="name">FSM UML diagram</h3><h4 style="display: none;" itemprop="description">FSM UML diagram</h4><img itemprop="contentUrl" src="https://mopsicus.ru/pictures/fsm-uml.jpg" width="642" height="272" alt="FSM UML diagram" /> </div> <p class="note">Чтобы сделать диаграмму более «интуитивной», вместо слова state используется ключевое слово agent, этом случае можно рисовать разные линии.</p> <pre class="e2-text-code"><code class="">@startuml skin rose title TestFSM left to right direction agent Standing agent Sitting agent Lying agent Jumping note left of Jumping some help message here end note Start --&gt; Standing Standing --&gt; Sitting : Down Standing ~~&gt; Jumping : Space Sitting --&gt; Lying : Down Sitting --&gt; Standing : Up Lying --&gt; Sitting : Up Jumping --&gt; Standing : Down @enduml</code></pre><p>Ещё к каждому переходу можно добавлять условия, (на картинке выше их нет) об этом подробнее в <a href="https://github.com/mopsicus/shardy-fsm/blob/main/Documentation~/index.md">документации</a>.</p> <p>Если у перехода между состояниями есть условие(я), то линия будет рисоваться пунктирной, а если нет триггера — то с крестиком на конце. Актуально когда состояний и переходов много, можно сгенерить диаграмму и посмотреть нет ли косяков.</p> <p><a href="https://github.com/mopsicus/shardy-fsm">Github</a></p> Shardy 267 https://mopsicus.ru/all/shardy/ Thu, 10 Oct 2024 22:33:59 +0300 Игорь Лопатин https://mopsicus.ru/all/shardy/ <div class="e2-text-picture"> <h3 style="display: none;" itemprop="name">Shardy</h3><h4 style="display: none;" itemprop="description">Shardy</h4><img itemprop="contentUrl" src="https://mopsicus.ru/pictures/logo.png" width="512" height="512" alt="Shardy" /> </div> <p>Друзья, был у меня давно один проект, который претерпел уже наверное 4 или 5 итераций. Этой штукой я пользуюсь на своих пет-проектах и со временем появилось желание сделать из всего этого опенсорсную историю. Поэтому начну из далека :)</p> <p>Давным-давно был такой проект на гитхабе <a href="https://github.com/NetEase/pomelo">Pomelo</a>. По меркам интернета — реально древний, ему больше 10 лет. Он и сейчас там есть, но уже заархивирован и не поддерживается, но форки вроде пилятся. Кто первый раз слышит, это фреймворк для создания игровых серверов на JavaScript и Node.js. Проект довольно большой, куча модулей, клиенты под разные платформы, хорошая дока. Наткнулся я на него несколько лет назад и начал ковырять, запускать, что-то пробовать. В итоге, многие вещи в нём мне понравились, но показалось всё как-то замудрёно что ли. Наверно потому что китайцы писали, а может я в ноду не сильно мог 😅 В общем, оттуда я потягал какие-то скрипты, интересные решения, потом переписал, упростил и, получился у меня такой лайтовый сервер из нескольких файлов, на котором я тестил всякие свои проекты, изучал ноду, яваскрипт и тайпскрипт позднее.</p> <p>Потом решил поделиться своими поделками и выложить на гитхаб. Когда было свободное время что-то дописывал, переписывал и снова забывал, потому что были задачи поважнее. В какой-то момент, переписал всё на TypeScript (TS). К тому времени уже были наработки не только сервера, но и клиента на C# + Unity и всё это дело стало обретать какой-то полезный вид. И вот, в результате n-ой итерации, архитектура устоялась, протестировалась и получился Shardy.</p> <p><a href="https://github.com/mopsicus/shardy">Shardy</a> — это фреймворк для онлайн игр и приложений на Node.js. Он даёт базовую функциональность для построения микросервисных решений: мобильных, социальных, веб, многопользовательских игр, приложений реального времени, чатов, middleware сервисов и т. п. Есть клиент на TS встроенный в фреймворк, а также <a href="https://github.com/mopsicus/shardy-unity">пакет для Unity</a>, который поддерживает сборки под iOS, Android и WebGL. Здесь я говорю микросервисных потому что по задумке, за каждый модуль будет отвечать отдельный Shardy-сервис со своими командами, настройками, возможно БД.</p> <p>Основные фичи:</p> <ul> <li>микросервисная парадигма</li> <li>простой API: RPC, команды, подписки и т. п.</li> <li>транспорт данных через сокеты и вебсокеты</li> <li>легкость и быстрота: Node.js и TypeScript</li> <li>поддержка пользовательской сериализации</li> <li>поддержка пользовательской валидации рукопожатий (handshake)</li> <li>продвинутый логгер: теги, фильтры, области</li> <li>справочные материалы: документация, сниппеты, примеры</li> <li>почти нулевая конфигурация</li> </ul> <p>Есть демка с примерами работы API и простенькая онлайн игра «Крестики-Нолики»: как серверная часть, так и клиентская. Всё можно посмотреть, поковырять, запустить у себя и попробовать поиграть. Весь код старался комментировать, иногда даже излишне. Также есть <a href="https://github.com/mopsicus/shardy/blob/main/docs/index.md">документация</a> с описанием всех компонентов и методов. Это всё в процессе наполнения и улучшения.</p> <p>Основная цель Shardy — предоставить простое бесплатное решение для создания многопользовательских онлайн игр. Вот так вот громко 😅 На это будет обращено основное внимание при дальнейшей разработке новых функций, сервисов и туторов (было бы время...).</p> <p>Не претендую на академическую правильность архитектуры и кода, делал в первую очередь для своих нужд. Но как показал опыт: зачастую многие принципы ООП, чистого кода, использование паттернов в «нужных» местах, разбиваются об реальность конкретного проекта :)</p> <p>Приглашаю всех заинтересованных инди и не только, в подписчиках вроде такие есть, посмотреть, покрутить, примерить, потестить на своих каких-то задачах, играх, проектах, прототипах. Если будут вопросы, отвечу тут в комментах или на почту mail@mopsicus.ru. В личку тоже можно, но могу не заметить или долго отвечать.</p> <p>Вот такое интро. Всем хороших игр! Онлайн игр :)</p> <p><a href="https://github.com/mopsicus/shardy">Shardy</a><br /> <a href="https://github.com/mopsicus/shardy-unity">Shardy for Unity</a><br /> <a href="https://github.com/mopsicus/shardy/blob/main/docs/index.md">Docs</a></p> Про донаты 265 https://mopsicus.ru/all/about-donates/ Mon, 09 Sep 2024 15:24:27 +0300 Игорь Лопатин https://mopsicus.ru/all/about-donates/ <p>У меня есть <a href="https://github.com/mopsicus">пару проектов в опенсорсе</a> которые я давно поддерживаю. И только совсем недавно я добавил в ридми файл инфу с кошельками, на которые можно задонатить и поддержать проект. До этого мне просто писали в личку в телеге с вопросами и благодарностями, спрашивали куда и как можно перевести. Штош, я сократил этот путь :)</p> <p>Сам закидываю в помощь авторам, где монетой, где пулл реквестом. И это касается не только разработчиков, ютуберы которые снимают интересные видео, тоже получают материальную благодарочку, а им сейчас сложно :( Считаю что хорошая работа должна быть вознаграждена!</p> <p>К чему это я? Друзья, если давно пользуйтесь какой-то бесплатной программой, утилитой, библиотекой, кодом — скиньте «спасибо» автору, купите премиум, отправьте открытку в конце концов, ему будет приятно, повысит мотивацию не забрасывать свой проект. Всем добра.</p> Unity infinite scroller v2.0 264 https://mopsicus.ru/all/unity-infinite-scroller-v2-0/ Tue, 02 Apr 2024 14:09:54 +0300 Игорь Лопатин https://mopsicus.ru/all/unity-infinite-scroller-v2-0/ <div class="e2-text-picture"> <h3 style="display: none;" itemprop="name">UIS (Unity infinite scroller)</h3><h4 style="display: none;" itemprop="description">UIS (Unity infinite scroller)</h4><img itemprop="contentUrl" src="https://mopsicus.ru/pictures/logo-uis.png" width="896" height="512" alt="UIS (Unity infinite scroller)" /> </div> <p>Обновил скрипт бесконечного списка. Переделал реп в пакет пригодный для Unity, обновил демки, добавил функцию прокрутки к элементу и доку небольшую.</p> <p>Делалось для мобилок, чтобы не тормозило с большим количеством элементов и была привычная функция pull to refresh. Но некоторые используют и в ПК билдах 😄</p> <p><a href="https://github.com/mopsicus/uis">Github</a></p> Unity Mobile Input v2.0 263 https://mopsicus.ru/all/unity-mobile-input-v2-0/ Wed, 27 Mar 2024 14:16:56 +0300 Игорь Лопатин https://mopsicus.ru/all/unity-mobile-input-v2-0/ <div class="e2-text-picture"> <h3 style="display: none;" itemprop="name">UMI aka Unity Mobile Input</h3><h4 style="display: none;" itemprop="description">UMI aka Unity Mobile Input</h4><img itemprop="contentUrl" src="https://mopsicus.ru/pictures/umi-v2.png" width="1468" height="612" alt="UMI aka Unity Mobile Input" /> </div> <p>Обновил свой плагин для создания нативных полей ввода на мобилках. Исправил старые баги, причесал немного код, добавил комменты и обновил демо.</p> <p>Функции:</p> <ul> <li>нативное поле ввода и клавиатура для iOS и Android</li> <li>настройка типа кнопки: Стандартная, Далее, Готово, Поиск, Отправить</li> <li>настройка обработки кнопки</li> <li>настройка кнопкок Готово и Очистить (iOS)</li> <li>изменение опций поля ввода во время выполнения</li> <li>скрытие дополнительного поля ввода (Android)</li> <li>отслеживание появления и скрытия клавиатуры (с высотой)</li> <li>отслеживание ориентации экрана</li> <li>поддержка пользовательских шрифтов</li> </ul> <p>В новой версии добавил несколько методов чтобы можно было менять некоторые параметры во время исполнения:</p> <ul> <li>SetTextColor — изменение цвета текста</li> <li>SetPlaceholderColor — изменение цвета текста подсказки</li> <li>SetBackgroundColor — изменение цвета фона</li> <li>SetContentType — изменение типа поля ввода</li> <li>SetReadonly — изменение состояния «только для чтения»</li> </ul> <p>Устанавливается как пакет через Unity Package Manager.</p> <p><a href="https://github.com/mopsicus/umi">Github</a></p> Unity Builder Bot 259 https://mopsicus.ru/all/telegram-bot-builder-unity/ Wed, 08 Jun 2022 20:12:33 +0300 Игорь Лопатин https://mopsicus.ru/all/telegram-bot-builder-unity/ <p>Бот сделан на основе моего старого скрипта из <a href="https://mopsicus.ru/all/custom-ci-cd-unity/">этой статьи</a>.</p> <p>Телеграм бот и расширение редактора для билда Unity проектов. Можно использовать по отдельности, но проектировалось чтобы работало вместе. Все исходники по ссылкам.</p> <div class="e2-text-picture"> <div class="fotorama" data-width="700" data-ratio="0.8816120906801"> <img src="https://mopsicus.ru/pictures/ubh.png" width="700" height="794" alt="Unity Builder Helper" /> <img src="https://mopsicus.ru/pictures/ubh-settings.png" width="700" height="794" alt="Unity Builder Helper settings" /> </div> </div> <p><a href="https://github.com/mopsicus/ubb">Телеграм бот</a> написан на Node.js и Telegraf.js. Может пулить апдейты, запускать билд юнити проекта, билдить Xcode проект (на маке), всё подписывать, загружать на сервер и скидывать ссылку. Билды для iOS тоже можно ставить по ссылке, там подключается манифест разработчика.</p> <p>Основные функции:</p> <ul> <li>добавить проект из Git репозитория</li> <li>удалить проект</li> <li>получить список всех проектов</li> <li>перейти в нужную ветку</li> <li>спулить апдейт</li> <li>сбилдить Unity проект</li> <li>сбилдить Xcode проект</li> <li>скомпилировать, сделать архив, экспорт в IPA</li> <li>сгенерировать HTML страницу с ссылками</li> <li>загрузить все файлы на сервер через sshpass</li> <li>получить логи</li> <li>очистить логи и билды</li> </ul> <p>Это все можно сделать с помощью телеграм, даже не запуская Unity. Каждый этап сборки логируется и уведомляется ботом.</p> <p><a href="https://github.com/mopsicus/ubh">Расширение редактора</a> позволяет быстро переключаться между платформами, включать дефайны, запускать локальный и удаленный билд на боте, подставлять данные для Keystore, нужные зависимости для Huawei, добавлять локализации для iOS, также добавлять сторонние файлы в билд. Есть <a href="https://github.com/mopsicus/ubh-demo">демка</a> с набором файлов и примерной структурой.</p> <p>Основные функции:</p> <ul> <li>изменить платформу</li> <li>установить defines</li> <li>выбрать папку для билдов под каждую платформу</li> <li>изменить версию, номер билда</li> <li>подставить данные для Keystore</li> <li>добавить локали и *.lproj файлы в Xcode проект</li> <li>добавить фреймворки и дополнительные файлы в Xcode проект</li> <li>добавить и применить google-services.json и agconnect-services.json</li> <li>добавить дополнительные файлы в APK</li> <li>пропатчить AndroidManifest.xml</li> <li>пропатчить gradle файлы</li> <li>добавить зависимости для Huawei билда</li> <li>сбилдить Unity проект</li> </ul> <p>Получилось как-то так, думаю кому-то будет полезно и интересно поковырять исходники. Подписывайтесь на <a href="https://t.me/mopsicus_ru">Telegram канал</a>, там посты появляются чаще %)</p> 200 звёзд на Github 232 https://mopsicus.ru/all/200-stars-github-infinite-scroll-unity/ Tue, 12 Jan 2021 11:27:07 +0300 Игорь Лопатин https://mopsicus.ru/all/200-stars-github-infinite-scroll-unity/ <p class="loud">Achievement unlocked!</p> <p>Моё новое скромное достижение. Скрипт с <a href="https://github.com/mopsicus/infinite-scroll-unity">data-driven прокруткой для Unity</a>, получил 200 звёзд на Github. Спасибо S1ROZHA :)</p> <div class="e2-text-picture"> <h3 style="display: none;" itemprop="name">Infinite scroll unity 200 stars</h3><h4 style="display: none;" itemprop="description">Infinite scroll unity 200 stars</h4><img itemprop="contentUrl" src="https://mopsicus.ru/pictures/scroll-200-stars.png" width="661" height="185" alt="Infinite scroll unity 200 stars" /> </div> <p>Мне как-то писали, что используют его в MTG Arena и ещё какой-то популярной игре. Приятно что этим пользуюсь не только я.</p> Кастомные шрифты в UnityMobileInput 221 https://mopsicus.ru/all/custom-fonts-support-unitymobileinput/ Thu, 15 Oct 2020 22:03:51 +0300 Игорь Лопатин https://mopsicus.ru/all/custom-fonts-support-unitymobileinput/ <p>Обновил плагин <a href="https://github.com/mopsicus/UnityMobileInput">UnityMobileInput</a>.</p> <p>Теперь можно использовать свои шрифты в нативном поле ввода. Просто копируете TTF шрифт в проект, в папку <b>StreamingAssets</b>, дальше плагин всё сделает сам: скопирует в папку приложения на Android или iOS и применит для нужного поля ввода.</p> <p>Также, был баг (фича), что при тапе по экрану клавиатура исчезала, это её нормальное поведение, в общем-то. Но иногда надо чтобы она оставалась видимой даже если на что-то жмёшь. Теперь есть такая опция.</p> 100 звёзд на Github 169 https://mopsicus.ru/all/github-100-stars/ Mon, 08 Jul 2019 10:34:58 +0300 Игорь Лопатин https://mopsicus.ru/all/github-100-stars/ <p><a href="https://github.com/mopsicus/infinite-scroll-unity">Скрипт с бесконечным скроллом для Unity</a> получил 100 звёзд на Github. Вроде мелочь, а приятно :)</p> <div class="e2-text-picture"> <h3 style="display: none;" itemprop="name"></h3><h4 style="display: none;" itemprop="description"></h4><img itemprop="contentUrl" src="https://mopsicus.ru/pictures/scroller-git-stars.png" width="474" height="169" alt="" /> </div> <p>Кстати, если решили что-то делать в open source, но не знаете как начать, прочтите этот <a href="https://ru.hexlet.io/blog/posts/participate-in-open-source">перевод небольшой статьи на Hexlet</a>.</p> UnityMobileInput больше не нужен 165 https://mopsicus.ru/all/textmeshpro-inputfield-unitymobileinput/ Mon, 13 May 2019 16:30:57 +0300 Игорь Лопатин https://mopsicus.ru/all/textmeshpro-inputfield-unitymobileinput/ <p><i>Обновлено 16.05.2019</i><br /> Свершилось. В новой версии Unity 2019.1 допилили поле ввода (InputField) в TextMeshPro.</p> <div class="e2-text-picture"> <h3 style="display: none;" itemprop="name"></h3><h4 style="display: none;" itemprop="description"></h4><img itemprop="contentUrl" src="https://mopsicus.ru/pictures/tmp-inputfield-mobile.png" width="428" height="419" alt="" /> <div class="e2-text-caption">Раньше эта галочка не работала и поле ввода всё равно появлялось.</div> </div> <p>Теперь дополнительное поле ввода не появляется на iOS и Android! Мой <a href="https://github.com/mopsicus/UnityMobileInput">UnityMobileInput</a> не особо-то и нужен, всё можно сделать «штатными» компонентами и оно будет работать как надо, вроде :) Там же есть и поддержка эмоджи.</p> <h3>UPD</h3> <p>Рано радовался, определять высоту экранной клавиатуры юнитеки так и не научились... Всё равно придётся использовать костыль, хоть и меньшего размера :)</p> Сервер на Node.js и клиент на Unity 164 https://mopsicus.ru/all/node-js-game-server-unity-client/ Wed, 08 May 2019 13:01:41 +0300 Игорь Лопатин https://mopsicus.ru/all/node-js-game-server-unity-client/ <div class="e2-text-picture"> <h3 style="display: none;" itemprop="name"></h3><h4 style="display: none;" itemprop="description"></h4><img itemprop="contentUrl" src="https://mopsicus.ru/pictures/nodejs-server-unity-client.jpg" width="515" height="222" alt="" /> </div> <p>Задумал я тут выложить на Github свою очередную поделку — простой сервер на Node.js и клиента к нему на Unity. Много раз сам гуглил различные библиотеки, пробовал, тестировал, пытался сам написать что-то (с моими познаниями в Node.js :), но потом подсмотрел как сделано у старого китайского <a href="https://github.com/NetEase/pomelo">Pomelo</a>, который уже сто лет не поддерживается.</p> <p>Если честно, когда я первый раз узнал про Pomelo и начал его изучать, то понял, что для моих текущих задач такой функциональности не требуется, поэтому решил выпилить всё что не нужно. В итоге, осталось вот что:</p> <p class="note">Опыта в Node.js у меня не очень много, поэтому я нагуглил такой фреймворк — Architect. Не знаю насколько это оправдано, но пока сделано с помощью него.</p> <ul> <li>многопользовательский сервер для <b>не</b>реалтаймовых игр</li> <li>отправка и получение команд и запросов (аналог JSON RPC)</li> <li>поддержка SSL</li> <li>основная часть на <a href="https://github.com/c9/architect">Architect</a></li> <li>простое добавление команд: один файл = одна команда</li> <li>работает с MongoDB</li> </ul> <h2>Команды (события)</h2> <pre class="e2-text-code"><code class="">public void TestCommand () { JsonObject param = new JsonObject(); param[&quot;param&quot;] = &quot;value&quot;; _connector.Command(&quot;test-cmd&quot;, param); // _connector.Command(&quot;test-cmd&quot;); // without params }</code></pre><p>Чтобы «слушать» команды с сервера надо подписаться на команду (событие):</p> <pre class="e2-text-code"><code class="">public void TestCommand () { _connector.On(&quot;test-cmd&quot;, OnTestCmd); // _connector.Off(&quot;test-cmd&quot;, OnTestCmd); // unsubscribe } void OnTestCmd (JsonObject result) { if (_connector.IsError (result)) { // handle error return; } // handle result }</code></pre><h2>Запросы (RPC)</h2> <pre class="e2-text-code"><code class="">public void TestRequest () { JsonObject param = new JsonObject(); param[&quot;param&quot;] = &quot;value&quot;; _connector.Request (&quot;test-rqt&quot;, param, (result) =&gt; { // handle answer }); // _connector.Request (&quot;test-rqt&quot;, OnTestRequest); // without params // _connector.Request (&quot;test-rqt&quot;, param, OnTestRequest); // callback in external method } void OnTestRequest (JsonObject result) { if (_connector.IsError (result)) { // handle error return; } // handle result }</code></pre><p>На RPC запросы с сервера можно подписаться также как и на обычные команды. Отличие в том, на них надо обязательно «отвечать».</p> <p>На сервере каждая команда находится в отдельном файле и экспортируется, как-то так:</p> <pre class="e2-text-code"><code class="">module.exports = function (commander, message, imports) { if (!validate(message.data, commander.protocol.log)) { commander.sendError(message, &quot;invalid_data&quot;); return; } ... commander.sendResponse(message, { result: &quot;ok&quot; }); };</code></pre><p>Протокол сообщений можно легко переделать, добавить шифрование или свой какой-то формат, можно посмотреть в репе Pomelo, у меня будет также примерно.</p> <p>Для создания простой многопользовательской онлайн игры — этого достаточно. Это будет такая демка, когда можно взять сервер и клиент, запустить и сразу увидеть как оно работает. Код будет полностью доступен, так что умеющие в Node.js и C#, смогут переписать мои «костыли» на свои :)</p> <p>После тестирования и «боевой» проверки на игре, если всё получится, думаю сделать небольшой курс, где опишу, как на основе такой базы делать несложные онлайн игры. Но замечу ещё раз — НЕ реалтайм!</p> <p>Stay tuned.</p> Обновление UnityMobileInput 138 https://mopsicus.ru/all/update-unity-mobile-input/ Fri, 16 Nov 2018 12:53:48 +0300 Игорь Лопатин https://mopsicus.ru/all/update-unity-mobile-input/ <p>Теперь высота клавиатуры считается правильно везде и экран не сдвигается вверх при появлении клавиатуры. Это на Android такая история была.</p> <p>Зарефакторил много старого кода, убрал не нужное, добавил кастомный инспектор, все настройки поля теперь берутся из Unity UI компонента InputField, клавиатура не пропадает если переключаться между полями и другие мелочи.</p> <p class="note">Напомню, что в Unity есть один нюанс при работе с пользовательским вводом на андроидах — появляется дополнительное поле ввода над клавиатурой. Оно, в общем-то работает, но с ограничениями (нельзя выделять текст и другие нативные штуки) и занимает место.</p> <div class="e2-text-picture"> <h3 style="display: none;" itemprop="name"></h3><h4 style="display: none;" itemprop="description"></h4><img itemprop="contentUrl" src="https://mopsicus.ru/pictures/unitymobileinput-inspector-old.png" width="571" height="227" alt="" /> <div class="e2-text-caption">Было</div> </div> <div class="e2-text-picture"> <h3 style="display: none;" itemprop="name"></h3><h4 style="display: none;" itemprop="description"></h4><img itemprop="contentUrl" src="https://mopsicus.ru/pictures/unitymobileinput-inspector.png" width="558" height="258" alt="" /> <div class="e2-text-caption">Стало</div> </div> <p>Вроде работает :)<br /> <a href="https://mopsicus.ru/all/unity-mobile-input-plugin/">UnityMobileInput</a></p> Обновил Infinite Scroll 128 https://mopsicus.ru/all/update-infinite-scroll/ Fri, 07 Sep 2018 15:00:47 +0300 Игорь Лопатин https://mopsicus.ru/all/update-infinite-scroll/ <p>Был у меня старый скрипт для <a href="https://mopsicus.ru/all/infinity-scroll-unity/">бесконечных списков в Unity</a>. Но там было одно ограничение — ячейки должны были быть одной высоты. Но сейчас это стало необходимо, поэтому пришлось переписать скрипт.</p> <div class="lazy" data-expose="true" data-effect="relax"><div class="e2-text-video"> <iframe src="https://www.youtube.com/embed/cUkDoX_AR2U" frameborder="0" allowfullscreen></iframe></div></div> <p>Теперь все ячейки могут быть любой высоты! Работает также быстро и с помощью одного скрипта.</p> <p><a href="https://github.com/mopsicus/infinite-scroll-unity">Ссылка на Github</a></p> Unity Mobile Input 113 https://mopsicus.ru/all/unity-mobile-input-plugin/ Tue, 10 Apr 2018 11:31:43 +0300 Игорь Лопатин https://mopsicus.ru/all/unity-mobile-input-plugin/ <p>Выложил на Github плагин нативного ввода для мобильных устройств. Это небольшая надстройка над стандартным Unity InputField UI. Работает на iOS и Android.</p> <p>Зачем он нужен:</p> <ol start="1"> <li>Нативное поле ввода и клавиатура</li> <li>Отсутствует раздражающее дополнительное поле над клавиатурой в Android</li> <li>Для iOS можно добавить кнопку «Готово»</li> <li>Настройка кнопки Return для клавиатуры: стандартная, далее, готово, поиск</li> <li>Для работы нужно просто повестить скрипт <b>MobileInput</b> на родной InputField UI</li> </ol> <div class="lazy" data-expose="true" data-effect="relax"><div class="e2-text-video"> <iframe src="https://www.youtube.com/embed/181jrTj2Upg" frameborder="0" allowfullscreen></iframe></div></div> <p>До этого, было <a href="https://mopsicus.ru/all/hide-mobile-input-android-unity/">временное решение</a>, которое не обладало необходимыми опциями, да и ошибки были. Собственно, на то оно и временное :) Но в Unity до сих пор нет таких возможностей для ввода, поэтому пришлось сделать такой плагин.</p> <p class="foot">В моей версии исправлены ошибки и отрефакторен почти весь код от старого и неподдерживаемого плагина <a href="https://github.com/kmbang/UnityNativeEdit">UnityNativeEdit</a>.</p> <p><a href="https://github.com/mopsicus/UnityMobileInput">Исходники на Github</a></p> Riddut. Возвращение. 99 https://mopsicus.ru/all/riddut-returns/ Sat, 03 Feb 2018 21:22:31 +0300 Игорь Лопатин https://mopsicus.ru/all/riddut-returns/ <div class="e2-text-picture"> <h3 style="display: none;" itemprop="name"></h3><h4 style="display: none;" itemprop="description"></h4><img itemprop="contentUrl" src="https://mopsicus.ru/pictures/riddut-image.png" width="610" height="550" alt="" /> </div> <p>В 2015 году я сделал для себя небольшой плагин для браузера — он вырезал из ленты ВК и ФБ ненужные мне записи по стоп-словам. Всё работало очень просто: находил в ленте слово и удалял пост.</p> <p>Потом, я добавил поддержку морфологии, чтобы не добавлять кучу слов с разными окончаниями. Ещё скрипт научился удалять контекстную рекламу и фильтровать выдачу поисковых систем. И итогом стала — фильтрация любого сайта. Иногда от этого страдает вёрстка, но оно того стоит. Новостной сайт после фильтра хоть можно читать...</p> <p>После этого, я успешно про него забыл. И вот 2018 год: выборы, санкции, олимпийцы — пришло время снова очистить своё информационного пространство от, и смахнуть пыль со старого кода.</p> <p class="loud">Riddut</p> <p>Так называется расширение. Да, оно ограждает от нескончаемого потока информационного шума. Это такой персональный AdBlock для контента.<br /> Вот что умеет:</p> <ul> <li>удалять любое упоминание стоп-слова на любом сайте</li> <li>удалять посты и рекламу из соц. сетей Фейсбук, ВКонтакте, Одноклассники, Твиттер по ключевым словам</li> <li>удалять позиции в выдаче и рекламу поисковых систем Яндекс, Гугл, Бинг</li> <li>фильтровать дозагруженный контент</li> <li>работать с белыми списками сайтов</li> <li>понимать русскую и английскую морфологию (не полностью)</li> <li>синхронизироваться между браузерами</li> <li>показывать красивую статистику «сэкономленного» времени :_)</li> </ul> <div class="e2-text-picture"> <h3 style="display: none;" itemprop="name"></h3><h4 style="display: none;" itemprop="description"></h4><img itemprop="contentUrl" src="https://mopsicus.ru/pictures/riddut-how-to.jpg" width="914" height="289" alt="" /> </div> <p>Сейчас всё это дело в бета версии, так что, если расширение окажется вам полезным — напишите на <a href="mailto:mail@mopsicus.ru">mail@mopsicus.ru</a>, что добавить, убрать, исправить, улучшить. Захотите поучаствовать? Буду рад.</p> <p>Есть версии для Chrome, Safari и Opera. С Firefox пока не разобрался в чём проблема, но думаю решу.</p> <p>Подробнее на <a href="https://riddut.mopsicus.ru">https://riddut.mopsicus.ru</a></p> <p class="foot">Заметка чтобы попереживать. Да, расширение отправляет на сайт слова, чтобы с помощью библиотеки морфологии, получить в ответ все его формы и отфильтровать страницу. Ещё оно скачивает актуальные данные по вёрстке. Это всё. В любом случае, всё что отправляет и получает расширение можно посмотреть через консоль. Если вас это не устраивает, что ж, вы можете не использовать моё расширение :)</p> <p><b>Riddut</b> — это не баннерорезалка. Удаление некоторой рекламы, это приятный бонус, а не основная функция. Но вы легко можете использовать и то и другое вместе.</p>