<?xml version="1.0" encoding="utf-8" ?>
<rss xmlns:atom="http://www.w3.org/2005/Atom" version="2.0">
  <channel>
    <atom:link href="https://mopsicus.ru/blog/rss.xml" rel="self" type="application/rss+xml"/>
    <title>Блог Mopsicus – про разработку, игры и личный опыт</title>
    <description>Блог Mopsicus – про разработку, игры и личный опыт: заметки, проекты, Shardy, Unity, C#, Node.js, opensource</description>
    <language>ru</language>
    <link>https://mopsicus.ru</link>
    <generator>Trafaret v1.2.0</generator>
    <managingEditor>mail@mopsicus.ru (Igor Lopatin)</managingEditor>
    <webMaster>mail@mopsicus.ru (Igor Lopatin)</webMaster>
    <category>blog</category>
    <item>
  <title>Исправление LevelPlay в Unity</title>
  <description>&lt;p&gt;Нередко бывает так: устанавливаешь плагин в работающее приложение, делаешь всё по мануалу, а в результате приложение перестаёт собираться под iOS или Android &lt;span class="emoji"&gt;🥲&lt;/span&gt; Такое чаще случается когда плагин тянет за собой зависимости под платформу. EDM4U конечно исправляет некоторые конфликты версий, но не все.&lt;/p&gt;&lt;p&gt;Вот такая же история получилась когда начал интегрировать LevelPlay в наши Unity игры. В редакторе всё красиво — ошибок нет, но когда делаешь сборку, то она не проходит. В консоли Unity написано из-за чего сломалась сборка (если Android). При сборке под iOS, проект может экспортироваться без ошибок, но в самом Xcode уже не собраться.&lt;/p&gt;&lt;div class="alert-info"&gt; &lt;p&gt;&lt;b&gt;Капитанский совет:&lt;/b&gt; если ошибка не очевидна — сначала! погуглите, потом закидывайте в какой-нибудь ChatGPT или Claude. Сэкономите себе время.&lt;/p&gt; &lt;/div&gt;&lt;h2&gt;Проблема&lt;/h2&gt;&lt;p&gt;Так вот, последняя на текущий момент версия 9.3 LevelPlay для Unity (пакет Ads Mediation) не собирается если включить рекламную сеть Яндекса. Под Android ему не нравится версия аналитики AppMetrica, а под iOS показывает ошибку с &lt;code&gt;AppMetricaLibraryAdapter&lt;/code&gt;, выглядит это примерно так при установке &lt;code&gt;Pods&lt;/code&gt;:&lt;/p&gt;&lt;pre&gt;&lt;code&gt;[!] CocoaPods could not find compatible versions for pod &amp;quot;AppMetricaLibraryAdapter&amp;quot;:
  In Podfile:
    AppMetricaLibraryAdapter (= 6.1.0)

    IronSourceYandexAdapter (= 5.7.0.0) was resolved to 5.7.0.0, which depends on
      YandexMobileAds (= 7.18.4) was resolved to 7.18.4, which depends on
        AppMetricaLibraryAdapter (~&amp;gt; 5.14.0)
&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;Соответственно, при сборке в Xcode будет примерно такая ошибка:&lt;/p&gt;&lt;pre&gt;&lt;code&gt;AppMetricaLibraryAdapter.AppMetricaLibraryAdapter.shared.unsafeMutableAddressor: AppMetricaLibraryAdapter.AppMetricaLibraryAdapter
&lt;/code&gt;&lt;/pre&gt;&lt;h2&gt;Решение&lt;/h2&gt;&lt;p&gt;Решается это откатом на предыдущие версии &lt;span class="emoji"&gt;🤷‍♂️&lt;/span&gt; и патчем &lt;code&gt;Podfile&lt;/code&gt;. В пакете AppMetrica, в папке &lt;em&gt;Editor&lt;/em&gt; находим файл &lt;code&gt;AppMetricaDependencies.xml&lt;/code&gt; и устанавливаем предыдущие версии:&lt;/p&gt;&lt;pre&gt;&lt;code&gt;&amp;lt;?xml version=&amp;quot;1.0&amp;quot;?&amp;gt;
&amp;lt;dependencies&amp;gt;
    &amp;lt;androidPackages&amp;gt;
        &amp;lt;androidPackage spec=&amp;quot;io.appmetrica.analytics:analytics:7.13.0&amp;quot;/&amp;gt;
        &amp;lt;androidPackage spec=&amp;quot;androidx.annotation:annotation:1.7.1&amp;quot;/&amp;gt;
    &amp;lt;/androidPackages&amp;gt;
    &amp;lt;iosPods&amp;gt;
        &amp;lt;iosPod name=&amp;quot;AppMetricaAnalytics&amp;quot; version=&amp;quot;5.14.0&amp;quot;/&amp;gt;
        &amp;lt;iosPod name=&amp;quot;AppMetricaLibraryAdapter&amp;quot; version=&amp;quot;5.14.0&amp;quot;/&amp;gt;
    &amp;lt;/iosPods&amp;gt;
&amp;lt;/dependencies&amp;gt;
&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;Android сборка теперь работает. Для iOS надо ещё пропатчить &lt;code&gt;Podfile&lt;/code&gt; и добавить в исключения &lt;code&gt;AppMetricaLibraryAdapter&lt;/code&gt;. У меня это делается post-build скриптом, но можно и руками. Добавляем в файл цикл с проверкой:&lt;/p&gt;&lt;pre&gt;&lt;code&gt;post_install do |installer|
  problematic_targets = ['AppMetricaLibraryAdapter']
  installer.pods_project.targets.each do |target|
    target.build_configurations.each do |config|
      if problematic_targets.include?(target.name)
        config.build_settings['BUILD_LIBRARY_FOR_DISTRIBUTION'] = 'NO'
      end
    end
  end
end
&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;Теперь и iOS сборка будет работать. Может это кому-то сэкономит время, как мне.&lt;/p&gt;&lt;p&gt;Самое интересное, что решение этой задачки я нашёл &lt;a href="https://mopsicus.ruhttps://github.com/cleveradssolutions/CAS-Unity/issues/19"&gt;на гитхабе в багтрекере&lt;/a&gt; совсем другого проекта &lt;span class="emoji"&gt;😁&lt;/span&gt; Но как оказалось, эта проблема есть и там.&lt;/p&gt;&lt;p&gt;Ещё возможно придётся понизить версию &lt;code&gt;IronSourceYandexAdapter&lt;/code&gt; до &lt;code&gt;5.6.0.0&lt;/code&gt; в файле &lt;code&gt;ISYandexAdapterDependencies.xml&lt;/code&gt;, для корректной загрузки рекламы из сети Яндекса. Но позже, после апдейта, надо будет снова проверить на корректность загрузки рекламы. Это актуально если в логе вы увидите что-то подобное:&lt;/p&gt;&lt;pre&gt;&lt;code&gt;IronSource AdQuality: ISAdQualitySDK: --------------  Yandex connector 7.0.32 --------------
IronSource AdQuality: ISAdQualitySDK: Yandex SDK version: 7.18.4
IronSource AdQuality: ISAdQualitySDK: SDK Versions supported: 6.2.0 - 7.18.0
IronSource AdQuality: ISAdQualitySDK: Status: ERROR
IronSource AdQuality: ISAdQualitySDK: Message: Yandex SDK version 7.18.4 is not yet supported by the connector
IronSource AdQuality: ISAdQualityConnectorManager: Details: Yandex SDK version 7.18.4 is not yet supported by the connector
[LevelPlay SDK] API: Yandex SDK version 7.18.4 is not yet supported by the connector
&lt;/code&gt;&lt;/pre&gt;&lt;div class="alert-info"&gt; &lt;p&gt;&lt;b&gt;И ещё новость:&lt;/b&gt; Unity &lt;a href="https://mopsicus.ruhttps://app2top.ru/news/unity-prodast-supersonic-i-zakroet-ironsource-ads-network-239063.html"&gt;закроет ironSource Ads Network&lt;/a&gt;, которую не так давно купила и вроде как она является (пока) частью платформы для медиации LevelPlay. Жаль, там неплохой eCPM был…&lt;/p&gt; &lt;/div&gt;</description>
  <guid>https://mopsicus.ru/blog/unity-levelplay-ios-fix.html</guid>
  <link>https://mopsicus.ru/blog/unity-levelplay-ios-fix.html</link>
  <pubDate>Fri, 27 Mar 2026 13:00:00 +0300</pubDate>
  <comments>https://mopsicus.ru/blog/unity-levelplay-ios-fix.html#comments</comments>
  <author>mail@mopsicus.ru (Igor Lopatin)</author>
  <category>ios</category>
  <category>unity</category>
  <category>ios</category>
  <category>android</category>
  <category>plugin</category>
</item>
<item>
  <title>Отчёт Sensor Tower 2026</title>
  <description>&lt;p&gt;Кто-то постарался и перевёл док от Sensor Tower с аналитикой за 2025 год и трендами на текущий год. Много букв 🥲 Для себя подметил несколько интересных моментов:&lt;/p&gt;&lt;ul&gt; &lt;li&gt;установки с мобильных сторов падают, -5-7%&lt;/li&gt; &lt;li&gt;в стиме растут, +6%&lt;/li&gt; &lt;li&gt;выручка с мобильных сторов +1-3%&lt;/li&gt; &lt;li&gt;в стиме +13%!&lt;/li&gt; &lt;li&gt;LiveOps решает — деньги идут из эвентов, обновлений, меты&lt;/li&gt; &lt;li&gt;Roblox разрывает всех и везде&lt;/li&gt; &lt;li&gt;неигровые приложения стали зарабатывать больше игр (вайбкодеры привет)&lt;/li&gt; &lt;/ul&gt;&lt;div class="tagline"&gt; &lt;p&gt;Мобильный рынок замедляется по загрузкам, но растёт по выручке, конкуренция за внимание усиливается, liveops рулит&lt;/p&gt; &lt;/div&gt;&lt;p&gt;Штош, есть о чём подумать и на чём сфокусироваться в ближайшее время… Как минимум это:&lt;/p&gt;&lt;ul&gt; &lt;li&gt;нельзя «делать игру и забыть»&lt;/li&gt; &lt;li&gt;нужно строить долгосрочную экономику внутри игры&lt;/li&gt; &lt;li&gt;нужно бороться за внимание&lt;/li&gt; &lt;li&gt;делать кросс-платформенные проекты&lt;/li&gt; &lt;/ul&gt;&lt;img class="emerge float-center" src="https://mopsicus.ru/images/assets/sensor-tower-roblox.53bf8f6a.jpg" alt="Roblox рулит"&gt;&lt;p&gt;Это по поводу того куда двигаются успешные проекты: платформы с пользовательским контентом + социальный опыт + внутриигровая экономика.&lt;/p&gt;&lt;ul&gt; &lt;li&gt;&lt;a href="https://mopsicus.ruhttps://telegra.ph/Sensor-Tower-Igrovaya-industriya-v-2026-godu-03-19"&gt;Перевод&lt;/a&gt;&lt;/li&gt; &lt;li&gt;&lt;a href="https://mopsicus.ruhttps://sensortower.com/report/state-of-gaming-2026"&gt;Источник&lt;/a&gt;&lt;/li&gt; &lt;/ul&gt;</description>
  <guid>https://mopsicus.ru/blog/sensor-tower-2026.html</guid>
  <link>https://mopsicus.ru/blog/sensor-tower-2026.html</link>
  <pubDate>Thu, 19 Mar 2026 19:31:00 +0300</pubDate>
  <comments>https://mopsicus.ru/blog/sensor-tower-2026.html#comments</comments>
  <author>mail@mopsicus.ru (Igor Lopatin)</author>
  <category>games</category>
  <category>thoughts</category>
  <category>analytics</category>
  <category>marketing</category>
</item>
<item>
  <title>Улучшаем рендер TMP шрифтов</title>
  <description>&lt;p&gt;Пока я присматриваюсь к &lt;a href="https://mopsicus.ruunitext-font-engine.html"&gt;UniText&lt;/a&gt;, как к полноценной замене TMP, в процессе работы над новым проектом появилась неприятная особенность последнего: тексты с использованием моих шрифтов выглядели «не очень», при уменьшении масштаба канваса — появляется полупрозрачный прямоугольник — что-то с альфой. Причем такой неприятный эффект появляется именно при уменьшении масштаба, а не самого размера шрифта.&lt;/p&gt;&lt;p&gt;Сначала я думал что дело в самом ассете шрифта: размере атласа, настройках текстуры, сжатии, и т.п. В общем, с наскока исправить не получилось &lt;span class="emoji"&gt;😅&lt;/span&gt; Пересоздавал шрифт с разными параметрами, размерами и прочим — результат оставался прежним.&lt;/p&gt;&lt;p&gt;Выглядело это примерно так:&lt;/p&gt;&lt;img class="emerge float-center" src="https://mopsicus.ru/images/assets/tmp-artifacts-1.e3ea03d5.jpg" alt="Артефакты и полупрозрачный прямоугольник"&gt;&lt;p&gt;Изыскания вместе с ChatGTP тоже не особо помогли, но сократили поле поиска проблемы. Попутно узнал несколько полезных моментов которые тоже стоит учитывать при создании своих шрифтов:&lt;/p&gt;&lt;ul&gt; &lt;li&gt;следить за &lt;code&gt;Padding&lt;/code&gt;, не должен быть слишком маленький (4-8 норм)&lt;/li&gt; &lt;li&gt;использовать &lt;code&gt;SDFAA&lt;/code&gt; для мягких краёв&lt;/li&gt; &lt;li&gt;не делать &lt;code&gt;Softness&lt;/code&gt; слишком большим&lt;/li&gt; &lt;li&gt;проверить &lt;code&gt;Filter Mode&lt;/code&gt;, по умолчанию билинейный, но можно попробовать &lt;code&gt;Point&lt;/code&gt;&lt;/li&gt; &lt;li&gt;проверять размер атласа, про это я писал в посте про &lt;a href="https://mopsicus.ru../notes/unity-make-tmp-fonts.html"&gt;создание шрифтов&lt;/a&gt;&lt;/li&gt; &lt;/ul&gt;&lt;p&gt;В конце подошёл к своему самому «нелюбимому» – шейдерам &lt;span class="emoji"&gt;😒&lt;/span&gt; Попробовал менять на разные версии, и мобильную и обратно, проверил на устройстве и редакторе — но результат был прежним. Пришлось использовать технологии прошлого — гуглить &lt;span class="emoji"&gt;😁&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;a href="https://mopsicus.ruhttps://discussions.unity.com/t/fix-textmesh-pro-ui-outline-shader-artifacts/244324/6"&gt;&lt;strong&gt;И таки ответ был найден!&lt;/strong&gt;&lt;/a&gt;&lt;/p&gt;&lt;p&gt;В шейдере TMP из-за уменьшения масштаба канваса &lt;code&gt;alphaClip&lt;/code&gt; уходит в отрицательные значения — появляется полупрозрачный прямоугольник.&lt;/p&gt;&lt;h2&gt;Как исправить&lt;/h2&gt;&lt;p&gt;В файле &lt;code&gt;TMP_SDF.shader&lt;/code&gt; нужно ограничить &lt;code&gt;alphaClip&lt;/code&gt; чтобы он не убегал в минус. Это примерно 200 строка. Вот что нужно сделать:&lt;/p&gt;&lt;pre&gt;&lt;code&gt;// alphaClip = alphaClip / 2.0 - ( .5 / scale) - weight;

