100 звёзд на Github
Скрипт с бесконечным скроллом для Unity получил 100 звёзд на Github. Вроде мелочь, а приятно :)

Кстати, если решили что-то делать в open source, но не знаете как начать, прочтите этот перевод небольшой статьи на Hexlet.
У меня есть несколько хобби-проектов, которые я пытаюсь поддерживать, потому что пользуюсь этим сам :_)
Это скрипт который делает из Unity ScrollRect бесконечный список. Всего один скрипт. Элементы списка можно настраивать как угодно. Поддерживаются элементы разной высоты и ширины. Есть опция pull-to-refresh. Можно делать как вертикальную прокрутку, так и горизонтальную. Демо и исходники по ссылке ниже.
Вообще, этот скрипт предназначен для мобильных приложений и игр, но некоторые пользуются и для десктопа. Как он себя там ведёт не знаю, не проверял.
В Unity есть такой компонент InputField, это поле пользовательского ввода с клавиатуры. На мобильных устройствах, над клавиатурой появляется дополнительная полоска с полем ввода, которая занимает пространство. Кроме того, в таком поле нет стандартных функций, например, копирования и выделения. Emoji тоже не поддерживается.
Я сделал компонент и плагин, которые заменяют поле ввода Unity на стандартное нативное поле из Android и iOS, со всеми вытекающими. Да, у него есть недостатки, например, такое поле ввода накладывается поверх всего на экране. Разработчик TextMeshPro на форуме обещал, что в одной из версий Unity 2019.x это будет «исправлено», тогда я перестану поддерживать этот компонент.
Riddut — это расширения для браузера которое удаляет со страниц HTML элементы содержащие определенные ключевые слова. Я его сделал давным-давно для себя, но потом решил сделать какое-то подобие сервиса, потому что многие интересовались. Но до конца так и не доделал... Если у кого-то есть желание, переписать расширения на WebAssembly (давно пора) и серверную часть на что-то более достойное, чем обычный PHP-говнокод, то напишите мне :)
Скрипт с бесконечным скроллом для Unity получил 100 звёзд на Github. Вроде мелочь, а приятно :)
Кстати, если решили что-то делать в open source, но не знаете как начать, прочтите этот перевод небольшой статьи на Hexlet.
Обновлено 16.05.2019
Свершилось. В новой версии Unity 2019.1 допилили поле ввода (InputField) в TextMeshPro.
Теперь дополнительное поле ввода не появляется на iOS и Android! Мой UnityMobileInput не особо-то и нужен, всё можно сделать «штатными» компонентами и оно будет работать как надо, вроде :) Там же есть и поддержка эмоджи.
Рано радовался, определять высоту экранной клавиатуры юнитеки так и не научились... Всё равно придётся использовать костыль, хоть и меньшего размера :)
Задумал я тут выложить на Github свою очередную поделку — простой сервер на Node.js и клиента к нему на Unity. Много раз сам гуглил различные библиотеки, пробовал, тестировал, пытался сам написать что-то (с моими познаниями в Node.js :), но потом подсмотрел как сделано у старого китайского Pomelo, который уже сто лет не поддерживается.
Если честно, когда я первый раз узнал про Pomelo и начал его изучать, то понял, что для моих текущих задач такой функциональности не требуется, поэтому решил выпилить всё что не нужно. В итоге, осталось вот что:
Опыта в Node.js у меня не очень много, поэтому я нагуглил такой фреймворк — Architect. Не знаю насколько это оправдано, но пока сделано с помощью него.
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
}
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.
Теперь высота клавиатуры считается правильно везде и экран не сдвигается вверх при появлении клавиатуры. Это на Android такая история была.
Зарефакторил много старого кода, убрал не нужное, добавил кастомный инспектор, все настройки поля теперь берутся из Unity UI компонента InputField, клавиатура не пропадает если переключаться между полями и другие мелочи.
Напомню, что в Unity есть один нюанс при работе с пользовательским вводом на андроидах — появляется дополнительное поле ввода над клавиатурой. Оно, в общем-то работает, но с ограничениями (нельзя выделять текст и другие нативные штуки) и занимает место.
Вроде работает :)
UnityMobileInput
Был у меня старый скрипт для бесконечных списков в Unity. Но там было одно ограничение — ячейки должны были быть одной высоты. Но сейчас это стало необходимо, поэтому пришлось переписать скрипт.
Теперь все ячейки могут быть любой высоты! Работает также быстро и с помощью одного скрипта.
Выложил на Github плагин нативного ввода для мобильных устройств. Это небольшая надстройка над стандартным Unity InputField UI. Работает на iOS и Android.
Зачем он нужен:
До этого, было временное решение, которое не обладало необходимыми опциями, да и ошибки были. Собственно, на то оно и временное :) Но в Unity до сих пор нет таких возможностей для ввода, поэтому пришлось сделать такой плагин.
В моей версии исправлены ошибки и отрефакторен почти весь код от старого и неподдерживаемого плагина UnityNativeEdit.
В 2015 году я сделал для себя небольшой плагин для браузера — он вырезал из ленты ВК и ФБ ненужные мне записи по стоп-словам. Всё работало очень просто: находил в ленте слово и удалял пост.
Потом, я добавил поддержку морфологии, чтобы не добавлять кучу слов с разными окончаниями. Ещё скрипт научился удалять контекстную рекламу и фильтровать выдачу поисковых систем. И итогом стала — фильтрация любого сайта. Иногда от этого страдает вёрстка, но оно того стоит. Новостной сайт после фильтра хоть можно читать...
После этого, я успешно про него забыл. И вот 2018 год: выборы, санкции, олимпийцы — пришло время снова очистить своё информационного пространство от, и смахнуть пыль со старого кода.
Riddut
Так называется расширение. Да, оно ограждает от нескончаемого потока информационного шума. Это такой персональный AdBlock для контента.
Вот что умеет:
Сейчас всё это дело в бета версии, так что, если расширение окажется вам полезным — напишите на mail@mopsicus.ru, что добавить, убрать, исправить, улучшить. Захотите поучаствовать? Буду рад.
Есть версии для Chrome, Safari и Opera. С Firefox пока не разобрался в чём проблема, но думаю решу.
Подробнее на https://riddut.mopsicus.ru
Заметка чтобы попереживать. Да, расширение отправляет на сайт слова, чтобы с помощью библиотеки морфологии, получить в ответ все его формы и отфильтровать страницу. Ещё оно скачивает актуальные данные по вёрстке. Это всё. В любом случае, всё что отправляет и получает расширение можно посмотреть через консоль. Если вас это не устраивает, что ж, вы можете не использовать моё расширение :)
Riddut — это не баннерорезалка. Удаление некоторой рекламы, это приятный бонус, а не основная функция. Но вы легко можете использовать и то и другое вместе.