{ "version": "https:\/\/jsonfeed.org\/version\/1", "title": "#mopsicus: заметки с тегом с#", "_rss_description": "об играх, разработке на Unity и личном опыте", "_rss_language": "ru", "_itunes_email": "", "_itunes_categories_xml": "", "_itunes_image": "", "_itunes_explicit": "", "home_page_url": "https:\/\/mopsicus.ru\/tags\/csharp\/", "feed_url": "https:\/\/mopsicus.ru\/tags\/csharp\/json\/", "icon": "https:\/\/mopsicus.ru\/user\/userpic@2x.jpg?1707898340", "author": { "name": "Игорь Лопатин", "url": "https:\/\/mopsicus.ru\/", "avatar": "https:\/\/mopsicus.ru\/user\/userpic@2x.jpg?1707898340" }, "items": [ { "id": "270", "url": "https:\/\/mopsicus.ru\/all\/fsm-for-csharp\/", "title": "FSM для C#", "content_html": "
Доделал пакет для Shardy<\/a>: реализацию машины состояний (finite state machine). Все стейты и триггеры добавляются через билдер, цепочкой.<\/p>\n Для перехода на стейт надо активировать триггер(ы):<\/p>\n В таком случае получится такой результат:<\/p>\n initial is standing Ещё подсмотрел, как сгенерить описание для UML диаграммы и отрендерить её на сайте<\/a> или на этом<\/a>, по-моему у них один движок:<\/p>\n Чтобы сделать диаграмму более «интуитивной», вместо слова state используется ключевое слово agent, этом случае можно рисовать разные линии.<\/p>\n Ещё к каждому переходу можно добавлять условия, (на картинке выше их нет) об этом подробнее в документации<\/a>.<\/p>\n Если у перехода между состояниями есть условие(я), то линия будет рисоваться пунктирной, а если нет триггера — то с крестиком на конце. Актуально когда состояний и переходов много, можно сгенерить диаграмму и посмотреть нет ли косяков.<\/p>\n Github<\/a><\/p>\n",
"date_published": "2024-12-05T12:18:04+03:00",
"date_modified": "2024-12-05T12:17:48+03:00",
"image": "https:\/\/mopsicus.ru\/pictures\/fsm-example.jpg",
"_date_published_rfc2822": "Thu, 05 Dec 2024 12:18:04 +0300",
"_rss_guid_is_permalink": "false",
"_rss_guid": "270",
"_e2_data": {
"is_favourite": false,
"links_required": [
"system\/library\/highlight\/highlight.js",
"system\/library\/highlight\/highlight.css",
"system\/library\/highlight\/highlight.js",
"system\/library\/highlight\/highlight.css",
"system\/library\/highlight\/highlight.js",
"system\/library\/highlight\/highlight.css",
"system\/library\/highlight\/highlight.js",
"system\/library\/highlight\/highlight.css"
],
"og_images": [
"https:\/\/mopsicus.ru\/pictures\/fsm-example.jpg",
"https:\/\/mopsicus.ru\/pictures\/fsm-uml.jpg"
]
}
},
{
"id": "267",
"url": "https:\/\/mopsicus.ru\/all\/shardy\/",
"title": "Shardy",
"content_html": " Друзья, был у меня давно один проект, который претерпел уже наверное 4 или 5 итераций. Этой штукой я пользуюсь на своих пет-проектах и со временем появилось желание сделать из всего этого опенсорсную историю. Поэтому начну из далека :)<\/p>\n Давным-давно был такой проект на гитхабе Pomelo<\/a>. По меркам интернета — реально древний, ему больше 10 лет. Он и сейчас там есть, но уже заархивирован и не поддерживается, но форки вроде пилятся. Кто первый раз слышит, это фреймворк для создания игровых серверов на JavaScript и Node.js. Проект довольно большой, куча модулей, клиенты под разные платформы, хорошая дока. Наткнулся я на него несколько лет назад и начал ковырять, запускать, что-то пробовать. В итоге, многие вещи в нём мне понравились, но показалось всё как-то замудрёно что ли. Наверно потому что китайцы писали, а может я в ноду не сильно мог 😅 В общем, оттуда я потягал какие-то скрипты, интересные решения, потом переписал, упростил и, получился у меня такой лайтовый сервер из нескольких файлов, на котором я тестил всякие свои проекты, изучал ноду, яваскрипт и тайпскрипт позднее.<\/p>\n Потом решил поделиться своими поделками и выложить на гитхаб. Когда было свободное время что-то дописывал, переписывал и снова забывал, потому что были задачи поважнее. В какой-то момент, переписал всё на TypeScript (TS). К тому времени уже были наработки не только сервера, но и клиента на C# + Unity и всё это дело стало обретать какой-то полезный вид. И вот, в результате n-ой итерации, архитектура устоялась, протестировалась и получился Shardy.<\/p>\n Shardy<\/a> — это фреймворк для онлайн игр и приложений на Node.js. Он даёт базовую функциональность для построения микросервисных решений: мобильных, социальных, веб, многопользовательских игр, приложений реального времени, чатов, middleware сервисов и т. п. Есть клиент на TS встроенный в фреймворк, а также пакет для Unity<\/a>, который поддерживает сборки под iOS, Android и WebGL. Здесь я говорю микросервисных потому что по задумке, за каждый модуль будет отвечать отдельный Shardy-сервис со своими командами, настройками, возможно БД.<\/p>\n Основные фичи:<\/p>\n Есть демка с примерами работы API и простенькая онлайн игра «Крестики-Нолики»: как серверная часть, так и клиентская. Всё можно посмотреть, поковырять, запустить у себя и попробовать поиграть. Весь код старался комментировать, иногда даже излишне. Также есть документация<\/a> с описанием всех компонентов и методов. Это всё в процессе наполнения и улучшения.<\/p>\n Основная цель Shardy — предоставить простое бесплатное решение для создания многопользовательских онлайн игр. Вот так вот громко 😅 На это будет обращено основное внимание при дальнейшей разработке новых функций, сервисов и туторов (было бы время...).<\/p>\n Не претендую на академическую правильность архитектуры и кода, делал в первую очередь для своих нужд. Но как показал опыт: зачастую многие принципы ООП, чистого кода, использование паттернов в «нужных» местах, разбиваются об реальность конкретного проекта :)<\/p>\n Приглашаю всех заинтересованных инди и не только, в подписчиках вроде такие есть, посмотреть, покрутить, примерить, потестить на своих каких-то задачах, играх, проектах, прототипах. Если будут вопросы, отвечу тут в комментах или на почту mail@mopsicus.ru. В личку тоже можно, но могу не заметить или долго отвечать.<\/p>\n Вот такое интро. Всем хороших игр! Онлайн игр :)<\/p>\n Shardy<\/a> Обновил скрипт бесконечного списка. Переделал реп в пакет пригодный для Unity, обновил демки, добавил функцию прокрутки к элементу и доку небольшую.<\/p>\n Делалось для мобилок, чтобы не тормозило с большим количеством элементов и была привычная функция pull to refresh. Но некоторые используют и в ПК билдах 😄<\/p>\n Github<\/a><\/p>\n",
"date_published": "2024-04-02T14:09:54+03:00",
"date_modified": "2024-04-02T14:09:44+03:00",
"image": "https:\/\/mopsicus.ru\/pictures\/logo-uis.png",
"_date_published_rfc2822": "Tue, 02 Apr 2024 14:09:54 +0300",
"_rss_guid_is_permalink": "false",
"_rss_guid": "264",
"_e2_data": {
"is_favourite": false,
"links_required": [],
"og_images": [
"https:\/\/mopsicus.ru\/pictures\/logo-uis.png"
]
}
},
{
"id": "263",
"url": "https:\/\/mopsicus.ru\/all\/unity-mobile-input-v2-0\/",
"title": "Unity Mobile Input v2.0",
"content_html": " Обновил свой плагин для создания нативных полей ввода на мобилках. Исправил старые баги, причесал немного код, добавил комменты и обновил демо.<\/p>\n Функции:<\/p>\n В новой версии добавил несколько методов чтобы можно было менять некоторые параметры во время исполнения:<\/p>\n Устанавливается как пакет через Unity Package Manager.<\/p>\n Github<\/a><\/p>\n",
"date_published": "2024-03-27T14:16:56+03:00",
"date_modified": "2024-03-27T14:16:46+03:00",
"image": "https:\/\/mopsicus.ru\/pictures\/umi-v2.png",
"_date_published_rfc2822": "Wed, 27 Mar 2024 14:16:56 +0300",
"_rss_guid_is_permalink": "false",
"_rss_guid": "263",
"_e2_data": {
"is_favourite": false,
"links_required": [],
"og_images": [
"https:\/\/mopsicus.ru\/pictures\/umi-v2.png"
]
}
},
{
"id": "261",
"url": "https:\/\/mopsicus.ru\/all\/heroes-of-gildgaard\/",
"title": "Герои Гильдгаарда",
"content_html": " Запустили в софтлонч нашу первую игру с 3D, логическая онлайн стратегия на 2 или 4 игрока. Для любителей шашек, нард, шахмат, го и прочих настольных игр такого типа, будет интересно. Тут нет рандома, есть несколько стратегий, партии довольно короткие. Написал чуть подробнее на Пикабу<\/a>.<\/p>\n Делали на Unity. Доступно в AppStore<\/a>, Google Play<\/a> и AppGallery<\/a>.<\/p>\n",
"date_published": "2023-09-24T13:25:31+03:00",
"date_modified": "2023-09-24T13:25:20+03:00",
"image": "https:\/\/mopsicus.ru\/pictures\/banner.png",
"_date_published_rfc2822": "Sun, 24 Sep 2023 13:25:31 +0300",
"_rss_guid_is_permalink": "false",
"_rss_guid": "261",
"_e2_data": {
"is_favourite": false,
"links_required": [],
"og_images": [
"https:\/\/mopsicus.ru\/pictures\/banner.png"
]
}
},
{
"id": "259",
"url": "https:\/\/mopsicus.ru\/all\/telegram-bot-builder-unity\/",
"title": "Unity Builder Bot",
"content_html": " Бот сделан на основе моего старого скрипта из этой статьи<\/a>.<\/p>\n Телеграм бот и расширение редактора для билда Unity проектов. Можно использовать по отдельности, но проектировалось чтобы работало вместе. Все исходники по ссылкам.<\/p>\n Телеграм бот<\/a> написан на Node.js и Telegraf.js. Может пулить апдейты, запускать билд юнити проекта, билдить Xcode проект (на маке), всё подписывать, загружать на сервер и скидывать ссылку. Билды для iOS тоже можно ставить по ссылке, там подключается манифест разработчика.<\/p>\n Основные функции:<\/p>\n Это все можно сделать с помощью телеграм, даже не запуская Unity. Каждый этап сборки логируется и уведомляется ботом.<\/p>\n Расширение редактора<\/a> позволяет быстро переключаться между платформами, включать дефайны, запускать локальный и удаленный билд на боте, подставлять данные для Keystore, нужные зависимости для Huawei, добавлять локализации для iOS, также добавлять сторонние файлы в билд. Есть демка<\/a> с набором файлов и примерной структурой.<\/p>\n Основные функции:<\/p>\n Получилось как-то так, думаю кому-то будет полезно и интересно поковырять исходники. Подписывайтесь на Telegram канал<\/a>, там посты появляются чаще %)<\/p>\n",
"date_published": "2022-06-08T20:12:33+03:00",
"date_modified": "2022-06-09T11:49:49+03:00",
"image": "https:\/\/mopsicus.ru\/pictures\/ubh.png",
"_date_published_rfc2822": "Wed, 08 Jun 2022 20:12:33 +0300",
"_rss_guid_is_permalink": "false",
"_rss_guid": "259",
"_e2_data": {
"is_favourite": true,
"links_required": [
"system\/library\/jquery\/jquery.js",
"system\/library\/fotorama\/fotorama.css",
"system\/library\/fotorama\/fotorama.js"
],
"og_images": [
"https:\/\/mopsicus.ru\/pictures\/ubh.png",
"https:\/\/mopsicus.ru\/pictures\/ubh-settings.png"
]
}
},
{
"id": "257",
"url": "https:\/\/mopsicus.ru\/all\/unity-webgl-tips\/",
"title": "Unity и WebGL",
"content_html": " Не от хорошей жизни пришлось делать WebGL версии наших мобильных игр :) Т. е. изначально, игры не продумывалась для браузера, но тем не менее, после небольших доработок и рефакторинга — всё необходимое заработало. Эта статья как раз для тех, кто задумался над выпуском версии для веб: набор из нескольких наблюдений, советов, собственных мыслей и велосипедов.<\/p>\n Вебсокеты<\/b>. Так как у нас все игры — онлайн, то первое что сделал — поддержка сети. В мобильных играх у нас используются TCP сокеты, для браузера же надо использовать вебсокеты (WebSocket). И сразу надо сказать: C#’ские вебсокеты работать не будут. Надо брать готовый или писать свой JS плагин. И в качестве примера, в телеграм канале я уже постил этот реп<\/a>. Он старый, работает и для примера пойдёт. Там кстати сделана поддержка вебсокетов в редакторе (уже через C#’ские). Т. е. можно дебажить и билдить, работать всё будет. В ассетсторе тоже есть разные реализации вебсокетов для WebGL, можно поискать, есть и Socket.IO, Mirror.<\/p>\n Да, для WebGL тоже можно и нужно писать плагины<\/a>, как и для Android и iOS.<\/p>\n В общем, в браузере много что работать не будет и особенно всё что связано с мобильной платформой: галерея, авторизация, пуши, буфер обмена, платежи — это всё надо делать или через JS плагины, менять реализацию или вообще отказываться.<\/p>\n Платежи<\/b>. Google Play и AppStore не работают в WebGL. В том смысле что нельзя получить информацию о продукте (описание, цена и т. д.) и сделать покупку в браузере. Поэтому мы сделали просто: вместо запроса списка продуктов, делаем запрос к нашему серверу (сервер определяет что клиент WebGL) и в ответ получаем примерно такую же структуру: цена: описание, количество. Но самое главное — приходит ещё и ссылка для оплаты! Т. е. для пользователя визуально всё осталось также, но при попытке оплаты открывается новая вкладка с сформированной ссылкой на оплату нужного товара. А тут уже можно подключить любой удобный сервис приема платежей и по коллбеку успешной оплаты начислять пользователю определенное количество продукта. Вот такие антисанкции.<\/p>\n Загрузка изображений<\/b>. Тут проще, в браузерах уже есть встроенный механизм загрузки файлов, его и можно использовать. Вот пример как это реализовано<\/a>, а на SO можно прочитать<\/a> как автор до этого дошёл. К слову, этот код рабочий. Немного корявенький, требует рефакторинга, но работает. Картинка приходит в Unity в base64, раскукоживаете её в массив байт и дальше уже что требуется: отправляете на сервер, используйте в игре и т. п.<\/p>\n Уведомления<\/b>. Все ненавидят уведомления в браузере. И у нас их скорее всего не будет. Но раз обещал, напишу что сохранил для себя если вдруг надумаем (или вы надумаете) делать пуши: плагин можно собрать из таких запчастей<\/a>, честно не пробовал ещё, скорее всего буду свой писать :) Это Firebase Cloud Messaging<\/a>, он бесплатный и вообще можно отсылать пуши на все платформы. Для реализации на своем сервере, например для NodeJS, можно погуглить web-push<\/a>. На Хабре есть статьи, вот свежая относительно про PHP и web пуши<\/a>. Есть еще pushjs.org<\/a>, оно вроде как работает во всех браузерах, можно устанавливать кастомный сервис-воркер. Как писать воркеры можно почитать в таком cook-book’e<\/a>. Но опять же, всё что связано с пушами не проверял ещё.<\/p>\n Google и Apple авторизация<\/b>. У нас в приложениях как раз используются такие способы авторизации. И для них есть возможность сделать веб авторизацию, чего не скажешь про Huawei ID, хотя может и китайцы скоро допилят. Так вот, тут тоже всё относительно просто: открываете мануал как сделать веб авторизацию на своем сервере и делаете: Google<\/a> и Apple<\/a>. Про Apple есть еще норм статья на Хабре от ЦИАН<\/a>. Основной момент тут — это редирект после успешной авторизации, туда можно подставить свои параметры, а внутри плагина перехватить их и использовать для авторизации уже в WebGL приложении. Вот нашел грубый пример<\/a> как это может работать. Автор как и предупреждает не совсем верно использует запрос авторизации. Лучше открывать свою страницу с кнопкой(-ми) авторизации и уже после успешного завершения перехватывать редирект со своего сайта.<\/p>\n Где размещаться?<\/b> В комментариях в телеге спросили на каких сервисах публикуем WebGL игры — точно будем пока на своих сайтах, для нас это больше инструмент для платежей. Но в перспективе, рассматриваем ВК и Одноклассники. Может и во вражеском ФБ, кто знает. На реддите нашёл вот небольшой список<\/a> где можно разместиться, старый, но наверняка что-то живое есть, https:\/\/itch.io<\/a> точно.<\/p>\n И бонус, как сделать рабочий вариант копирования в буфер обмена<\/a> во всех (вроде как) браузерах.<\/p>\n Ну и ещё бонус, точнее анонс: мы делаем онлайн мобильную 3D игру, до этого как-то больше по 2D всё было, так что будут интересности по 3D. Подписывайтесь на Telegram канал<\/a>.<\/p>\n",
"date_published": "2022-04-23T17:50:39+03:00",
"date_modified": "2022-04-23T17:50:14+03:00",
"image": "https:\/\/mopsicus.ru\/pictures\/unity-webgl-tips.png",
"_date_published_rfc2822": "Sat, 23 Apr 2022 17:50:39 +0300",
"_rss_guid_is_permalink": "false",
"_rss_guid": "257",
"_e2_data": {
"is_favourite": false,
"links_required": [],
"og_images": [
"https:\/\/mopsicus.ru\/pictures\/unity-webgl-tips.png"
]
}
},
{
"id": "254",
"url": "https:\/\/mopsicus.ru\/all\/emoji-helper-unity\/",
"title": "EmojiHelper для Unity",
"content_html": " Как добавить эмоджи<\/a>, я уже писал как-то. Но проблема до сих пор в том, что некорректно работают модификаторы. Точнее — они не работают. Т. е. если вы захотите использовать какой-то флаг или определенный цвет кожи или ещё что-то, то у вас вместо одного нужного эмоджи будет два, а то и три. Чтобы использовать эмоджи полноценно, написал небольшой хелпер<\/a>.<\/p>\n Как это работает:<\/p>\n Исходники на Github<\/a><\/p>\n Мобильные Unity разработчики меня сейчас должны понять: когда делаешь билд под iOS, то локализацию «из коробки» настроить не получится. Конечно, есть разные ассеты и даже! официальный пакет для локализации<\/a>. С которым уже можно работать, кстати. Но как обычно, самое интересное в деталях...<\/p>\n Если ваша игра поддерживает несколько языков, к примеру: русский, английский, немецкий, испанский, то для каждого языка неплохо бы сделать локализуемое название игры. Кроме того, если игра\/приложение использует камеру или галерею, то нужно показывать диалог запроса прав доступа, тоже локализованный, иначе апрув скорее всего не пройти. Для этого, обычно используется файл InfoPlist.strings<\/b> и содержимое его выглядит как-то так: В общем-то всё это уже можно сделать официальным пакетом локализации, кроме NSUserTrackingUsageDescription<\/i> по-моему. Но так как я всё равно использую пост-билд скрипт для добавления файлов, фреймворков и установки различных параметров через ProjectCapabilityManager, то использовать ещё один пакет не хотелось бы. Тем более, пакет для локализации сам использует приватные методы пространства имен UnityEditor.iOS.Xcode<\/b>. Вот тут-то и нашлось решение. С помощью рефлексии вытянуть нужные методы и сделать расширение для PBXProject.<\/p>\n В итоге, получился всего один файл с расширением, который позволяет:<\/p>\n В старых проектах я использовал UnityiOSLocalization<\/a>, он работал, но его «проблема» в большом количестве файлов, которые когда-то были доступны на Bitbucket’е, потом это всё стало приватным — т. е. это то что сейчас получилось вытянуть через рефлексию.<\/p>\n Скорее всего когда допилят официальный пакет, всё это станет не актуальным, ну а пока можно пользоваться.<\/p>\n",
"date_published": "2021-11-08T17:39:29+03:00",
"date_modified": "2021-11-08T14:46:11+03:00",
"image": "https:\/\/mopsicus.ru\/pictures\/ios-unity-localization.png",
"_date_published_rfc2822": "Mon, 08 Nov 2021 17:39:29 +0300",
"_rss_guid_is_permalink": "false",
"_rss_guid": "251",
"_e2_data": {
"is_favourite": true,
"links_required": [
"system\/library\/highlight\/highlight.js",
"system\/library\/highlight\/highlight.css",
"system\/library\/highlight\/highlight.js",
"system\/library\/highlight\/highlight.css"
],
"og_images": [
"https:\/\/mopsicus.ru\/pictures\/ios-unity-localization.png"
]
}
},
{
"id": "250",
"url": "https:\/\/mopsicus.ru\/all\/razrabotka-unity-plaginov-dlya-ios-i-android\/",
"title": "Разработка Unity плагинов для iOS и Android",
"content_html": " Наконец-то дописал статью про создание плагинов<\/a>. В процессе «дописания» нашёл и пофиксил баг под iOS, так что — не зря :)<\/p>\n",
"date_published": "2021-10-05T11:56:12+03:00",
"date_modified": "2021-10-05T11:56:05+03:00",
"image": "https:\/\/mopsicus.ru\/pictures\/unity-plugins-systems.png",
"_date_published_rfc2822": "Tue, 05 Oct 2021 11:56:12 +0300",
"_rss_guid_is_permalink": "false",
"_rss_guid": "250",
"_e2_data": {
"is_favourite": true,
"links_required": [],
"og_images": [
"https:\/\/mopsicus.ru\/pictures\/unity-plugins-systems.png"
]
}
},
{
"id": "240",
"url": "https:\/\/mopsicus.ru\/all\/modi-unity-lightweight-ioc-container\/",
"title": "MoDI",
"content_html": " MoDI<\/a> — простой контейнер для внедрения зависимостей в Unity.<\/p>\n Когда я хочу в чём-то разобраться, я почти сразу перехожу к практической части. Если со старта не получается, тогда начинаю читать мануалы :) После этого, снова повторяю шаг №1 и так по кругу. Иногда это надоедает и я или ищу другие пути решения, или говорю себе, что это «не моё», мне это не надо — сдаюсь короче.<\/p>\n Решил я однажды разобраться как работать с Zenject<\/a> и Ninject<\/a> в Unity. Сделал несколько тестовых проектов — вроде работает. Начал копать дальше, понял принцип и решил, что хочу своё такое же, но попроще :) И чтобы было достаточно для всех моих разработческих потребностей. Так появился MoDI.<\/p>\n Не буду расписывать принцип инверсии зависимостей, об этом можно прочитать в более достоверных источниках. Скажу только, что более-менее серьёзный проект без этого сложно поддерживать и развивать. Да и вообще, один раз начав использовать сразу понимаешь все плюсы.<\/p>\n Это можно сказать и про ECS, да Leopotam? :)<\/p>\n MoDI можно подключить к проекту с помощью пакетного менеджера, через него же можно импортировать сцену с примерами. Ну или просто скачать архив и добавить в проект.<\/p>\n Простейший пример выглядит так:<\/p>\n После запуска данного скрипта в консоли появится сообщение: «Hi, I’m MoDI!».<\/p>\n В документации можно найти ещё примеры и описание API<\/a>.<\/p>\n Очередной велосипед для себя, но может кого-то заинтересует. Если хотите разработаться в этом как и я, пишите, помогу чем смогу ?<\/p>\n",
"date_published": "2021-04-13T23:10:57+03:00",
"date_modified": "2021-04-14T11:01:47+03:00",
"image": "https:\/\/mopsicus.ru\/pictures\/MoDI.png",
"_date_published_rfc2822": "Tue, 13 Apr 2021 23:10:57 +0300",
"_rss_guid_is_permalink": "false",
"_rss_guid": "240",
"_e2_data": {
"is_favourite": true,
"links_required": [
"system\/library\/highlight\/highlight.js",
"system\/library\/highlight\/highlight.css",
"system\/library\/highlight\/highlight.js",
"system\/library\/highlight\/highlight.css"
],
"og_images": [
"https:\/\/mopsicus.ru\/pictures\/MoDI.png"
]
}
},
{
"id": "234",
"url": "https:\/\/mopsicus.ru\/all\/format-csharp-code-vscode\/",
"title": "Форматирование С# кода в VS Code",
"content_html": " До недавних пор, весь код я форматировал с помощью расширения C# FixFormat<\/a>. Оно старое, не поддерживается, но работает! И вполне себе работает.<\/p>\n Но после недавней переустановки VS Code, я ставил заново расширение для C# (OmniSharp) и погуглил на предмет выше. Как оказалось, OmniSharp уже умеет сам форматировать код, причем использует все необходимые параметры<\/a>.<\/p>\nFinite state machine<\/h3>
Finite state machine<\/h4>
\n<\/div>\nfsm.Trigger(Action.Down);\r\nfsm.Trigger(Action.Down);<\/code><\/pre>\n
\non exit standing
\non enter sitting
\non exit sitting
\non enter lying<\/p>\n<\/blockquote>\nFSM UML diagram<\/h3>
FSM UML diagram<\/h4>
\n<\/div>\n@startuml\r\nskin rose\r\ntitle TestFSM\r\nleft to right direction\r\nagent Standing\r\nagent Sitting\r\nagent Lying\r\nagent Jumping\r\nnote left of Jumping\r\nsome help message here\r\nend note\r\nStart --> Standing\r\nStanding --> Sitting : Down\r\nStanding ~~> Jumping : Space\r\nSitting --> Lying : Down\r\nSitting --> Standing : Up\r\nLying --> Sitting : Up\r\nJumping --> Standing : Down\r\n@enduml<\/code><\/pre>Shardy<\/h3>
Shardy<\/h4>
\n<\/div>\n\n
\nShardy for Unity<\/a>
\nDocs<\/a><\/p>\n",
"date_published": "2024-10-10T22:33:59+03:00",
"date_modified": "2024-10-10T22:33:42+03:00",
"image": "https:\/\/mopsicus.ru\/pictures\/logo.png",
"_date_published_rfc2822": "Thu, 10 Oct 2024 22:33:59 +0300",
"_rss_guid_is_permalink": "false",
"_rss_guid": "267",
"_e2_data": {
"is_favourite": true,
"links_required": [],
"og_images": [
"https:\/\/mopsicus.ru\/pictures\/logo.png"
]
}
},
{
"id": "264",
"url": "https:\/\/mopsicus.ru\/all\/unity-infinite-scroller-v2-0\/",
"title": "Unity infinite scroller v2.0",
"content_html": "UIS (Unity infinite scroller)<\/h3>
UIS (Unity infinite scroller)<\/h4>
\n<\/div>\nUMI aka Unity Mobile Input<\/h3>
UMI aka Unity Mobile Input<\/h4>
\n<\/div>\n\n
\n
Герои Гильдгаарда<\/h3>
Герои Гильдгаарда<\/h4>
\n<\/div>\n
\n
\n<\/div>\n<\/div>\n\n
\n
Unity WebGL tips<\/h3>
Unity WebGL tips<\/h4>
\n<\/div>\n\n
Emojis fallback list<\/h3>
Emojis fallback list<\/h4>
\n<\/div>\n\n
<\/h3>
<\/h4>
\n<\/div>\n\n
\/\/\/ Можно применять сразу к TMP компоненту\r\nMyTMPText.CheckAndParseEmoji(<text with emoji here>);<\/code><\/pre>",
"date_published": "2022-01-31T18:02:15+03:00",
"date_modified": "2022-01-31T18:01:53+03:00",
"image": "https:\/\/mopsicus.ru\/pictures\/emojis-fallback.png",
"_date_published_rfc2822": "Mon, 31 Jan 2022 18:02:15 +0300",
"_rss_guid_is_permalink": "false",
"_rss_guid": "254",
"_e2_data": {
"is_favourite": false,
"links_required": [
"system\/library\/highlight\/highlight.js",
"system\/library\/highlight\/highlight.css",
"system\/library\/highlight\/highlight.js",
"system\/library\/highlight\/highlight.css"
],
"og_images": [
"https:\/\/mopsicus.ru\/pictures\/emojis-fallback.png",
"https:\/\/mopsicus.ru\/pictures\/tmp-emoji-settings.png"
]
}
},
{
"id": "251",
"url": "https:\/\/mopsicus.ru\/all\/unity-ios-localization\/",
"title": "Unity iOS localization",
"content_html": "Unity iOS localization scripts<\/h3>
Unity iOS localization scripts<\/h4>
\n<\/div>\n
\n <\/p>\n"CFBundleDisplayName" = "Локализованное название";\r\n"NSCameraUsageDescription" = "Тут описание зачем приложению доступ к камере";\r\n"NSPhotoLibraryUsageDescription" = "Тут описание зачем доступ к галерее";\r\n"NSPhotoLibraryAddUsageDescription" = "Тут описание зачем доступ к галерее";\r\n"NSUserTrackingUsageDescription" = "Тут описание зачем доступ к IDFA";\r\n <\/code><\/pre>\n
Unity plugins system on JSON<\/h3>
Unity plugins system on JSON<\/h4>
\n<\/div>\nMoDI. Lightweight IoC container for Unity.<\/h3>
MoDI. Lightweight IoC container for Unity.<\/h4>
\n<\/div>\nusing MoDI;\r\nusing UnityEngine;\r\n\r\npublic class QuickStart : MonoBehaviour {\r\n\r\n public void Start() {\r\n DI.Get().Bind<Hello>().WithArguments("Hi, I'm MoDI!");\r\n Hello hello = DI.Get().Resolve<Hello>();\r\n }\r\n \r\n}\r\n\r\npublic class Hello {\r\n\r\n public Hello(string data) {\r\n Debug.Log(data);\r\n }\r\n\r\n}<\/code><\/pre>