alphaClip = max(alphaClip / 2.0 - ( .5 / scale) - weight, 0.001);
&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;Таким образом ограничиваем нижний порог альфы. Не знаю пока, костыль это прям или не очень, но на мобилках работает хорошо &lt;span class="emoji"&gt;😅&lt;/span&gt; Ниже скриншот до/после:&lt;/p&gt;&lt;img class="emerge float-center" src="https://mopsicus.ru/images/assets/tmp-artifacts-2.f655b858.jpg" alt="Артефакты и исправленный шейдер"&gt;&lt;p&gt;По идее можно сделать более адаптивное решение, чтобы это применялось только если &lt;code&gt;( .5 / scale)&lt;/code&gt; становится слишком большим, это как бы напрашивается, но я в шейдерах тот ещё эксперт…&lt;/p&gt;&lt;p&gt;В общем, проблема решена, можно двигаться дальше. И ждать когда UniText доведут до ума, добавят поле ввода, найдут основные детские болячки.&lt;/p&gt;</description>
  <guid>https://mopsicus.ru/blog/tmp-quality-shader-fix.html</guid>
  <link>https://mopsicus.ru/blog/tmp-quality-shader-fix.html</link>
  <pubDate>Tue, 17 Mar 2026 21:17:00 +0300</pubDate>
  <comments>https://mopsicus.ru/blog/tmp-quality-shader-fix.html#comments</comments>
  <author>mail@mopsicus.ru (Igor Lopatin)</author>
  <category>tmp</category>
  <category>shader</category>
  <category>unity</category>
  <category>ui</category>
  <category>fonts</category>
  <category>unitext</category>
</item>
<item>
  <title>Починил RSS</title>
  <description>&lt;p&gt;Починил все RSS ленты на сайте. Оказалось, что там были неправильные пути для всех картинок &lt;span class="emoji"&gt;🥲&lt;/span&gt; Теперь можно смело подписываться, кто пользуется RSS читалками. Ссылка в подвале, справа.&lt;/p&gt;</description>
  <guid>https://mopsicus.ru/blog/website-rss-fix.html</guid>
  <link>https://mopsicus.ru/blog/website-rss-fix.html</link>
  <pubDate>Mon, 02 Mar 2026 12:35:00 +0300</pubDate>
  <comments>https://mopsicus.ru/blog/website-rss-fix.html#comments</comments>
  <author>mail@mopsicus.ru (Igor Lopatin)</author>
  <category>website</category>
  <category>blog</category>
  <category>rss</category>
</item>
<item>
  <title>Восстановление аккаунта разработчика Google</title>
  <description>&lt;p&gt;Удалось восстановить и подтвердить свой древний аккаунт разработчика в Google Play. Несколько дней переписки и апелляций, составление «правильных» писем в саппорт с помощью ChatGPT и — аккаунт разлочен и подтверждён &lt;span class="emoji"&gt;😅&lt;/span&gt;&lt;/p&gt;&lt;p&gt;В итоге задолбал их и дошёл под ручного подтверждения, потому что бот настойчиво отказывался принимать доки. Главное не сдаваться &lt;span class="emoji"&gt;😬&lt;/span&gt;&lt;/p&gt;&lt;p&gt;Если есть вопросы, что и куда писал — задавайте в комментах, на &lt;a href="https://mopsicus.rumailto:mail@mopsicus.ru"&gt;почту&lt;/a&gt; или в &lt;a href="https://mopsicus.ruhttps://t.me/mopsicus"&gt;телегу&lt;/a&gt;, может что полезное подскажу.&lt;/p&gt;</description>
  <guid>https://mopsicus.ru/blog/restore-google-account.html</guid>
  <link>https://mopsicus.ru/blog/restore-google-account.html</link>
  <pubDate>Fri, 27 Feb 2026 14:10:00 +0300</pubDate>
  <comments>https://mopsicus.ru/blog/restore-google-account.html#comments</comments>
  <author>mail@mopsicus.ru (Igor Lopatin)</author>
  <category>google</category>
  <category>chatgpt</category>
  <category>advice</category>
</item>
<item>
  <title>Лучшие практики Sprite Atlas в Unity</title>
  <description>&lt;iframe width="560" height="315" src="https://www.youtube.com/embed/hXlpnwD-TgY?si=qUEep0Dx2wGG-kDE" title="YouTube video player" frameborder="0" allow="accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share" referrerpolicy="strict-origin-when-cross-origin" allowfullscreen&gt;&lt;/iframe&gt;</description>
  <guid>https://mopsicus.ru/blog/unity-sprite-atlas-best-practices.html</guid>
  <link>https://mopsicus.ru/blog/unity-sprite-atlas-best-practices.html</link>
  <pubDate>Wed, 25 Feb 2026 13:00:00 +0300</pubDate>
  <comments>https://mopsicus.ru/blog/unity-sprite-atlas-best-practices.html#comments</comments>
  <author>mail@mopsicus.ru (Igor Lopatin)</author>
  <category>unity</category>
  <category>ui</category>
  <category>2d</category>
  <category>optimization</category>
  <category>video</category>
</item>
<item>
  <title>UniText — рендеринг текста для Unity</title>
  <description>&lt;p&gt;Вчера увидел в Unity паблике про свежий текстовый движок для Unity, корректно отображающий все системы письма. В основе тот же движок формирования текста который используется в Chrome, Firefox, Adobe InDesign и Android.&lt;/p&gt;&lt;p&gt;Пишут что быстрее, легче, сильнее чем TMP &lt;span class="emoji"&gt;😅&lt;/span&gt; Но самое главное что я для себя отметил: полная &lt;strong&gt;поддержка эмоджи с использованием системных шрифтов&lt;/strong&gt;! То есть, не нужно тащить в билд атласы с эмоджи. Да и вообще, сами атласы шрифтов для UniText вроде как тоже легче.&lt;/p&gt;&lt;p&gt;&lt;a href="https://mopsicus.ruhttps://github.com/LightSideMeowshop/unitext"&gt;UniText&lt;/a&gt; — полная поддержка Unicode 17.0, системные emoji, 150+ языков, zero-allocation архитектура, шейпинг HarfBuzz.&lt;/p&gt;&lt;div class="fotorama"&gt; &lt;img class="emerge float-center" src="https://mopsicus.ru/images/assets/unitext-1.87df8676.jpg" alt="UniText платформы"&gt; &lt;img class="emerge float-center" src="https://mopsicus.ru/images/assets/unitext-2.8d06a451.jpg" alt="UniText возможности"&gt; &lt;img class="emerge float-center" src="https://mopsicus.ru/images/assets/unitext-3.51cc80bc.jpg" alt="UniText бенчмарк"&gt; &lt;img class="emerge float-center" src="https://mopsicus.ru/images/assets/unitext-4.da46466a.jpg" alt="UniText сравнение"&gt; &lt;/div&gt;&lt;p&gt;Есть &lt;a href="https://mopsicus.ruhttps://unity.lightside.media/unitext/docs/"&gt;отличная дока&lt;/a&gt;, открытый код, в общем — выглядит всё очень интересно, пока.&lt;/p&gt;&lt;h3&gt;Потенциальные трудности миграции с TMP&lt;/h3&gt;&lt;ul&gt; &lt;li&gt;много сторонних ассетов основано на TMP&lt;/li&gt; &lt;li&gt;какие-то редакторские скрипты надо переписывать&lt;/li&gt; &lt;li&gt;атласы шрифтов переделывать, эффекты, материалы&lt;/li&gt; &lt;li&gt;UI рефакторить&lt;/li&gt; &lt;/ul&gt;&lt;p&gt;Если UI не сложный, наверное проще переехать. Было бы неплохо если сделают какой-нибудь конвертер TMP → UniText, для более легкой миграции.&lt;/p&gt;&lt;p&gt;Ещё на первый взгляд стало больше конфиг файлов всяких, но думаю это плата за модульную архитектуру, или дело привычки 🤷&lt;/p&gt;&lt;p&gt;Сделал быстрый тест — сбилдил для андроид — работает жеж &lt;span class="emoji"&gt;🔥&lt;/span&gt; Буду ковырять дальше, возможно есть подводные камни.&lt;/p&gt;</description>
  <guid>https://mopsicus.ru/blog/unitext-font-engine.html</guid>
  <link>https://mopsicus.ru/blog/unitext-font-engine.html</link>
  <pubDate>Thu, 19 Feb 2026 11:45:00 +0300</pubDate>
  <comments>https://mopsicus.ru/blog/unitext-font-engine.html#comments</comments>
  <author>mail@mopsicus.ru (Igor Lopatin)</author>
  <category>csharp</category>
  <category>github</category>
  <category>unity</category>
  <category>package</category>
  <category>tmp</category>
  <category>emoji</category>
  <category>fonts</category>
  <category>unitext</category>
</item>
<item>
  <title>Znak — 2D движок для игр</title>
  <description>&lt;p&gt;Кто интересуется Unity и ECS наверняка слышали про товарища Leopotam и его разработки. С ним мы периодически общаемся ещё со времён самого первого ECS &lt;span class="emoji"&gt;😅&lt;/span&gt; Так вот, он разрабатывает не только новые версии своей ECS, но и свой 2D движок &lt;a href="https://mopsicus.ruhttps://leopotam.ru/53/"&gt;Znak&lt;/a&gt;.&lt;/p&gt;&lt;p&gt;Это простой 2D движок, сначала был написан на Golang, потом портирован на Nimlang, компилируется за секунды в какие-то килобайты, которые даже считать смешно. Есть уже игра в разработке — &lt;a href="https://mopsicus.ruhttps://vk.com/club233195130"&gt;Танчики&lt;/a&gt;.&lt;/p&gt;&lt;ul&gt; &lt;li&gt;Рендер на OpenGL 3.3/WebGL2/GLFW 3.4&lt;/li&gt; &lt;li&gt;Бандлы&lt;/li&gt; &lt;li&gt;SDF-шрифты&lt;/li&gt; &lt;li&gt;Пользовательский ввод&lt;/li&gt; &lt;li&gt;Шейдеры, материалы, текстуры, атласы&lt;/li&gt; &lt;li&gt;HTTP, WebSockets&lt;/li&gt; &lt;li&gt;Камеры&lt;/li&gt; &lt;li&gt;Звуки&lt;/li&gt; &lt;li&gt;Покадровая анимация и т.д.&lt;/li&gt; &lt;/ul&gt;&lt;p&gt;В общем, всё что может понадобиться для разработки игры. &lt;a href="https://mopsicus.ruhttps://gitverse.ru/nimlang/znak"&gt;Исходники открыты&lt;/a&gt;, велкоме, как говорится.&lt;/p&gt;</description>
  <guid>https://mopsicus.ru/blog/znak-2d-game-engine-leopotam.html</guid>
  <link>https://mopsicus.ru/blog/znak-2d-game-engine-leopotam.html</link>
  <pubDate>Fri, 06 Feb 2026 10:45:00 +0300</pubDate>
  <comments>https://mopsicus.ru/blog/znak-2d-game-engine-leopotam.html#comments</comments>
  <author>mail@mopsicus.ru (Igor Lopatin)</author>
  <category>nimlang</category>
  <category>gitverse</category>
  <category>games</category>
  <category>engine</category>
</item>
<item>
  <title>Использование C# 14 в Unity</title>
  <description>&lt;p&gt;It’s Possible To Use C# 14 In Unity! — так называется свежий видос на одном ютуб канале. Несмотря на то что Unity официально не поддерживает C# 14 «из коробки», есть способы включить новые фичи 14 версии. Ссылки для патчинга прилагаются в описании. Так-так-так…&lt;/p&gt;&lt;p&gt;В самом видео говорится, что многое из списка скорее всего не будет работать, но это уже совсем другая история &lt;span class="emoji"&gt;😶‍🌫️&lt;/span&gt;&lt;/p&gt;&lt;div class="media-wrap"&gt; &lt;iframe width="560" height="315" src="https://www.youtube.com/embed/9BO4gkp90Do?si=bwJnt1_nilC4plEQ" title="YouTube video player" frameborder="0" allow="accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share" referrerpolicy="strict-origin-when-cross-origin" allowfullscreen&gt;&lt;/iframe&gt; &lt;/div&gt;&lt;p&gt;В новых версиях в основном «сахар», но тем не менее, это может делать код более чистым, добавляет новые паттерны и кое-где производительность.&lt;/p&gt;&lt;p&gt;Extension Members — можно расширять типы не только методами, но и свойствами, индексаторами и операторами.&lt;/p&gt;&lt;pre&gt;&lt;code&gt;public static class EnumerableExtensions {
    extension&amp;lt;T&amp;gt;(IEnumerable&amp;lt;T&amp;gt; source) {
        public bool IsEmpty =&amp;gt; !source.Any();
        public T this[int index] =&amp;gt; source.Skip(index).First();
    }
}
&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;Null-conditional присваивание (?.=) — позволяет записывать значения только если объект не null, без if-проверок.&lt;/p&gt;&lt;pre&gt;&lt;code&gt;player?.Health = 100;
player?.Score += 10;
&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;Использование &lt;code&gt;nameof&lt;/code&gt; с необобщёнными типами.&lt;/p&gt;&lt;pre&gt;&lt;code&gt;Debug.Log(nameof(List&amp;lt;&amp;gt;)); // &amp;quot;List&amp;quot;
&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;Использование &lt;code&gt;Span&lt;/code&gt; и &lt;code&gt;ReadOnlySpan&lt;/code&gt;.&lt;/p&gt;&lt;pre&gt;&lt;code&gt;Span&amp;lt;byte&amp;gt; data = someArray;
&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;Лямбды с модификаторами — можно использовать модификаторы вроде &lt;code&gt;ref&lt;/code&gt;, out прямо в лямбдах без указания типа.&lt;/p&gt;&lt;pre&gt;&lt;code&gt;TryParse&amp;lt;int&amp;gt; parse = (text, out result) =&amp;gt; int.TryParse(text, out result);
&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;Ну и &lt;code&gt;field&lt;/code&gt; в свойствах, наверно самое полезное, как по мне — можно обращаться к скрытому полю свойства прямо внутри тела аксессоров&lt;/p&gt;&lt;pre&gt;&lt;code&gt;// раньше
public int Health { get; set; }

