{ "version": "https:\/\/jsonfeed.org\/version\/1", "title": "#mopsicus: заметки с тегом unity", "_rss_description": "об играх, разработке на Unity и личном опыте", "_rss_language": "ru", "_itunes_email": "", "_itunes_categories_xml": "", "_itunes_image": "", "_itunes_explicit": "", "home_page_url": "https:\/\/mopsicus.ru\/tags\/unity\/", "feed_url": "https:\/\/mopsicus.ru\/tags\/unity\/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

\n

Finite state machine<\/h3>

Finite state machine<\/h4>\"Finite\n<\/div>\n

Для перехода на стейт надо активировать триггер(ы):<\/p>\n

fsm.Trigger(Action.Down);\r\nfsm.Trigger(Action.Down);<\/code><\/pre>

В таком случае получится такой результат:<\/p>\n

\n

initial is standing
\non exit standing
\non enter sitting
\non exit sitting
\non enter lying<\/p>\n<\/blockquote>\n

Ещё подсмотрел, как сгенерить описание для UML диаграммы и отрендерить её на сайте<\/a> или на этом<\/a>, по-моему у них один движок:<\/p>\n

\n

FSM UML diagram<\/h3>

FSM UML diagram<\/h4>\"FSM\n<\/div>\n

Чтобы сделать диаграмму более «интуитивной», вместо слова state используется ключевое слово agent, этом случае можно рисовать разные линии.<\/p>\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>

Ещё к каждому переходу можно добавлять условия, (на картинке выше их нет) об этом подробнее в документации<\/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": "

\n

Shardy<\/h3>

Shardy<\/h4>\"Shardy\"\n<\/div>\n

Друзья, был у меня давно один проект, который претерпел уже наверное 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