private int _health;

public int Health {
    get =&amp;gt; _health;
    set =&amp;gt; _health = Mathf.Clamp(value, 0, 100);
}

//по новому
public int Health {
    get;
    set =&amp;gt; field = Mathf.Clamp(value, 0, 100);
}
&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;Но помните, Unity официально не поддерживает самые свежие версии C#, так что — на свой страх и риск &lt;span class="emoji"&gt;😅&lt;/span&gt;&lt;/p&gt;</description>
  <guid>https://mopsicus.ru/blog/unity-csharp-14.html</guid>
  <link>https://mopsicus.ru/blog/unity-csharp-14.html</link>
  <pubDate>Fri, 30 Jan 2026 15:38:00 +0300</pubDate>
  <comments>https://mopsicus.ru/blog/unity-csharp-14.html#comments</comments>
  <author>mail@mopsicus.ru (Igor Lopatin)</author>
  <category>csharp</category>
  <category>github</category>
  <category>unity</category>
  <category>video</category>
</item>
<item>
  <title>Год ИИ</title>
  <description>&lt;p&gt;Год активного использования нейросетей, агентов, ИИ, etc!&lt;br&gt;Будут различные прототипы того, что долго откладывал в стол &lt;span class="emoji"&gt;😅&lt;/span&gt;&lt;/p&gt;</description>
  <guid>https://mopsicus.ru/blog/year-ai-2026.html</guid>
  <link>https://mopsicus.ru/blog/year-ai-2026.html</link>
  <pubDate>Sat, 24 Jan 2026 19:28:00 +0300</pubDate>
  <comments>https://mopsicus.ru/blog/year-ai-2026.html#comments</comments>
  <author>mail@mopsicus.ru (Igor Lopatin)</author>
  <category>ai</category>
  <category>vibecoding</category>
  <category>copilot</category>
  <category>thoughts</category>
</item>
<item>
  <title>Как получить размеры TMP</title>
  <description>&lt;p&gt;Во всех наших играх есть список друзей и чаты между ними. Уже много лет для его реализации я использую UIS, свой же скрипт для бесконечных списков. И когда надо посчитать высоту элемента чата (облачко, speech balloon), это делалось с помощью старой функции подсчета слов, переносов строк и т.п. И в общем-то, работает это до сих пор нормально.&lt;/p&gt;&lt;p&gt;Но сейчас при создании новой игры, я нашёл более правильное решение этой задачи. Оказывается &lt;span class="emoji"&gt;😅&lt;/span&gt; у TMP есть специальный метод который позволяет получить размеры компонента до! установки туда текста:&lt;/p&gt;&lt;pre&gt;&lt;code&gt;var size = _message.GetPreferredValues(text);
&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;И размеры будут с учётом якорей, отступов и прочего. А если нужно получить, например, размеры с фиксированной шириной и изменяемой высотой, то можно задать это дополнительными параметрами:&lt;/p&gt;&lt;pre&gt;&lt;code&gt;var size = _message.GetPreferredValues(text, MAX_ITEM_WIDTH, Mathf.Infinity);
&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;Так что в новой игре чатики будут красивее &lt;span class="emoji"&gt;😁&lt;/span&gt;&lt;/p&gt;&lt;div class="alert"&gt; &lt;p&gt;&lt;span id="uis-stars"&gt;&lt;/span&gt; &lt;i class="fa-regular fa-star"&gt;&lt;/i&gt; Все &lt;a href="https://mopsicus.ruhttps://github.com/mopsicus/uis"&gt;исходники UIS&lt;/a&gt; доступны на Github&lt;/p&gt; &lt;/div&gt;</description>
  <guid>https://mopsicus.ru/blog/unity-tmp-sizes.html</guid>
  <link>https://mopsicus.ru/blog/unity-tmp-sizes.html</link>
  <pubDate>Fri, 23 Jan 2026 15:40:00 +0300</pubDate>
  <comments>https://mopsicus.ru/blog/unity-tmp-sizes.html#comments</comments>
  <author>mail@mopsicus.ru (Igor Lopatin)</author>
  <category>unity</category>
  <category>tmp</category>
  <category>csharp</category>
  <category>ui</category>
</item>
<item>
  <title>MCP для Unity</title>
  <description>&lt;p&gt;Наткнулся тут на &lt;a href="https://mopsicus.ruhttps://github.com/CoplayDev/unity-mcp"&gt;MCP for Unity&lt;/a&gt;. Это «мост» между редактором Unity и внешними AI-ассистентами/IDE через MCP (Model Context Protocol). В общем, позволяет выполнять действия напрямую в Unity через команды на естественном языке, так же как мы вайбкодим в чатике 😁&lt;/p&gt;&lt;h2&gt;Зачем&lt;/h2&gt;&lt;ul&gt; &lt;li&gt;автоматизация монотонных задач, например: создать объекты, настроить сцены, добавить компоненты&lt;/li&gt; &lt;li&gt;собственные команды/инструменты, можно расширять собственными инструментами и дать их в распоряжение нейронки&lt;/li&gt; &lt;li&gt;интеграция с MCP клиентами, не только с Claude, но и другими, которые поддерживают MCP&lt;/li&gt; &lt;/ul&gt;&lt;h2&gt;Что может&lt;/h2&gt;&lt;p&gt;Поставил. Подключил к своему Copilot. Интересная штука оказалась. В дополнение к Claude теперь можно какие-то вещи делегировать туда и оно будет работать в редакторе:&lt;/p&gt;&lt;ul&gt; &lt;li&gt;операции с ассетами и префабами&lt;/li&gt; &lt;li&gt;управлять сценами&lt;/li&gt; &lt;li&gt;управлять компонентами на геймобджектах&lt;/li&gt; &lt;li&gt;работа с скриптами понятное дело&lt;/li&gt; &lt;li&gt;операции с материалами, шейдерами и эффектами&lt;/li&gt; &lt;li&gt;лазить по пунктам меню&lt;/li&gt; &lt;li&gt;запускать тесты&lt;/li&gt; &lt;li&gt;&lt;a href="https://mopsicus.ruhttps://github.com/CoplayDev/unity-mcp/blob/main/README.md#key-features-"&gt;и многое другое&lt;/a&gt;&lt;/li&gt; &lt;/ul&gt;&lt;img class="emerge float-center" src="https://mopsicus.ru/images/assets/mcp-for-unity-flow.66cf51ae.gif" alt="MCP для Unity"&gt;&lt;p&gt;Немного потестировал в своих обычных кейсах, например: скопируй префаб Х из папки Y, удали в нём компонент Z и добавь компонент J, переименуй. В общем, то что обычно руками делал. Ну работает конечно, но не быстро 😅 Ещё написано что можно &lt;a href="https://mopsicus.ruhttps://github.com/CoplayDev/unity-mcp/blob/main/docs/CUSTOM_TOOLS.md"&gt;делать свои расширения&lt;/a&gt;, вот это уже интересно. И есть возможность выполнять несколько команд в одном вызове, это должно ускорить процесс…&lt;/p&gt;&lt;p&gt;Пока продолжаю наблюдение, так сказать. Попробую использовать в каких-то более практичесих задачах, может будет какая-то польза.&lt;/p&gt;</description>
  <guid>https://mopsicus.ru/blog/unity-mcp.html</guid>
  <link>https://mopsicus.ru/blog/unity-mcp.html</link>
  <pubDate>Mon, 19 Jan 2026 11:34:00 +0300</pubDate>
  <comments>https://mopsicus.ru/blog/unity-mcp.html#comments</comments>
  <author>mail@mopsicus.ru (Igor Lopatin)</author>
  <category>unity</category>
  <category>github</category>
  <category>links</category>
  <category>ai</category>
  <category>vibecoding</category>
  <category>plugin</category>
  <category>copilot</category>
</item>
<item>
  <title>Маркетинг в эпоху нейросетей</title>
  <description>&lt;p&gt;Вчера прочитал пост, что сейчас делать MVP по большому счёту уже не нужно и даже «вредно». С приходом нейросетей больше нет проблемы быстро что-то сделать: несложный сервис, приложение или клон можно наколдовать за короткое время.&lt;/p&gt;&lt;p&gt;Основная проблема теперь — найти, кому и как это продать. Об этом стоит думать ещё до разработки и именно туда вкладывать основное время и деньги. Впрочем, так уже давно происходит — просто сейчас это стало ещё актуальнее.&lt;/p&gt;&lt;p&gt;В контексте игр это работает точно так же. Сделать несложную игру стало ещё проще, игр выпускается очень много, если не заниматься маркетингом — про неё просто никто не узнает. Вот читаю канал Кирилла Орешкина и примерно видно как работает этот процесс: есть трейлер, есть страница в Стим, нагоняется трафик, проверяются различные метрики, вишлисты и прочее. В этот момент игры ещё вообще может не быть 😁 Так и живём…&lt;/p&gt;&lt;p&gt;Выводы:&lt;/p&gt;&lt;ol&gt; &lt;li&gt;не тратить месяцы/годы на игру (продукт) в которую никто не будет играть&lt;/li&gt; &lt;li&gt;изучить основы маркетинга, лидогенерации, закупки трафика, работы с инфлюнсерами и т.п.&lt;/li&gt; &lt;li&gt;быть в курсе (лучше активно пробовать) нейросетей — это то, что уже меняет бизнесовые и бытовые процессы&lt;/li&gt; &lt;/ol&gt;</description>
  <guid>https://mopsicus.ru/blog/mvp-marketing-game-ai.html</guid>
  <link>https://mopsicus.ru/blog/mvp-marketing-game-ai.html</link>
  <pubDate>Tue, 13 Jan 2026 10:15:00 +0300</pubDate>
  <comments>https://mopsicus.ru/blog/mvp-marketing-game-ai.html#comments</comments>
  <author>mail@mopsicus.ru (Igor Lopatin)</author>
  <category>marketing</category>
  <category>ai</category>
  <category>vibecoding</category>
  <category>thoughts</category>
  <category>games</category>
</item>
<item>
  <title>2025 итоги</title>
  <description>&lt;p&gt;Никогда особо не писал итогов года, как-то не было такой «традиции» у меня, но недавно почитал итоги разных авторов и решил, что не поздно её и мне ввести. И вот почему…&lt;/p&gt;&lt;p&gt;Составляя такие «итоги» каждый год, сразу видно (или не видно) прогресс по каким-то своим задачам/планам, что сделано, а что нет, зафиксировать рост, ошибки, выводы. К такому списку можно потом возвращаться и &lt;s&gt;плакать&lt;/s&gt; рефлексировать &lt;span class="emoji"&gt;😅&lt;/span&gt; В общем, психологическая функция тоже имеется, например, легализовать неудачи.&lt;/p&gt;&lt;h2&gt;Работа&lt;/h2&gt;&lt;p&gt;В этом году мы не релизнули новую игру &lt;span class="emoji"&gt;😥&lt;/span&gt; Грусть и печаль, но так получилось. Надеюсь на скорый запуск после новогодних выходных. Но, проделали большую работу по исправленю ошибок, борьбу с ботами и различными блокировками, переезды серверов и т.п.&lt;/p&gt;&lt;p&gt;Закончил обновление нашего инхаус фреймворка на 6 версию Unity, даже на 6.3 LTS. Пока полёт нормальный, уже делаем параллельно на нём ещё одну игру. В нём много нового для нас:&lt;/p&gt;&lt;ul&gt; &lt;li&gt;6.3 LTS&lt;/li&gt; &lt;li&gt;Addressables&lt;/li&gt; &lt;li&gt;UniTask&lt;/li&gt; &lt;li&gt;Обновлённые плагины&lt;/li&gt; &lt;li&gt;Улучшеный UI пакет&lt;/li&gt; &lt;li&gt;Простой DI и многое другое&lt;/li&gt; &lt;/ul&gt;&lt;p&gt;Для Android перешли на дефолтный Image Picker и новый Credential Manager для авторизации. Вообще в этом плане у Apple намного лучше конечно, плагины сделанные несколько лет назад прекрасно работают с новыми версиями iOS, а для Android периодически приходится поднимать версию API и выпускать патчи. Ещё Unity Ads «заставляют» переходить на LevelPlay с медиацией &lt;span class="emoji"&gt;😤&lt;/span&gt;&lt;/p&gt;&lt;p&gt;Старые игры почти все в строю, держатся в топах по своим ключевикам. Продолжаем радовать игроков (надеюсь) &lt;span class="emoji"&gt;😁&lt;/span&gt;&lt;/p&gt;&lt;h2&gt;Pet-проекты&lt;/h2&gt;&lt;p&gt;Хотелось больше времени уделять своим «хотелкам», пока ещё есть желание что-то кодить, выкладывать в open source — буду продолжать делать свои &lt;span class="emoji"&gt;🚲&lt;/span&gt;&lt;/p&gt;&lt;ol&gt; &lt;li&gt;Полностью &lt;a href="https://mopsicus.ru./website-update-2025.html"&gt;обновил этот сайт&lt;/a&gt; и блог. Теперь никакого «движка» нет, все файлы статичные и генерируются при публикации из markdown файлов.&lt;/li&gt; &lt;li&gt;Работу пункта №1 делает &lt;a href="https://mopsicus.ru../projects/trafaret.html"&gt;Trafaret&lt;/a&gt; — мой простой генератор статических сайтов, пока не выложил на Github&lt;/li&gt; &lt;li&gt;VPNKit — телеграм бот, backend + админка для организации VPN сервиса, думаю сделать из этого какую-то коммерческую историю, но не в РФ, по понятным причинам&lt;/li&gt; &lt;li&gt;&lt;a href="https://mopsicus.ru../projects/umi.html"&gt;UMI&lt;/a&gt; и &lt;a href="https://mopsicus.ru../projects/uis.html"&gt;UIS&lt;/a&gt; — готовлю небольшие апдейты, переход на новый Input System и исправления нескольких старых багов&lt;/li&gt; &lt;li&gt;&lt;a href="https://mopsicus.ru../projects/shardy.html"&gt;Shardy&lt;/a&gt; — мой фреймворк для онлайн игр, пока на паузе, думаю куда его повернуть и когда выделить на него время&lt;/li&gt; &lt;/ol&gt;&lt;h2&gt;ИИ&lt;/h2&gt;&lt;p&gt;Без этого уже никак &lt;span class="emoji"&gt;👾&lt;/span&gt; И если не быть хотя бы немного в теме, тем более такой быстроразвивающейся как ИИ, то можно легко оказаться ненужным динозавром. Поэтому пробуем, тестируем, экспериментируем.&lt;/p&gt;&lt;p&gt;В работе использую Copilot + Claude 4.5 и Opus, буду пробовать новый Codex, посмотрим что лучше справляется с текущими задачами. Из последнего навайбкоженого:&lt;/p&gt;&lt;ul&gt; &lt;li&gt;&lt;a href="https://mopsicus.ru./downloader-tv-ai.html"&gt;Downloader TV+&lt;/a&gt; — утилита для Android TV, позволяет скачивать файлы и копировать содержимое в буфер обмена&lt;/li&gt; &lt;li&gt;&lt;a href="https://mopsicus.ru./russian-loto-chatgpt.html"&gt;Генератор карточек Лото&lt;/a&gt; — генератор игровых карточек для Русского Лото, сохраняет в PDF, можно распечатать и играть&lt;/li&gt; &lt;li&gt;&lt;a href="https://mopsicus.ru./gamedev-ai.html"&gt;Пример игры Ping-pong&lt;/a&gt; — пример игры на Unity для поста про геймдев + ИИ&lt;/li&gt; &lt;li&gt;Instaloader — скачивалка видео и рилсов из Instagram&lt;/li&gt; &lt;li&gt;VPNKit — телеграм бот, backend + админка (написана с помощью Claude на React) для организации VPN сервиса&lt;/li&gt; &lt;/ul&gt;&lt;p&gt;Ещё освоил создание коротких «нейромультиков»: &lt;a href="https://mopsicus.ruhttps://labs.google/fx/tools/whisk/"&gt;Whisk&lt;/a&gt; для раскадровки, &lt;a href="https://mopsicus.ruhttps://grok.com/imagine"&gt;Grok Imagine&lt;/a&gt; для создания видео, монтировал пока вручную в CapCut. Пару примеров ниже делал для новогодних поздравлений. С мультяшным стилем пока справляется получше чем с фотореалистичным, хотя скорее всего это особенности Grok (или мои руки), наверняка есть специальные сетки натренированные для таких вещей.&lt;/p&gt;&lt;p&gt;Ролик №1&lt;/p&gt;&lt;div class="media-wrap"&gt; &lt;iframe width="560" height="315" src="https://www.youtube.com/embed/Tnsi2picxTc?si=eEvK_7eM6gHP-jS5" title="YouTube video player" frameborder="0" allow="accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share" referrerpolicy="strict-origin-when-cross-origin" allowfullscreen&gt;&lt;/iframe&gt; &lt;/div&gt;&lt;p&gt;Ролик №2&lt;/p&gt;&lt;div class="media-wrap"&gt; &lt;iframe width="560" height="315" src="https://www.youtube.com/embed/Tt_r41TNxss?si=rDF3fkNNJ7RjlHRR" title="YouTube video player" frameborder="0" allow="accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share" referrerpolicy="strict-origin-when-cross-origin" allowfullscreen&gt;&lt;/iframe&gt; &lt;/div&gt;&lt;h2&gt;ДГТУ&lt;/h2&gt;&lt;p&gt;Осенью этого года меня позвали поделиться знаниями со студентами 3 курса ДГТУ. Ребята учатся разработке игр, а я им рассказал про Unity + придумал практические задания для закрепления материала. Получился вводный курс из 8 лекций (и кучи практик) охватывающий основные темы для начала разработки своего шедевра &lt;span class="emoji"&gt;😬&lt;/span&gt;&lt;/p&gt;&lt;ul&gt; &lt;li&gt;Архитектура Unity. Сравнение с другими движками (Editor, Scenes, GameObjects, Components)&lt;/li&gt; &lt;li&gt;C# в Unity. Жизненный цикл объектов (классы, наследование, почему Update «дорогой»)&lt;/li&gt; &lt;li&gt;Архитектура и паттерны (&lt;a href="https://mopsicus.ru../notes/unity-project-structure.html"&gt;cтруктура проекта&lt;/a&gt;, принципы, SOLID, Singleton, &lt;a href="https://mopsicus.ru../notes/unity-eventbus.html"&gt;EventBus&lt;/a&gt;, ECS, &lt;a href="https://mopsicus.ru../notes/fsm-csharp.html"&gt;FSM&lt;/a&gt;, упаковка своего кода в Unity Package)&lt;/li&gt; &lt;li&gt;UI и компоненты (Canvas, scaler, UI элементы, резиновый интерфейс, фреймворки для анимации UI)&lt;/li&gt; &lt;li&gt;Input, камеры, звуки (проекции: перспективная, оргографическая, менеджер звуков)&lt;/li&gt; &lt;li&gt;Тестирование, дебаг, оптимизация (инструменты, методологии, &lt;a href="https://mopsicus.ru../notes/unity-game-optimization.html"&gt;узкие места производительности&lt;/a&gt;)&lt;/li&gt; &lt;li&gt;Сетевые решения, интеграция SDK (&lt;a href="https://mopsicus.ru../notes/multiplayer-articles-list.html"&gt;клиент-серверная архитектура&lt;/a&gt;, &lt;a href="https://mopsicus.ru../projects/shardy.html"&gt;фреймворки&lt;/a&gt;, примеры сетевых игр, подключение рекламы)&lt;/li&gt; &lt;li&gt;Сборка под разные платформы (&lt;a href="https://mopsicus.ru../notes/indie-platforms-list.html"&gt;список площадок&lt;/a&gt; для игр)&lt;/li&gt; &lt;/ul&gt;&lt;p&gt;Студенты сейчас активно (очень) используют ИИ &lt;span class="emoji"&gt;😅&lt;/span&gt; Не только как справочник, но и как основной инструмент разработки. Получается кстати довольно неплохо. Многие уже делают коммерческие проекты, участвуют в джемах, хакатонах, ну и ещё где заставят &lt;span class="emoji"&gt;😂&lt;/span&gt;&lt;/p&gt;&lt;p&gt;Вообще я рад что подвязался на эту историю, получил интересный опыт, думаю что и ребятам рассказал что-то полезное. Если будет время то причешу этот вводный курс и выложу на сайте. Будет +1 бесплатный курс по основам Unity.&lt;/p&gt;&lt;img class="emerge float-center" src="https://mopsicus.ru/images/assets/dstu-gamedev.c207f47f.jpg" alt="Разработка игр. ДГТУ"&gt;&lt;h2&gt;Эльбрус&lt;/h2&gt;&lt;p&gt;В июне поднялся на самую высокую (5642 м) точку Европы — Эльбрус. Это наверное самое знаковое событие года. Неделя подготовки и акклиматизации, 70 км по горам, ночной штурм, и мы на вершине!&lt;/p&gt;&lt;div class="fotorama"&gt; &lt;img class="emerge float-center" src="https://mopsicus.ru/images/assets/elbrus-mopsicus.4ec0ae09.jpg" alt="Mopsicus на Эльбрусе"&gt; &lt;img class="emerge float-center" src="https://mopsicus.ru/images/assets/elbrus-1.0d2d53f0.jpg" alt="Эльбрус"&gt; &lt;img class="emerge float-center" src="https://mopsicus.ru/images/assets/elbrus-2.24d749de.jpg" alt="Эльбрус"&gt; &lt;img class="emerge float-center" src="https://mopsicus.ru/images/assets/elbrus-3.b87db5fb.jpg" alt="Эльбрус"&gt; &lt;/div&gt;&lt;p&gt;Это было сложно. До конца дошли не все &lt;span class="emoji"&gt;🥶&lt;/span&gt; Точнее так: из группы в 20+ человек допустили до восхождения 15, а к вершине дошли 13. Необычное ощущение наверху: вроде радость от восхождения, красивый вид, ветренно, -26 °C, удовлетворение от достижения цели, но особо насладиться этим не успеваешь, потому что надо же ещё спуститься назад &lt;span class="emoji"&gt;😥&lt;/span&gt; Это даже сложнее чем подъём, потому что сил уже почти нет.&lt;/p&gt;&lt;p&gt;Но всё закончилось хорошо, все живы и целы, из нашей группы только девушка сорвалась при восхождении и пролетела по склону метров 150 вниз. Потом собралась и дошла до вершины. Отделалась синяками.&lt;/p&gt;&lt;p&gt;В остальном же, всё позитивно, это воспоминания на всю жизнь, рекомендую. Следующий маршрут в списке — «Тридцатка» &lt;span class="emoji"&gt;⛰️&lt;/span&gt;&lt;/p&gt;&lt;h2&gt;Спорт&lt;/h2&gt;&lt;p&gt;Уже третий год участвую в мероприятии &lt;a href="https://mopsicus.ruhttps://xn--80acghh.xn--p1ai"&gt;Забег.рф&lt;/a&gt;. Осталась одна дистанция до полного комплекта &lt;span class="emoji"&gt;🥇&lt;/span&gt;&lt;/p&gt;&lt;ul&gt; &lt;li&gt;2026 — 1 км (?)&lt;/li&gt; &lt;li&gt;2025 — 10 км (1 час)&lt;/li&gt; &lt;li&gt;2024 — 5 км (27 мин)&lt;/li&gt; &lt;li&gt;2023 — 21 км (2 часа)&lt;/li&gt; &lt;/ul&gt;&lt;p&gt;Начинал, как видно, сразу с полумарафона. Готовился несколько месяцев по программе Nike Running. Было сложновато, но цели достиг — уложился в 2 часа тогда. Есть ещё мысли пробежать полный марафон к 40 годам, но это пока мысли &lt;span class="emoji"&gt;😅&lt;/span&gt;&lt;/p&gt;&lt;img class="emerge float-center" src="https://mopsicus.ru/images/assets/half-marathon.3f2bd971.jpg" alt="Полумарафон Забег.рф"&gt;&lt;p&gt;Ещё обзавёлся такой интересной штукой как баланс борд (доска с валиком &lt;span class="emoji"&gt;😁&lt;/span&gt;). Развивает координацию, чувство равновесия, контроль движений, реакцию тела. Есть разные варианты упражнений, от простого «стояния» до поперечного, в приседе и т.д.&lt;/p&gt;&lt;h2&gt;Северная Осетия&lt;/h2&gt;&lt;p&gt;Побывал в Северной Осетии. Очень красивые места и природа. Конечно запомнилось Кармадонское ущелье — место гибели съёмочной группы Сергея Бодрова. Селевой поток с ледника был такой мощи, что прошёлся по ущелью несколько километров, разрушил всё что было на пути, заполнил камнями и грязью все тоннели &lt;span class="emoji"&gt;😨&lt;/span&gt;&lt;/p&gt;&lt;div class="fotorama"&gt; &lt;img class="emerge float-center" src="https://mopsicus.ru/images/assets/osetia-1.0711613f.jpg" alt="Кармадонское ущелье. Северная Осетия"&gt; &lt;img class="emerge float-center" src="https://mopsicus.ru/images/assets/osetia-2.d75c9c7c.jpg" alt="Кармадонское ущелье. Северная Осетия"&gt; &lt;img class="emerge float-center" src="https://mopsicus.ru/images/assets/osetia-3.f9a7aec6.jpg" alt="Северная Осетия"&gt; &lt;img class="emerge float-center" src="https://mopsicus.ru/images/assets/osetia-4.f08be772.jpg" alt="Северная Осетия"&gt; &lt;img class="emerge float-center" src="https://mopsicus.ru/images/assets/osetia-5.54497e7a.jpg" alt="Северная Осетия"&gt; &lt;img class="emerge float-center" src="https://mopsicus.ru/images/assets/osetia-6.87da2cd6.jpg" alt="Даргавс. Город мёртвых. Северная Осетия"&gt; &lt;/div&gt;&lt;p&gt;Очень понравился Владикавказ! Первый раз там был. Он запомнился своей чистотой, невысокой застройкой и конечно «самой красивой улицей в Instagram» — проспект Мира.&lt;/p&gt;&lt;img class="emerge float-center" src="https://mopsicus.ru/images/assets/vladikavkaz.5f627962.jpg" alt="Владикавказ. Проспект Мира"&gt;&lt;h2&gt;Тбилиси&lt;/h2&gt;&lt;p&gt;Первый раз в Грузии и Тбилиси, но наверное вернусь ещё. Город красивый, зелёный, много исторических улочек и много туристов! Вся еда очень вкусная и запоминается своими порциями &lt;span class="emoji"&gt;😋&lt;/span&gt; Алазанская долина — место обязательное для посещения, как и дегустация различных вин.&lt;/p&gt;&lt;div class="fotorama"&gt; &lt;img class="emerge float-center" src="https://mopsicus.ru/images/assets/tbilisi-1.d41b3551.jpg" alt="Тбилиси"&gt; &lt;img class="emerge float-center" src="https://mopsicus.ru/images/assets/tbilisi-2.9e838333.jpg" alt="Тбилиси"&gt; &lt;img class="emerge float-center" src="https://mopsicus.ru/images/assets/tbilisi-3.7ff587d7.jpg" alt="Тбилиси"&gt; &lt;img class="emerge float-center" src="https://mopsicus.ru/images/assets/tbilisi-4.c3770253.jpg" alt="Тбилиси"&gt; &lt;img class="emerge float-center" src="https://mopsicus.ru/images/assets/tbilisi-5.9d889d0b.jpg" alt="Тбилиси"&gt; &lt;img class="emerge float-center" src="https://mopsicus.ru/images/assets/tbilisi-6.3fee08e7.jpg" alt="Алазанская долина"&gt; &lt;/div&gt;&lt;h2&gt;Места&lt;/h2&gt;&lt;ul&gt; &lt;li&gt;Краснодар ×2&lt;/li&gt; &lt;li&gt;Адыгея&lt;/li&gt; &lt;li&gt;Таганрог ×2&lt;/li&gt; &lt;li&gt;Шахты ×2&lt;/li&gt; &lt;li&gt;Воронеж&lt;/li&gt; &lt;li&gt;Геленджик&lt;/li&gt; &lt;li&gt;Минеральные воды ×4&lt;/li&gt; &lt;li&gt;Эльбрус&lt;/li&gt; &lt;li&gt;Тбилиси&lt;/li&gt; &lt;li&gt;Азов&lt;/li&gt; &lt;li&gt;Аланья&lt;/li&gt; &lt;li&gt;Верхний Фиагдон&lt;/li&gt; &lt;li&gt;Владикавказ&lt;/li&gt; &lt;/ul&gt;&lt;h2&gt;Что ещё&lt;/h2&gt;&lt;p&gt;Ещё можно записать такие события которые не получили отдельного параграфа, но всё равно достойны упоминания &lt;span class="emoji"&gt;📝&lt;/span&gt;&lt;/p&gt;&lt;ul&gt; &lt;li&gt;Прокатился на одном из самых высоких и длинных зиплайнов в Европе: высота 410 м, длина 1960 м&lt;/li&gt; &lt;li&gt;Выиграл конкурс костюмов на Хэллоуин&lt;/li&gt; &lt;li&gt;Поставил брекеты&lt;/li&gt; &lt;li&gt;Был на выездном футбольном матче&lt;/li&gt; &lt;li&gt;Стал чаще писать в блог и телеграм канал&lt;/li&gt; &lt;/ul&gt;&lt;h2&gt;Что не получилось&lt;/h2&gt;&lt;ul&gt; &lt;li&gt;Не переписал статью про разработку плагинов&lt;/li&gt; &lt;li&gt;Не научился играть на гитаре&lt;/li&gt; &lt;li&gt;Не выпустил новую игру&lt;/li&gt; &lt;li&gt;Не сделал демо сайт для &lt;a href="https://mopsicus.ru../projects/trafaret.html"&gt;Trafaret&lt;/a&gt;&lt;/li&gt; &lt;li&gt;Не прочитал книги которые хотел&lt;/li&gt; &lt;li&gt;Не купил мотоцикл&lt;/li&gt; &lt;/ul&gt;&lt;p&gt;Вот такой год. Надеюсь что в новом году будет больше позитивных поводов для составления похожего списка. С новым годом &lt;span class="emoji"&gt;🎄&lt;/span&gt;&lt;/p&gt;</description>
  <guid>https://mopsicus.ru/blog/summary-2025.html</guid>
  <link>https://mopsicus.ru/blog/summary-2025.html</link>
  <pubDate>Wed, 31 Dec 2025 18:15:00 +0300</pubDate>
  <comments>https://mopsicus.ru/blog/summary-2025.html#comments</comments>
  <author>mail@mopsicus.ru (Igor Lopatin)</author>
  <category>list</category>
  <category>thoughts</category>
  <category>blog</category>
  <category>summary</category>
  <category>video</category>
  <category>ai</category>
  <category>vibecoding</category>
  <category>project</category>
</item>
<item>
  <title>Мудрость геймдизайнера</title>
  <description>&lt;p&gt;Геймдизайнеры подобны фокусникам: повсюду у них дым и зеркала. Но как только игрок это замечает, магия исчезает. &lt;cite&gt;Грустный геймдизайнер&lt;/cite&gt;&lt;/p&gt;</description>
  <guid>https://mopsicus.ru/blog/gamedesign-wisdom.html</guid>
  <link>https://mopsicus.ru/blog/gamedesign-wisdom.html</link>
  <pubDate>Tue, 30 Dec 2025 09:40:00 +0300</pubDate>
  <comments>https://mopsicus.ru/blog/gamedesign-wisdom.html#comments</comments>
  <author>mail@mopsicus.ru (Igor Lopatin)</author>
  <category>games</category>
  <category>gamedesign</category>
  <category>wisdom</category>
</item>
<item>
  <title>Unite 2025 recap</title>
  <description>&lt;p&gt;В Барселоне 19 ноября прошла конференция Unite 2025, на которой было несколько интересных анонсов и историй успеха, а также объявили о крутых функциях которые должны появиться в Unity в новых версиях. Собрал небольшой список того, что мне показалось интересным.&lt;/p&gt;&lt;p&gt;&lt;code&gt;Добавлено:&lt;/code&gt; &lt;a href="https://mopsicus.ruhttps://t.me/everydayUnity/2587?comment=1341"&gt;увидел в комментах&lt;/a&gt; видео роадмапа Unity 6.x и текстом список интересностей&lt;/p&gt;&lt;h2&gt;CoreCLR&lt;/h2&gt;&lt;p&gt;CoreCLR — это высокопроизводительная, современная виртуальная машина .NET (runtime), если Unity внедрит CoreCLR полностью, это даст большой буст производительности, времени запуска, качества JIT-компиляции, GC и совместимости со свежими .NET API.&lt;/p&gt;&lt;ul&gt; &lt;li&gt;основной runtime .NET Core/.NET 5+&lt;/li&gt; &lt;li&gt;JIT-компилятор RyuJIT&lt;/li&gt; &lt;li&gt;современный garbage collector (Server/Workstation GC)&lt;/li&gt; &lt;li&gt;поддерживает новейшие языковые фичи C#&lt;/li&gt; &lt;li&gt;имеет более быструю сборку мусора&lt;/li&gt; &lt;li&gt;хорошо работает на многопоточности&lt;/li&gt; &lt;li&gt;поддерживает Span, ref struct, SIMD, hardware intrinsics&lt;/li&gt; &lt;/ul&gt;&lt;h3&gt;Что это даст&lt;/h3&gt;&lt;ol&gt; &lt;li&gt;Прирост производительности C#-кода — RyuJIT, лучше оптимизации (inlining, tiered compilation), SIMD, hardware intrinsics, а это: операции на массивах быстрее на ×1.2—4, математика и трансформации — +25–200%, интенсивные вычисления — ×2–10&lt;/li&gt; &lt;li&gt;Новый GC, меньше лагов и фризов — многопоточный, имеет режим server GC, меньше пауз на 30–70%, лучше работает на многопроцессорных устройствах&lt;/li&gt; &lt;li&gt;Свежий .NET API — System.Text.Json, System.IO.Pipelines, System.Net.Http, Span&lt;T&gt;, ArrayPool&lt;T&gt;, обновлённые коллекции (FrozenDictionary, ValueTask, IAsyncEnumerable)&lt;/T&gt;&lt;/T&gt;&lt;/li&gt; &lt;li&gt;Лучше поддержка платформ — в том числе Apple Silicon, улучшится AOT для мобильных, работа на ARM&lt;/li&gt; &lt;li&gt;Быстрый запуск приложений — ReadyToRun, tiered JIT, profile-guided optimization&lt;/li&gt; &lt;li&gt;Меньший размер билдов, особенно на мобильных платформах&lt;/li&gt; &lt;/ol&gt;&lt;h2&gt;Партнерство с Epic Games&lt;/h2&gt;&lt;p&gt;Разработчики смогут публиковать игры на Unity прямо в Fortnite. Не совсем пока понятно как это будет выглядеть, видимо будет API для совместимости и билд в какой-то специальный формат. В любом случае, это откроет дорогу к большой аудитории Fortnite. Тут явно прослеживается конкуренция с Roblox.&lt;/p&gt;&lt;p&gt;Unity в свою очередь предоставит собственную кросс-платформенную систему монетизации для игр на UE. Это их плагин для in-app purchases, который судя по последним новостям будет поддерживать и web-магазины.&lt;/p&gt;&lt;h2&gt;Platform Toolkit&lt;/h2&gt;&lt;p&gt;Как я понял эта штука нужна для упрощения публикации игр на разных платформам. То есть, вместо ручной адаптации под каждую платформу типа Steam, Xbox, PlayStation, Nintendo Switch, мобильные, веб и т.д., будет один универсальный workflow. Как пример показывали работу с ачивками, сохранениями, ещё вроде будет работа с аккаунтами и интеграция различных SDK, типа Stripe и web-магазинов.&lt;/p&gt;&lt;h2&gt;Новые инструменты&lt;/h2&gt;&lt;p&gt;Ну по мне так это больше маркетинговые штуки, но всё равно интересно что из этого выживет:&lt;/p&gt;&lt;ul&gt; &lt;li&gt;Unity Studio (open beta) — браузерный редактор без кода (без комментариев &lt;span class="emoji"&gt;😅&lt;/span&gt;)&lt;/li&gt; &lt;li&gt;Unity Core Standards — новая система верифицированных пакетов для third-party инструментов, в целом тут про повышение безопасности и контроля&lt;/li&gt; &lt;li&gt;Unity 6 Production Verification — теперь всё тестируется с реальными партнёрами, как пример Unity сделали Survival Kids с Konami для теста (включая поддержку Nintendo Switch 2)&lt;/li&gt; &lt;li&gt;Unity AI Gateway — безопасная интеграция сторонних AI-агентов, логичный шаг разрешить использовать какой-нибудь Copilot в Unity который проанализирует контекст (иерархию, ассеты, сцены) и предложит/применит изменения&lt;/li&gt; &lt;li&gt;Unity Vector AI — AI-платформа интегрированная в Unity Ads, будут чекать данные из многих источников (реклама, покупки, аналитика) и на их основе подсовывать «нужную» рекламу «нужным» игрокам повышая показатели инсталлов и покупок&lt;/li&gt; &lt;/ul&gt;&lt;h2&gt;Успехи Unity в 2025 году&lt;/h2&gt;&lt;ul&gt; &lt;li&gt;70% топовых мобильных игр сделаны на Unity&lt;/li&gt; &lt;li&gt;1/3 хитов на Steam в этом году — Unity-игры (Mega Bonk, Schedule One, Ball Pit, Tainted Grail, Blue Prince, Hollow Knight: Silksong и другие мобильные хиты)&lt;/li&gt; &lt;li&gt;Половина всех веб-игр — на Unity&lt;/li&gt; &lt;/ul&gt;&lt;p&gt;В общем, замах неплохой, посмотрим какой будет удар &lt;span class="emoji"&gt;😬&lt;/span&gt; Unity 6.3 LTS должна выйти в декабре 2025, а там обещают серьёзные улучшения 2D/3D рендеринга, оптимизацию 2D-физики и готовые шаблоны для мультиплеера. Как говорится: не ждём, а готовимся…&lt;/p&gt;&lt;div class="media-wrap"&gt; &lt;iframe width="560" height="315" src="https://www.youtube.com/embed/MXsKt7JqX5M?si=WBkWTq8UQ4VUqz7a" title="YouTube video player" frameborder="0" allow="accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share" referrerpolicy="strict-origin-when-cross-origin" allowfullscreen&gt;&lt;/iframe&gt; &lt;/div&gt;&lt;p&gt;&lt;a href="https://mopsicus.ruhttps://www.youtube.com/watch?v=MXsKt7JqX5M&amp;amp;list=PLX2vGYjWbI0TBAgte6nJfL9expGYuPqUO&amp;amp;index=1"&gt;Весь плейлист Unite 2025 на Youtube&lt;/a&gt;&lt;/p&gt;&lt;h2&gt;Roadmap, ключевые изменения&lt;/h2&gt;&lt;h3&gt;6.3&lt;/h3&gt;&lt;ul&gt; &lt;li&gt;Настраиваемая основная панель инструментов&lt;/li&gt; &lt;li&gt;Улучшенная производительность поиска&lt;/li&gt; &lt;li&gt;Низкоуровневая 2D-физика (Box2D v3) с невероятным примером-песочницей PhysicsExamples2D&lt;/li&gt; &lt;li&gt;Рендер 3D как 2D (для спрайтов, не для UGUI)&lt;/li&gt; &lt;li&gt;Настройки сборки шейдеров: можно переопределять типы ключевых слов без изменения кода (например — заставить варианты тумана использовать динамическое ветвление или полностью вырезать) и отдельно для каждого билд-профиля, чтобы уменьшить время сборки!&lt;/li&gt; &lt;li&gt;Shader Graph: кастомное освещение и примеры для ландшафтов&lt;/li&gt; &lt;li&gt;URP и HDRP теперь используют Render Graph как единый бекенд&lt;/li&gt; &lt;li&gt;Renderer Shader User Value (RSUV)&lt;/li&gt; &lt;li&gt;Детерминизм в Burst&lt;/li&gt; &lt;li&gt;Улучшения MeshLOD&lt;/li&gt; &lt;li&gt;Пакер лайтмапов xAtlas&lt;/li&gt; &lt;li&gt;Низкоуровневый унифицированный API для рейтрейсинга&lt;/li&gt; &lt;li&gt;Улучшенная производительность графического API, в основном DX12&lt;/li&gt; &lt;li&gt;Улучшенная документация Addressables&lt;/li&gt; &lt;li&gt;Примеры Multiplayer FPS и Third-person&lt;/li&gt; &lt;/ul&gt;&lt;h3&gt;6.4&lt;/h3&gt;&lt;ul&gt; &lt;li&gt;Взаимозаменяемые физические движки и улучшения Unity Physics&lt;/li&gt; &lt;li&gt;Entities из коробки&lt;/li&gt; &lt;li&gt;Project Auditor из коробки&lt;/li&gt; &lt;li&gt;Новое окно Editor Stats&lt;/li&gt; &lt;li&gt;Graph Toolkit из коробки, больше возможностей и кастомизации&lt;/li&gt; &lt;li&gt;MeshLOD debug и слайдеры в инспекторе, похожие на LODGroup&lt;/li&gt; &lt;li&gt;Удаление Compatibility Mode (будет поддерживаться только Render Graph)&lt;/li&gt; &lt;/ul&gt;&lt;h3&gt;6.5&lt;/h3&gt;&lt;ul&gt; &lt;li&gt;Небольшие AssetBundles&lt;/li&gt; &lt;/ul&gt;&lt;h3&gt;6.6&lt;/h3&gt;&lt;ul&gt; &lt;li&gt;Унифицированный Entity Runtime (GameObjects и Entities на одном бекенде)&lt;/li&gt; &lt;li&gt;Новая иерархия (с иконками объектов)&lt;/li&gt; &lt;li&gt;GPU-culling теней для мелких объектов&lt;/li&gt; &lt;/ul&gt;&lt;h3&gt;6.7&lt;/h3&gt;&lt;ul&gt; &lt;li&gt;Превью CoreCLR для билдов&lt;/li&gt; &lt;li&gt;Унифицированный Netcode&lt;/li&gt; &lt;li&gt;Полностью динамическое GI (Surface Cache, основанное на Surfels из Frostbite + другие техники; намного быстрее и стабильнее Lumen, работает даже на топовых мобильных)&lt;/li&gt; &lt;li&gt;SSR в URP&lt;/li&gt; &lt;li&gt;MeshLOD: контроль степени упрощения, больше генераторов LOD&lt;/li&gt; &lt;li&gt;Унифицированный поиск в редакторе&lt;/li&gt; &lt;li&gt;Улучшения и оптимизации UGUI&lt;/li&gt; &lt;li&gt;IL2CPP: уменьшение размера сборки для мобильных и улучшение производительности для Web&lt;/li&gt; &lt;li&gt;Улучшенные Addressables и взаимозаменяемый бекенд&lt;/li&gt; &lt;/ul&gt;&lt;p&gt;Видео роадмапа Unity 6.x:&lt;/p&gt;&lt;div class="media-wrap"&gt; &lt;iframe width="560" height="315" src="https://www.youtube.com/embed/rEKmARCIkSI?si=ySRk-LGioQC3DdGL" title="YouTube video player" frameborder="0" allow="accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share" referrerpolicy="strict-origin-when-cross-origin" allowfullscreen&gt;&lt;/iframe&gt; &lt;/div&gt;</description>
  <guid>https://mopsicus.ru/blog/unity-unite-2025-recap.html</guid>
  <link>https://mopsicus.ru/blog/unity-unite-2025-recap.html</link>
  <pubDate>Sun, 23 Nov 2025 13:14:00 +0300</pubDate>
  <comments>https://mopsicus.ru/blog/unity-unite-2025-recap.html#comments</comments>
  <author>mail@mopsicus.ru (Igor Lopatin)</author>
  <category>unity</category>
  <category>video</category>
  <category>csharp</category>
  <category>games</category>
  <category>ai</category>
  <category>indie</category>
</item>
<item>
  <title>Gamedev и ИИ</title>
  <description>&lt;p&gt;Читаю много разных телеграм-каналов про разработку игр, видел посты про использование ChatGPT, Copilot, Cursor, Grok, Windsurf и прочих инструментов. И все эти посты, да и комментарии под ними, показывают, что до полной замены нас, как разработчиков игр, ещё далеко.&lt;/p&gt;&lt;p&gt;Хотя прогресс в этом направлении идёт действительно очень! быстро, по моему мнению. То что ещё несколько лет назад казалось бывает только в фильмах, уже давно используется. Причём используется не для того чтобы записать ролик для Ютуба, а в реальной работе. И уже во многих вакансиях можно встретить требование или пожелание о навыках использования ИИ помощников.&lt;/p&gt;&lt;h2&gt;Почему рано&lt;/h2&gt;&lt;p&gt;Всё что сейчас доступно — это всё-таки прикладные инструменты для разработчика. Если говорить именно про создание кода игр. У которого уже есть какой-то опыт, навыки — background, как говорится. Все эти ИИ выполняют роль ассистентов:&lt;/p&gt;&lt;ul&gt; &lt;li&gt;подсказывают, дописывают код&lt;/li&gt; &lt;li&gt;помогают генерировать boilerplate&lt;/li&gt; &lt;li&gt;могут объяснить ошибку или предложить улучшение&lt;/li&gt; &lt;li&gt;анализируют структуру проекта&lt;/li&gt; &lt;/ul&gt;&lt;p&gt;Но всё это — на основе уже существующих знаний разработчика, который умеет задать правильный вопрос, понимает, что просить, как проверить результат, и куда вставить сгенерированный код. ИИ пока не умеет глубоко понимать контекст проекта, принимать архитектурные решения и гарантировать корректность логики.&lt;/p&gt;&lt;p&gt;Да, какие-то более-менее стандартные решения напрограммировать можно, например сделать прототип или отдельный небольшой модуль. И какой-нибудь Claude Sonnet 4.5 это даже сделает лучше джуна (при правильной постановке задачи). Но куда потом этот код вставить, как связать с уже существующим, будет ли он оптимизирован под текущую задачу — всё равно надо иметь представление. Полагаться что ИИ проанализирует весь ваш проект и правильно поймёт запрос — не стоит. Пока они очень любят фантазировать. И это до сих пор для многих сюрприз &lt;span class="emoji"&gt;😕&lt;/span&gt;&lt;/p&gt;&lt;h2&gt;Что делать&lt;/h2&gt;&lt;p&gt;Первое и наверное самое главное — &lt;s&gt;стать разработчиком&lt;/s&gt; всё-таки получить минимальные знания по теме, если их нет:&lt;/p&gt;&lt;ul&gt; &lt;li&gt;язык программирования&lt;/li&gt; &lt;li&gt;архитектурные паттерны&lt;/li&gt; &lt;li&gt;алгоритмы&lt;/li&gt; &lt;li&gt;инструмент разработки&lt;/li&gt; &lt;/ul&gt;&lt;p&gt;Второе, улучшить свои навыки в составлении промтов:&lt;/p&gt;&lt;ul&gt; &lt;li&gt;&lt;a href="https://mopsicus.ruhttps://services.google.com/fh/files/misc/gemini-for-google-workspace-prompting-guide-101.pdf"&gt;Prompting guide 101&lt;/a&gt;&lt;/li&gt; &lt;li&gt;&lt;a href="https://mopsicus.ruhttps://www.kaggle.com/whitepaper-prompt-engineering"&gt;Prompt engineering&lt;/a&gt;&lt;/li&gt; &lt;li&gt;&lt;a href="https://mopsicus.ruhttps://yandex.cloud/ru/blog/gpt-prompting-guide"&gt;Как писать промты для нейросетей&lt;/a&gt;&lt;/li&gt; &lt;li&gt;&lt;a href="https://mopsicus.ruhttps://habr.com/ru/companies/bothub/articles/930164/"&gt;Как писать промты и получить лучший результат&lt;/a&gt;&lt;/li&gt; &lt;li&gt;&lt;a href="https://mopsicus.ruhttps://craftum.com/blog/promts-dlya-nejrosetej/"&gt;Промты для нейросетей&lt;/a&gt;&lt;/li&gt; &lt;/ul&gt;&lt;p&gt;Или если не хочется сильно вникать, то проще всего начать с такого варианта: в каком-нибудь ChatGPT попросить составить промт для конкретной нейросети:&lt;/p&gt;&lt;div class="tagline"&gt; &lt;p&gt;Составь промт для &lt;a href="https://mopsicus.ruhttps://github.com/AUTOMATIC1111/stable-diffusion-webui"&gt;Stable Diffusion&lt;/a&gt;, используй параметры для получения картинки лучшего качества: набор спрайтов для персонажа в стиле киберпанк&lt;/p&gt; &lt;/div&gt;&lt;p&gt;Пример полученого промта&lt;/p&gt;&lt;pre&gt;&lt;code&gt;cyberpunk character sprite sheet, full body, multiple poses and animations (idle, walk, attack, jump), futuristic neon outfit, glowing details, cybernetic implants, high-tech armor, dark city atmosphere, detailed pixel art style, sharp lighting, consistent design, high contrast, vibrant colors, 8-direction view, cinematic composition, professional game asset, extremely detailed, ultra sharp focus, masterpiece, 4k, smooth edges
&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;Негативный промт:&lt;/p&gt;&lt;pre&gt;&lt;code&gt;blurry, low quality, distorted anatomy, bad proportions, extra limbs, missing limbs, cropped, text, watermark, signature, nsfw, lowres, deformed face, ugly, simple background, inconsistent lighting, different outfits, messy, sketch, grayscale, monochrome, painting
&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;Параметры:&lt;/p&gt;&lt;pre&gt;&lt;code&gt;Sampler: DPM++ 2M Karras
CFG Scale: 7–9
Steps: 30–40
Resolution: 1024×1024 или 1536×1536 (если хочешь сделать sheet — лучше квадрат)
Hires.fix: включить
Hires upscaler: 4x-UltraSharp или R-ESRGAN 4x+
Denoise strength: 0.3–0.4
Style model: SDXL base + Refiner
Seed: зафиксируй, чтобы можно было воспроизводить результат
&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;Выглядит довольно подробно и «серьезно», да? Но только для тех кто ещё не сталкивался со всем этим в реальных кейсах &lt;span class="emoji"&gt;😁&lt;/span&gt; Реальная ситуация будет такая, что придётся перепробовать кучу разных моделей с &lt;a href="https://mopsicus.ruhttps://huggingface.co"&gt;HuggingFace&lt;/a&gt; и &lt;a href="https://mopsicus.ruhttps://civitai.com"&gt;Civitai&lt;/a&gt;, всё время играться с параметрами (которых куча) и сидом, чтобы получить рабочий результат. Я уже не говорю про правку самого промта.&lt;/p&gt;&lt;p&gt;Также можно и для кода, например:&lt;/p&gt;&lt;div class="tagline"&gt; &lt;p&gt;Составь промт для Copilot + Claude Sonnet 4.5 с нужными ключевыми словами и инструкциями, чтобы был контекст, план работ, рабочий результат и проверка на каждом этапе. Задача: код игры Ping-Pong на C# и Unity&lt;/p&gt; &lt;/div&gt;&lt;p&gt;Результат:&lt;/p&gt;&lt;pre&gt;&lt;code&gt;Ты – опытный разработчик игр на Unity и C#. Твоя задача: создать полностью рабочую 2D игру Ping-Pong на Unity с поэтапным подходом. На каждом этапе необходимо:

1. Дать план действий.
2. Сгенерировать код или инструкции для этого этапа.
3. Предложить способ проверки правильности выполнения.

**Контекст проекта:**
- Язык: C#
- Платформа: Unity 2021.3+
- Жанр: 2D игра Ping-Pong
- Цель: работающая игра с двумя ракетками, мячом, счетом, AI и управлением игрока

**Этапы разработки:**

**Этап 1: Подготовка сцены**
- Создать 2D сцену, разместить игровое поле
- Добавить объекты: левая и правая ракетки, мяч, стены, UI Text для счета
- Проверка: объекты видны на сцене, UI отображается

**Этап 2: Управление игроком**
- Написать скрипт Paddle.cs для левой ракетки
- Управление W/S, скорость через публичную переменную
- Проверка: левая ракетка двигается при нажатии W/S

**Этап 3: Мяч и физика**
- Написать скрипт Ball.cs
- Движение с постоянной скоростью, отскок от стен и ракеток
- Rigidbody2D, Collider2D
- Проверка: мяч отскакивает корректно, скорость регулируется через инспектор

**Этап 4: AI для правой ракетки**
- Скрипт AI для правой ракетки: следовать за мячом с ограниченной скоростью
- Проверка: правая ракетка двигается за мячом без рывков

**Этап 5: Счет и UI**
- Скрипт GameManager.cs для ведения счета
- UI обновляется при каждом голе
- Мяч перезапускается после гола
- Проверка: счет увеличивается правильно, мяч возвращается в центр

**Этап 6: Завершение и тестирование**
- Проверить все элементы вместе: управление, AI, мяч, счет
- Сделать финальные настройки скорости и размеров через инспектор
- Проверка: игра полностью играбельна, без ошибок, логика корректна

**Стиль кода и требования:**
- Чистый, читаемый, с комментариями для каждого класса и метода
- Все настройки публичные для инспектора
- Использовать MonoBehaviour и Rigidbody2D
- Ключевые слова для генерации: Unity C#, 2D game, Ping-Pong, Paddle, Ball, AI paddle, Score, collision, Rigidbody2D, clean code, commented code, inspector variables, step-by-step, verification

**Вывод:**
- Для каждого этапа предоставь код + инструкции по сцене + способ проверки
- В конце выведи полную рабочую игру, которую можно собрать в Unity без доработок
&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;Тоже вроде всё понятно и подробно расписано. Теперь этот промт можно или доработать/уточнить, или сразу вставить в Copilot и ждать когда оно напишет игру &lt;span class="emoji"&gt;😅&lt;/span&gt; Я так и сделал. И вот что получилось:&lt;/p&gt;&lt;ul&gt; &lt;li&gt;Copilot создал структуру папок проекта&lt;/li&gt; &lt;li&gt;создал все скрипты&lt;/li&gt; &lt;li&gt;написал 7 инструкций, как всё это собрать и запустить&lt;/li&gt; &lt;/ul&gt;&lt;p&gt;Я уточнил, что вручную создавать ничего не хочу. После этого он создал &lt;code&gt;PingPongGameSetup.cs&lt;/code&gt; с автоматическим установщиком. Остаётся создать сцену и запустить скрипт, остальное установщик создаст сам:&lt;/p&gt;&lt;ul&gt; &lt;li&gt;все игровые объекты (стены, ракетки, мяч)&lt;/li&gt; &lt;li&gt;все компоненты (Rigidbody2D, Colliders, теги)&lt;/li&gt; &lt;li&gt;все скрипты применяются к нужным объектам&lt;/li&gt; &lt;li&gt;весь UI (счет, сообщения, инструкции)&lt;/li&gt; &lt;li&gt;Physics Material для правильных отскоков&lt;/li&gt; &lt;li&gt;GameManager со всеми настройками&lt;/li&gt; &lt;/ul&gt;&lt;p&gt;В общем, вот такое красивое окно установщика получилось:&lt;/p&gt;&lt;img class="emerge float-center" src="https://mopsicus.ru/images/assets/gamedev-ai-setup.45686429.jpg"&gt;&lt;p&gt;После запуска даже удалось как-то поиграть!&lt;/p&gt;&lt;div class="media-wrap"&gt; &lt;iframe width="560" height="315" src="https://www.youtube.com/embed/RCzMWoNZQvw?si=8eyUImQO37aBv8ug" title="YouTube video player" frameborder="0" allow="accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share" referrerpolicy="strict-origin-when-cross-origin" allowfullscreen&gt;&lt;/iframe&gt; &lt;/div&gt;&lt;p&gt;Видно что приходится перезапускать игру, потому что мячик улетает за пределы — этот момент не обрабатывается. Кроме того, кое-что пришлось поправить руками, чтобы завелось:&lt;/p&gt;&lt;ul&gt; &lt;li&gt;не было тегов по которым скрипты ориентировались&lt;/li&gt; &lt;li&gt;верхние и нижние стенки сделал шире, иначе мячик улетал в пустоту&lt;/li&gt; &lt;/ul&gt;&lt;p&gt;Остальное «работает». Но мне пришлось задебажить и понять, что тегов нет и добавить их, хотя метод &lt;code&gt;CreateTagIfNotExists&lt;/code&gt; есть. Если бы это делал человек без опыта Unity, то пришлось бы задавать уточняющие вопросы, искать причину почему не работает скрипт, пробовать новую реализацию и возможно ходить по кругу. Качество кода тоже такое себе получается. Мячик улетает, неправильно отскакивает, «застревает» в стенке. Конечно, это тоже можно уточнящими запросами пофиксить…&lt;/p&gt;&lt;div class="alert"&gt; &lt;p&gt;&lt;span id="ping-pong-ai-stars"&gt;&lt;/span&gt; &lt;i class="fa-regular fa-star"&gt;&lt;/i&gt; Все &lt;a href="https://mopsicus.ruhttps://github.com/mopsicus/ping-pong-ai"&gt;исходники&lt;/a&gt; доступны на Github&lt;/p&gt; &lt;/div&gt;&lt;h2&gt;Итого&lt;/h2&gt;&lt;p&gt;Всё это не магия и не волшебная технология. Какой-нибудь 2D артист который захочет самостоятельно закодить игру столкнётся со всем этим. Если время и интерес есть, то конечно можно разобраться, поднатаскаться и в итоге что-то да получится. Но далеко не со второго раза и не как в фильме «Железный человек». Так что, никто нас, разработчиков игр, ещё долго не заменит бездушными машинами &lt;span class="emoji"&gt;👾&lt;/span&gt;&lt;/p&gt;&lt;p&gt;Для разработчиков с опытом, Copilot или Cursor — это действительно полезный инструмент который ускоряет работу, берёт на себя всякие рутинные задачи, проверяет на опечатки, глупые ошибки, пишет саммари, комментарии и прочее. В общем — помогает, но не заменяет.&lt;/p&gt;&lt;p&gt;Разработка (и языки программирования) на протяжении всей своей истории становятся всё более высокоуровневыми, но специалисты, которые разбираются в коде, всегда будут нужны.&lt;/p&gt;</description>
  <guid>https://mopsicus.ru/blog/gamedev-ai.html</guid>
  <link>https://mopsicus.ru/blog/gamedev-ai.html</link>
  <pubDate>Wed, 12 Nov 2025 19:24:00 +0300</pubDate>
  <comments>https://mopsicus.ru/blog/gamedev-ai.html#comments</comments>
  <author>mail@mopsicus.ru (Igor Lopatin)</author>
  <category>games</category>
  <category>unity</category>
  <category>ai</category>
  <category>video</category>
  <category>vibecoding</category>
  <category>thoughts</category>
</item>
<item>
  <title>CodeCanvas</title>
  <description>&lt;p&gt;Интересное расширение для VS Code которое показывает связи между файлами на основе импорта и экспорта, а также позволяет увидеть ссылки (определения, вызовы функций, использование и т.д.), когда вы нажимаете на функцию или переменную.&lt;/p&gt;&lt;p&gt;При клике на методе/переменной расширение визуально показывает, где находятся ссылки в кодовой базе. Также есть отображение локальных изменений Git.&lt;/p&gt;&lt;p&gt;Пока расширение поддерживает проекты на Javascript, Typescript и React, но автор пишет, что в ближайшее время появятся и другие языки и фреймворки. Нас интересует C# &lt;span class="emoji"&gt;😬&lt;/span&gt; Его вроде как тоже добавят.&lt;/p&gt;&lt;p&gt;На Ютубчике есть видео где автор подробно показывает работу расширения:&lt;/p&gt;&lt;div class="media-wrap"&gt; &lt;iframe width="560" height="315" src="https://www.youtube.com/embed/qRmS_IY3GUU?si=vihdYsar738u-Sk6" title="YouTube video player" frameborder="0" allow="accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share" referrerpolicy="strict-origin-when-cross-origin" allowfullscreen&gt;&lt;/iframe&gt; &lt;/div&gt;&lt;p&gt;Установил и натравил на исходники &lt;a href="https://mopsicus.ru../projects/trafaret.html"&gt;Trafaret&lt;/a&gt;. Видно что есть большой файл &lt;code&gt;app.ts&lt;/code&gt; (справа), много хелперов (слева) и класс &lt;code&gt;utils.ts&lt;/code&gt; который импортирует хелперы.&lt;/p&gt;&lt;div class="fotorama"&gt; &lt;img class="emerge float-center" src="https://mopsicus.ru/images/assets/code-canvas-overview.4be54bf6.jpg" alt="CodeCanvas Trafaret overview"&gt; &lt;img class="emerge float-center" src="https://mopsicus.ru/images/assets/code-canvas-links.04f82239.jpg" alt="CodeCanvas Trafaret links"&gt; &lt;img class="emerge float-center" src="https://mopsicus.ru/images/assets/code-canvas-calls.19962395.jpg" alt="CodeCanvas Trafaret calls"&gt; &lt;/div&gt;&lt;p&gt;Если приблизить, то рендерится код класса. Можно нажать на переменную или метод и расширение покажет где оно используется. В общем интересно, можно поковыряться. Уже сейчас понятно что &lt;code&gt;app.ts&lt;/code&gt; по хорошему требует рефакторинга &lt;span class="emoji"&gt;😅&lt;/span&gt; Ждём когда завезут поддержку C#.&lt;/p&gt;&lt;ul&gt; &lt;li&gt;&lt;a href="https://mopsicus.ruhttps://www.codecanvas.app"&gt;Сайт&lt;/a&gt;&lt;/li&gt; &lt;li&gt;&lt;a href="https://mopsicus.ruhttps://marketplace.visualstudio.com/items?itemName=alex-c.code-canvas-app"&gt;Расширение для VS Code&lt;/a&gt;&lt;/li&gt; &lt;li&gt;&lt;a href="https://mopsicus.ruhttps://open-vsx.org/extension/alex-c/code-canvas-app"&gt;Расширение для Cursor/Windsurf&lt;/a&gt;&lt;/li&gt; &lt;li&gt;&lt;a href="https://mopsicus.ruhttps://www.reddit.com/r/webdev/comments/1orrcav/i_built_a_vscode_extension_to_see_your_code_on_an/"&gt;Пост на Reddit&lt;/a&gt;&lt;/li&gt; &lt;/ul&gt;</description>
  <guid>https://mopsicus.ru/blog/code-canvas.html</guid>
  <link>https://mopsicus.ru/blog/code-canvas.html</link>
  <pubDate>Mon, 10 Nov 2025 13:14:00 +0300</pubDate>
  <comments>https://mopsicus.ru/blog/code-canvas.html#comments</comments>
  <author>mail@mopsicus.ru (Igor Lopatin)</author>
  <category>ide</category>
  <category>vscode</category>
  <category>video</category>
  <category>ui</category>
  <category>package</category>
  <category>typescript</category>
</item>
<item>
  <title>Downloader TV+</title>
  <description>&lt;p&gt;Тесть недавно попросил настроить Youtube на телевизоре &lt;span class="emoji"&gt;😁&lt;/span&gt; Сейчас для просмотра нужен дополнительный софт, к сожалению. Вот его то и не получилось быстро настроить. И результатом стало появление этой утилиты для Android TV, которую скрафтил для меня Copilot.&lt;/p&gt;&lt;p&gt;Сначала я поставил Hiddify на ТВ, сделал профиль на своём сервере, но вот добавить его в приложение оказалось проблемой. На некоторых телевизорах почему-то не вызывается меню для выделения и/или копирования текста. Камеры чтобы сканировать QR-код тоже на многих телевизорах нет. В итоге, я загрузил текстовый файл на свой сервер, скачал его на ТВ, но добавить в Hiddify не получалось. Пробовал разные файловые менеджеры: файл открывают, но скопировать текст из него в буфер обмена не могут. Вводить руками с пульта или клавиатуры? Конечно можно было озадачиться, но это не наш путь. А смотреть Youtube тесть хочет… И наверное, такая проблема возникала не только у меня.&lt;/p&gt;&lt;h2&gt;Решение&lt;/h2&gt;&lt;ol&gt; &lt;li&gt;Создал пустой проект в Android Studio&lt;/li&gt; &lt;li&gt;Открыл Copilot&lt;/li&gt; &lt;li&gt;Написал промт&lt;/li&gt; &lt;li&gt;Получил готовое приложение для Android TV&lt;/li&gt; &lt;/ol&gt;&lt;p&gt;Выглядит оно вот так:&lt;/p&gt;&lt;div class="fotorama"&gt; &lt;img class="emerge float-center" src="https://mopsicus.ru/images/assets/downloader-tv-get.06575ff6.jpg" alt="Downloader TV+ get file"&gt; &lt;img class="emerge float-center" src="https://mopsicus.ru/images/assets/downloader-tv-copy.9d06aa92.jpg" alt="Downloader TV+ select and copy to clipboard"&gt; &lt;/div&gt;&lt;h2&gt;Что умеет&lt;/h2&gt;&lt;ol&gt; &lt;li&gt;Скачивает файл по ссылке&lt;/li&gt; &lt;li&gt;Сохраняет в Downloads&lt;/li&gt; &lt;li&gt;Отрывает файл через «Открыть с помощью»&lt;/li&gt; &lt;li&gt;Копирует содержимое файла в буфер обмена&lt;/li&gt; &lt;li&gt;Всё&lt;/li&gt; &lt;/ol&gt;&lt;p&gt;Это полностью решает эту и другие похожие проблемы, когда надо что-то вставить из буфера обмена на Android TV. Сколько я потратил на это времени, думаю нет смысла говорить — минуты.&lt;/p&gt;&lt;hr&gt;&lt;p&gt;И наверное, это один из самых классных плюсов всей этой истории с ИИ, агентами и прочим: когда можно без особых усилий, за короткий промежуток времени, получить готовое решение своей небольшой задачи, не вникая как оно сделано и что использует. Оно просто работает.&lt;/p&gt;&lt;p&gt;Есть ещё в планах написать пост про ИИ и геймдев, но там у меня немного другой подход.&lt;/p&gt;&lt;p&gt;Stay tuned.&lt;/p&gt;&lt;div class="alert"&gt; &lt;p&gt;&lt;span id="downloader-tv-stars"&gt;&lt;/span&gt; &lt;i class="fa-regular fa-star"&gt;&lt;/i&gt; Все &lt;a href="https://mopsicus.ruhttps://github.com/mopsicus/downloader-tv"&gt;исходники&lt;/a&gt; и APK доступны на Github&lt;/p&gt; &lt;/div&gt;</description>
  <guid>https://mopsicus.ru/blog/downloader-tv-ai.html</guid>
  <link>https://mopsicus.ru/blog/downloader-tv-ai.html</link>
  <pubDate>Fri, 31 Oct 2025 19:44:00 +0300</pubDate>
  <comments>https://mopsicus.ru/blog/downloader-tv-ai.html#comments</comments>
  <author>mail@mopsicus.ru (Igor Lopatin)</author>
  <category>android</category>
  <category>tv</category>
  <category>ai</category>
  <category>vibecoding</category>
  <category>java</category>
  <category>copilot</category>
  <category>chatgpt</category>
  <category>thoughts</category>
</item>
<item>
  <title>500+ звёзд UIS</title>
  <description>&lt;p&gt;Приятное событие: мой скрипт для создания &lt;a href="https://mopsicus.ru../projects/uis.html"&gt;бесконечного списка&lt;/a&gt; получил 500 звёзд на Github! И такое бывает… Не сказать что много, но и не мало, если учесть что далеко не все кто пользуются ставят звёзды.&lt;/p&gt;&lt;p&gt;Первую версию закоммитил в 2016 году! Почти юбилей &lt;span class="emoji"&gt;😅&lt;/span&gt; Обновлять там особо нечего, поэтому последний коммит был в прошлом году. За эти почти 10 лет родной &lt;code&gt;ScrollView&lt;/code&gt; от Unity не улучшился, также тормозит если в него положить много объектов.&lt;/p&gt;&lt;p&gt;Этот скрипт &lt;a href="https://mopsicus.ruhttps://www.rovio.com/oss/licenses/infinite-scroll/"&gt;используют&lt;/a&gt; в Rovio &lt;span class="emoji"&gt;😎&lt;/span&gt; Вот такой «успех».&lt;/p&gt;&lt;div class="alert"&gt; &lt;p&gt;&lt;span id="uis-stars"&gt;&lt;/span&gt; &lt;i class="fa-regular fa-star"&gt;&lt;/i&gt; Все &lt;a href="https://mopsicus.ruhttps://github.com/mopsicus/uis"&gt;исходники&lt;/a&gt; доступны на Github&lt;/p&gt; &lt;/div&gt;</description>
  <guid>https://mopsicus.ru/blog/uis-500-stars.html</guid>
  <link>https://mopsicus.ru/blog/uis-500-stars.html</link>
  <pubDate>Thu, 23 Oct 2025 15:21:00 +0300</pubDate>
  <comments>https://mopsicus.ru/blog/uis-500-stars.html#comments</comments>
  <author>mail@mopsicus.ru (Igor Lopatin)</author>
  <category>csharp</category>
  <category>github</category>
  <category>unity</category>
  <category>project</category>
  <category>ui</category>
</item>
<item>
  <title>Новый сайт 2025</title>
  <description>&lt;p&gt;Однажды, в марте 2016 года, я зарегил себе домен &lt;code&gt;mopsicus.ru&lt;/code&gt; и начал вести блог. Хотя блог подразумевает какую-то периодичность, а у меня она была так себе &lt;span class="emoji"&gt;😅&lt;/span&gt; За почти 10 лет существования сайта я написал всего 224 поста, т.е. в среднем где-то по два в месяц. Хотя вроде начинал неплохо. Но с каждым месяцем желание что-то писать уходило и частота постов упала почти до нуля. В итоге понял, что надо поменять немного формат и перезапуститься…&lt;/p&gt;&lt;h2&gt;Предыстория&lt;/h2&gt;&lt;p&gt;Всё это время сайт работал на движке &lt;a href="https://mopsicus.ruhttps://blogengine.ru"&gt;Эгея&lt;/a&gt;. Это инструмент для блога, довольно неплохой, но со своими ограничениями, а у меня появилась необходимость в дополнительных разделах, функциях, гибкости и свободе действий которую он не давал. Кроме того, я решил делать сайт статичным: классика в виде HTML и Javascript. Такое решение появилось потому что уже несколько лет я веду свою личную базу знаний в &lt;a href="https://mopsicus.ruhttps://obsidian.md"&gt;Obsidian&lt;/a&gt;. И этот формат хранения данных, в отдельных &lt;abbr title="Облегчённый язык разметки для форматирования текстовых документов"&gt;Markdown&lt;/abbr&gt; файлах, мне очень понравился.&lt;/p&gt;&lt;p&gt;Смотрел разные &lt;abbr title="Static Site Generation, страницы генерируются на этапе билда и размещаются как статические файлы"&gt;SSG&lt;/abbr&gt;, понравился &lt;a href="https://mopsicus.ruhttps://astro.build"&gt;Astro&lt;/a&gt;, как раз на Node.js + Typescript, то что я и хотел. Но в итоге написал свой &lt;span class="emoji"&gt;🤷‍♂️&lt;/span&gt; Не потому что не нашел что искал, а скорее потому что лень было разбираться во всех тонкостях и доках. Так появился &lt;a href="https://mopsicus.ru../projects/trafaret.html"&gt;Trafaret&lt;/a&gt;.&lt;/p&gt;&lt;h2&gt;Наши дни&lt;/h2&gt;&lt;p&gt;Теперь можно забыть о каких-то переделках ещё на 10 лет &lt;span class="emoji"&gt;😁&lt;/span&gt; Всё что я на данный момент хотел от сайта — я сделал. Постепенно переношу какие-то старые посты из &lt;a href="https://mopsicus.ruhttps://old.mopsicus.ru"&gt;предыдущей версии сайта&lt;/a&gt;. Большие посты которые более-менее не устаревают теперь называются &lt;a href="https://mopsicus.ru/notes/"&gt;Заметки&lt;/a&gt;. Их я актуализировал и убрал битые ссылки. Даты не менял, так что посту может быть несколько лет, но информация свежая. В &lt;a href="https://mopsicus.ru/archive/"&gt;архиве&lt;/a&gt; есть удобная разбивка по времени, категориям, тегам и форматам постов. Есть тёмная тема, удобный формат под мобильные устройства и прочее.&lt;/p&gt;&lt;p&gt;Надеюсь что соберусь и не заброшу сайт снова &lt;span class="emoji"&gt;😅&lt;/span&gt; Всем привет!&lt;/p&gt;&lt;div class="alert-info"&gt; &lt;p&gt;Историческая справка. Мой первый сайт был сделан на бесплатном хостинге, тогда он располагался на домене &lt;em&gt;narod.ru&lt;/em&gt; и был посвещён книге рекордов Гиннесса &lt;span class="emoji"&gt;😬&lt;/span&gt; Конечно, он давно не доступен, но &lt;a href="https://mopsicus.ruhttps://web.archive.org/web/20020118180929/http://ginness.narod.ru/"&gt;в интернет архиве остался&lt;/a&gt;. Это 2001 год на секундочку, почти 25 лет прошло. Сайт был стилизован под интерфейс браузера Internet Explorer, тогда мне казалось что это классно.&lt;/p&gt; &lt;/div&gt;</description>
  <guid>https://mopsicus.ru/blog/website-update-2025.html</guid>
  <link>https://mopsicus.ru/blog/website-update-2025.html</link>
  <pubDate>Sun, 19 Oct 2025 14:00:00 +0300</pubDate>
  <comments>https://mopsicus.ru/blog/website-update-2025.html#comments</comments>
  <author>mail@mopsicus.ru (Igor Lopatin)</author>
  <category>website</category>
  <category>blog</category>
  <category>project</category>
  <category>ssg</category>
  <category>markdown</category>
</item>
<item>
  <title>Русское лото и ChatGPT</title>
  <description>&lt;p&gt;Как-то мы захотели поиграть в Русское лото, классическое, оффлайновое, там где мешок, бочонки, карточки. Но людей много, а карточек мало, к тому же они от игры к игре повторяются. Хотелось полного рандома. Думал зайду в Google, скачаю генератор и распечатаю сколько мне нужно новых карточек. Но оказалось, что такой штуки просто нет &lt;span class="emoji"&gt;🤷‍♂️&lt;/span&gt; Ну или я плохо искал.&lt;/p&gt;&lt;p&gt;В общем, самому писать такое было неинтересно, да и некогда, поэтому решил проверить победили ли нас машины или нет, надо уже менять профессию или нет – попробовал написать всё с помощью ChatGPT. В итоге получилось всё как я хотел, но надо сказать, что это было не как в фильме Железный человек, когда Джарвис всё понимал с полуслова. В какой-то момент хотелось уже руками поправить код и забыть, но интересно было именно таким способом сделать от начала до конца.&lt;/p&gt;&lt;p&gt;Получился &lt;a href="https://mopsicus.ruhttps://gist.github.com/mopsicus/120f2e808cb22801a5c0ba2758775af1"&gt;генератор карточек для игры в Русское лото&lt;/a&gt;, в виде одной HTML странички, весь HTML и код на JavaScript сгенерил ChatGPT, я ни строчки не написал &lt;span class="emoji"&gt;😅&lt;/span&gt; Можно указать количество страниц для генерации, и на каждой будет 4 карточки с рандомными числами в соответствии с правилами игры. Файл сохраняется в PDF.&lt;/p&gt;&lt;p&gt;Сейчас для помощи в разработке использую &lt;em&gt;Copilot + Claude Sonnet 4&lt;/em&gt;, для пока что это лучшее сочетание, рекомендую.&lt;/p&gt;</description>
  <guid>https://mopsicus.ru/blog/russian-loto-chatgpt.html</guid>
  <link>https://mopsicus.ru/blog/russian-loto-chatgpt.html</link>
  <pubDate>Tue, 03 Dec 2024 12:00:00 +0300</pubDate>
  <comments>https://mopsicus.ru/blog/russian-loto-chatgpt.html#comments</comments>
  <author>mail@mopsicus.ru (Igor Lopatin)</author>
  <category>games</category>
  <category>ai</category>
  <category>vibecoding</category>
  <category>github</category>
</item>
<item>
  <title>Морской Бой Онлайн</title>
  <description>&lt;p&gt;В телеграме запостил, а тут забыл совсем: встречайте лучший (по нашему мнению &lt;span class="emoji"&gt;😅&lt;/span&gt;) мобильный Морской Бой Онлайн aka Sea Battle aka Fleet Battle aka Warships на минималках. Это классическая игра из детства, в онлайн исполнении, с новыми возможностями, в пиратском стиле! &lt;span class="emoji"&gt;🏴‍&lt;/span&gt; (да, у нас не тетрадный стиль!)&lt;/p&gt;&lt;div class="media-wrap"&gt; &lt;iframe width="560" height="315" src="https://www.youtube.com/embed/bWU_KmSthXU?si=70y9lPpA1RfnvkJe" title="YouTube video player" frameborder="0" allow="accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share" referrerpolicy="strict-origin-when-cross-origin" allowfullscreen&gt;&lt;/iframe&gt; &lt;/div&gt;&lt;p&gt;Помимо классического режима с давно известными правилами, есть расширенный, с оружием: мины, подводная лодка, радар и РЭБ. Комбинируйте разные расстановки и оружие для создания выигрышной стратегии.&lt;/p&gt;&lt;p&gt;Ну и конечно: быстрые партии, приятная графика, друзья, чаты, достижения, лидерборда, приватные игры, разные скины кораблей и отсутствие рекламы (только добровольная).&lt;/p&gt;&lt;ul&gt; &lt;li&gt;&lt;a href="https://mopsicus.ruhttps://play.google.com/store/apps/details?id=games.magicboard.sb"&gt;Google Play&lt;/a&gt;&lt;/li&gt; &lt;li&gt;&lt;a href="https://mopsicus.ruhttps://apps.apple.com/ru/app/id6466614302"&gt;AppStore&lt;/a&gt;&lt;/li&gt; &lt;li&gt;&lt;a href="https://mopsicus.ruhttps://appgallery.huawei.com/#/app/C109196051"&gt;AppGallery&lt;/a&gt;&lt;/li&gt; &lt;/ul&gt;&lt;p&gt;У нас нет ботов, специальных алгоритмов и прочей магии. Всё реально случайно, это касается других наших игр с рандомом, но в морском бое рандома никакого нет. И я думал что хоть тут не будет подобных отзывов… Ошибался &lt;span class="emoji"&gt;😁&lt;/span&gt; Некоторые игроки не ожидают, что может так повезти и кто-то может выиграть без единого промаха. Единственное объяснение у таких игроков: всё куплено, везде боты и всё подкручено.&lt;/p&gt;&lt;p&gt;Мы играли наверно во все мобильные морские бои, скомпилировали лучшее от всех, убрав всё худшее, добавили своё уникальное. В некоторые игры иногда невозможно играть из-за агрессивной рекламной монетизации, буквально после каждой партии реклама, а у некоторых и на возврат в основное меню тоже &lt;span class="emoji"&gt;🙄🤯&lt;/span&gt; Когда играть-то?&lt;/p&gt;&lt;p&gt;В общем, присоединяйтесь к нашему морскому бою, играйте с друзьями и без рекламы!&lt;/p&gt;</description>
  <guid>https://mopsicus.ru/blog/sea-battle-online-game.html</guid>
  <link>https://mopsicus.ru/blog/sea-battle-online-game.html</link>
  <pubDate>Mon, 09 Sep 2024 15:54:00 +0300</pubDate>
  <comments>https://mopsicus.ru/blog/sea-battle-online-game.html#comments</comments>
  <author>mail@mopsicus.ru (Igor Lopatin)</author>
  <category>links</category>
  <category>games</category>
  <category>unity</category>
  <category>video</category>
</item>
<item>
  <title>Unity Builder Bot</title>
  <description>&lt;p&gt;Бот сделан на основе моего старого скрипта из &lt;a href="https://mopsicus.ruunity-simple-custom-ci-cd.html"&gt;этого поста&lt;/a&gt;.&lt;/p&gt;&lt;p&gt;Телеграм бот и расширение редактора для билда Unity проектов. Можно использовать по отдельности, но проектировалось чтобы работало вместе. Все исходники по ссылкам.&lt;/p&gt;&lt;div class="fotorama"&gt; &lt;img class="emerge float-center" src="https://mopsicus.ru/images/assets/ubh-window.f367d41d.jpg" data-caption="UBH" alt="Unity Builder Helper"&gt; &lt;img class="emerge float-center" src="https://mopsicus.ru/images/assets/ubh-settings.f6962868.jpg" data-caption="UBH settings" alt="Unity Builder Helper settings"&gt; &lt;/div&gt;&lt;p&gt;Телеграм бот написан на Node.js и Telegraf.js. Может пулить апдейты, запускать билд Unity проекта, билдить Xcode проект (на маке), всё подписывать, загружать на сервер и скидывать ссылку. Билды для iOS тоже можно ставить по ссылке, там подключается манифест разработчика.&lt;/p&gt;&lt;p&gt;Основные функции:&lt;/p&gt;&lt;ul&gt; &lt;li&gt;добавить проект из Git репозитория&lt;/li&gt; &lt;li&gt;удалить проект&lt;/li&gt; &lt;li&gt;получить список всех проектов&lt;/li&gt; &lt;li&gt;перейти в нужную ветку&lt;/li&gt; &lt;li&gt;спулить апдейт&lt;/li&gt; &lt;li&gt;сбилдить Unity проект&lt;/li&gt; &lt;li&gt;сбилдить Xcode проект&lt;/li&gt; &lt;li&gt;скомпилировать, сделать архив, экспорт в IPA&lt;/li&gt; &lt;li&gt;сгенерировать HTML страницу с ссылками&lt;/li&gt; &lt;li&gt;загрузить все файлы на сервер через sshpass&lt;/li&gt; &lt;li&gt;получить логи&lt;/li&gt; &lt;li&gt;очистить логи и билды&lt;/li&gt; &lt;/ul&gt;&lt;p&gt;Это все можно сделать с помощью телеграм, даже не запуская Unity. Каждый этап сборки логируется и уведомляется ботом.&lt;/p&gt;&lt;div class="alert"&gt; &lt;p&gt;&lt;span id="ubb-stars"&gt;&lt;/span&gt; &lt;i class="fa-regular fa-star"&gt;&lt;/i&gt; Все &lt;a href="https://mopsicus.ruhttps://github.com/mopsicus/ubb"&gt;исходники&lt;/a&gt; бота доступны на Github&lt;/p&gt; &lt;/div&gt;&lt;p&gt;Расширение редактора позволяет быстро переключаться между платформами, включать дефайны, запускать локальный и удаленный билд на боте, подставлять данные для &lt;em&gt;Keystore&lt;/em&gt;, нужные зависимости для Huawei, добавлять локализации для iOS, также добавлять сторонние файлы в билд. Есть &lt;a href="https://mopsicus.ruhttps://github.com/mopsicus/ubh-demo"&gt;демка&lt;/a&gt; с набором файлов и примерной структурой.&lt;/p&gt;&lt;p&gt;Основные функции:&lt;/p&gt;&lt;ul&gt; &lt;li&gt;изменить платформу&lt;/li&gt; &lt;li&gt;установить defines&lt;/li&gt; &lt;li&gt;выбрать папку для билдов под каждую платформу&lt;/li&gt; &lt;li&gt;изменить версию, номер билда&lt;/li&gt; &lt;li&gt;подставить данные для Keystore&lt;/li&gt; &lt;li&gt;добавить локали и *.lproj файлы в Xcode проект&lt;/li&gt; &lt;li&gt;добавить фреймворки и дополнительные файлы в Xcode проект&lt;/li&gt; &lt;li&gt;добавить и применить google-services.json и agconnect-services.json&lt;/li&gt; &lt;li&gt;добавить дополнительные файлы в APK&lt;/li&gt; &lt;li&gt;пропатчить AndroidManifest.xml&lt;/li&gt; &lt;li&gt;пропатчить gradle файлы&lt;/li&gt; &lt;li&gt;добавить зависимости для Huawei билда&lt;/li&gt; &lt;li&gt;сбилдить Unity проект&lt;/li&gt; &lt;/ul&gt;&lt;div class="alert"&gt; &lt;p&gt;&lt;span id="ubh-stars"&gt;&lt;/span&gt; &lt;i class="fa-regular fa-star"&gt;&lt;/i&gt; Все &lt;a href="https://mopsicus.ruhttps://github.com/mopsicus/ubh"&gt;исходники&lt;/a&gt; расширения доступны на Github&lt;/p&gt; &lt;/div&gt;&lt;p&gt;Получилось как-то так, думаю кому-то будет полезно и интересно поковырять исходники.&lt;/p&gt;</description>
  <guid>https://mopsicus.ru/blog/unity-builder-bot.html</guid>
  <link>https://mopsicus.ru/blog/unity-builder-bot.html</link>
  <pubDate>Fri, 08 Jul 2022 20:12:00 +0300</pubDate>
  <comments>https://mopsicus.ru/blog/unity-builder-bot.html#comments</comments>
  <author>mail@mopsicus.ru (Igor Lopatin)</author>
  <category>csharp</category>
  <category>github</category>
  <category>unity</category>
  <category>nodejs</category>
</item>
<item>
  <title>Командный бой на Unity</title>
  <description>&lt;p&gt;Ограниченное поле из клеток и две команды. Юниты появляются рандомно на своей половине и начинается бой. Каждый юнит ищет противника, как сонар у подводной лодки. Найдя противника, строит к нему путь с помощью волнового алгоритма и начинает движение. Так как за ход многие юниты могут поменять свое расположение, путь перестраивается каждый раз.&lt;/p&gt;&lt;div class="alert-info"&gt; &lt;p&gt;Уже не помню зачем делал. Похоже на какое-то тестовое задание.&lt;/p&gt; &lt;/div&gt;&lt;p&gt;Когда противник в зоне атаки, юниты наносят друг друг рандомный дамаг. Победитель ищет новую цель и так продолжается пока одна из команд полностью не уничтожит другую.&lt;/p&gt;&lt;div class="media-wrap"&gt; &lt;iframe width="560" height="315" src="https://www.youtube.com/embed/ONT3SbW9eO4?si=sAfV1if5QM1d0Pl2" title="YouTube video player" frameborder="0" allow="accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share" referrerpolicy="strict-origin-when-cross-origin" allowfullscreen&gt;&lt;/iframe&gt; &lt;/div&gt;&lt;p&gt;Из положительных моментов: почти не выделяется память, только на корутины анимации (но это можно убрать) и все отрисовывается за 2-4 DC.&lt;/p&gt;&lt;div class="alert"&gt; &lt;p&gt;&lt;span id="unity-team-fight-stars"&gt;&lt;/span&gt; &lt;i class="fa-regular fa-star"&gt;&lt;/i&gt; Все &lt;a href="https://mopsicus.ruhttps://github.com/mopsicus/unity-team-fight"&gt;исходники&lt;/a&gt; доступны на Github&lt;/p&gt; &lt;/div&gt;</description>
  <guid>https://mopsicus.ru/blog/unity-team-fight-example.html</guid>
  <link>https://mopsicus.ru/blog/unity-team-fight-example.html</link>
  <pubDate>Mon, 14 Dec 2020 13:54:00 +0300</pubDate>
  <comments>https://mopsicus.ru/blog/unity-team-fight-example.html#comments</comments>
  <author>mail@mopsicus.ru (Igor Lopatin)</author>
  <category>games</category>
  <category>algorithm</category>
  <category>csharp</category>
  <category>github</category>
  <category>unity</category>
  <category>video</category>
</item>

  </channel>
</rss>