<?xml version="1.0" encoding="UTF-8"?>

<rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/" >

  <channel>
    <title><![CDATA[Все посты подряд / Unity / Хабр]]></title>
    <link>https://habr.com/ru/hubs/unity/posts/</link>
    <description><![CDATA[Unity – инструмент разработки 2D/3D-игр]]></description>
    <language>ru</language>
    <managingEditor>editor@habr.com</managingEditor>
    <generator>habr.com</generator>
    <pubDate>Tue, 05 May 2026 13:43:59 GMT</pubDate>
    
    
      <image>
        <link>https://habr.com/ru/</link>
        <url>https://habrastorage.org/webt/ym/el/wk/ymelwk3zy1gawz4nkejl_-ammtc.png</url>
        <title>Хабр</title>
      </image>
    

    
      
        
    

  

  
  <item>
    <title><![CDATA[Пост @TonyAlt — Unity (+4) — N/P]]></title>
    <guid isPermaLink="true">https://habr.com/ru/posts/1025780/</guid>
    <link>https://habr.com/ru/posts/1025780/?utm_campaign=1025780&amp;utm_source=habrahabr&amp;utm_medium=rss</link>
    <description><![CDATA[<p><strong>Как разработчикам монетизировать свои игры в 2026?</strong></p><p>Всем привет! Хотели похвастаться очередным сложным, но очень важным шагом на пути к возрождению российского геймдева и заодно спросить мнения окружающих (да, мы всегда сначала делаем, потом думаем).</p><p>Традиционный подход подразумевает, что разработчик заключает договор с площадкой (Steam, VK Play, Itch и т.д.). Игрок покупает игру, и деньги идут на счёт платформы. После этого в определенные даты происходит выплаты на счета разработчиков за вычетом комиссий. Где-то больше, где-то меньше, где-то по-другому. Но смысл тот же. Этот подход позволяет, во-первых, брать комиссии, во-вторых, легче работать с возвратами и в-третьих, быстрее распознавать отмывание денег и мошенничество.</p><p>Мы решили использовать схему маркетплейсов, где каждый разработчик приходит со своим статусом (ООО, ИП, смз). Но приходит он в первую очередь не к нам, а к платёжным агрегаторам типа Юкасса, Робокасса, любая …касса. Одним словом, подключает себе интернет-эквайринг, такое делает любой банк. Банк ему даёт API для подключения, ID магазина, ключи для проведения оплат и всё, действуй.</p><p>Где здесь мы? Мы предоставляем бесплатный хостинг для игр. Сама площадка + страница игры + страница разработчика. Всё тоже самое что у itch[.]io. Заодно есть консоль разработчика, в которую добавляется всё больше и больше возможностей. Соответственно, в этой консоли разработчик указывает тот самый идентификатор магазина, суперсекретный ключ и дальше надеется на магию.</p><p>Если магия происходит, то наш скрипт подставляет его данные в другой скрипт, только уже от платёжного агрегатора. Игрок видит кнопку обычную кнопку оплаты и оплачивает, после чего денюжки магическим образом летят на счёт разработчика. На этом магия заканчивается, начинается то ли математика, то ли бухгалтерия (я в этом не силён, не шарю).</p><p>Опережу (почти) все вопросы и сразу отвечу:</p><p>Q: На что вы будете существовать если у вас комиссии 0%?</p><p>A: При покупке игры рядом есть еще кнопочка “поддержать платформу”, надеемся, что это сработает</p><p>Q: Вы делаете очередного убийцу стима?</p><p>A: Нет</p><p>Q: Это точно не развод?</p><p>A: Точно нет, чесслово</p><p>На остальные вопросы обязательно ответим. Так как это не реклама, то прямо указывать название площадки не буду, но подскажу, что наш канал <a href="https://t.me/dustore_official" rel="noopener noreferrer nofollow">https://t.me/dustore_official</a></p> <a href="https://habr.com/ru/posts/1025780/?utm_campaign=1025780&amp;utm_source=habrahabr&amp;utm_medium=rss">Читать дальше &rarr;</a>]]></description>
      
    <pubDate>Mon, 20 Apr 2026 18:05:32 GMT</pubDate>
    <dc:creator><![CDATA[TonyAlt]]></dc:creator>
      
      <category><![CDATA[публикация игр]]></category><category><![CDATA[разработка игр]]></category><category><![CDATA[монетизация игр]]></category>
  </item>
  

	
  

  

  

    

  

  
  <item>
    <title><![CDATA[Пост @MI1CTEP — Unity (+1) — N/P]]></title>
    <guid isPermaLink="true">https://habr.com/ru/posts/986578/</guid>
    <link>https://habr.com/ru/posts/986578/?utm_campaign=986578&amp;utm_source=habrahabr&amp;utm_medium=rss</link>
    <description><![CDATA[<p>Логика распространения точечного источника света в моей игре - Minecraft на Unity.</p><figure class="full-width "><img src="https://habrastorage.org/getpro/habr/upload_files/0c0/6cc/301/0c06cc3019633502adca4cc279273b0a.png" width="1898" height="860"></figure><pre><code class="cs">public sealed class ChunkLight
    {
        private readonly Queue&lt;Vector3Int&gt; _lightsQueue = new();
        private readonly int[,,] _blockIds;
        private readonly byte[,,] _blockLights;

        public void SetLamp(Vector3Int position, byte lightForce)
        {
            AddLightForNeighbors(position, lightForce);
            while(_lightsQueue.Count &gt; 0)
            {
                position = _lightsQueue.Dequeue();
                AddLightForNeighbors(position, _blockLights[position.x, position.y, position.z]);
            }
        }

        private void AddLightForNeighbors(Vector3Int position, byte lightForce)
        {
            lightForce -= 1;
            AddLight(position + Vector3Int.left, lightForce);
            AddLight(position + Vector3Int.right, lightForce);
            AddLight(position + Vector3Int.back, lightForce);
            AddLight(position + Vector3Int.forward, lightForce);
            AddLight(position + Vector3Int.down, lightForce);
            AddLight(position + Vector3Int.up, lightForce);
        }

        private void AddLight(Vector3Int position, byte lightForce)
        {
            if (_blockIds[position.x, position.y, position.z] != 0) return;

            if (lightForce &lt;= _blockLights[position.x, position.y, position.z]) return;

            _lightsQueue.Enqueue(position);
            _blockLights[position.x, position.y, position.z] = lightForce;
        }
    }</code></pre><p>Это упрощенный вариант кода, нет проверок на границы чанков, только чистая логика света. И представим <strong>_blockIds </strong>заполнен данными 0 и 1 (0 - нету блока, 1 - есть блок), а<br> <strong>_blockLights </strong>имеет значения от 0 до 15.</p><p><br>1. Блок света (Лампа) устанавливается в ячейку с координатами <strong>(x, y, z)</strong>, а сила его света <strong>lightForce </strong>= 15.<br>2. Перебираю соседние ячейки: (x - 1, y, z), (x + 1, y, z), (x, y - 1, z), (x, y + 2, z), (x, y, z - 1), (x, y, z + 1).<br>      2.1 Если в соседней ячейке есть блок, то он пропускается. И если <strong>lightForce </strong>внутри блока уже больше или равен присваиваемому <strong>lightForce</strong>, то блок пропускается.<br>      2.2 Если блока нет, то ячейке присваивается lightForce= 14. Так же эта ячейка добавляется в очередь <strong>_lightsQueue</strong>.<br>3. Запускаю цикл While и также перебираю блоки внутри <strong>_lightsQueue</strong>.<br><br>Если вам интересно следить за разработкой игры и влиять на саму игру, у меня есть&nbsp;<a href="https://t.me/mineOnTheUnity" rel="noopener noreferrer nofollow">телеграмм канал</a>.  </p> <a href="https://habr.com/ru/posts/986578/?utm_campaign=986578&amp;utm_source=habrahabr&amp;utm_medium=rss">Читать дальше &rarr;</a>]]></description>
      
    <pubDate>Mon, 19 Jan 2026 10:35:37 GMT</pubDate>
    <dc:creator><![CDATA[MI1CTEP]]></dc:creator>
      
      <category><![CDATA[unity]]></category><category><![CDATA[unity3d]]></category><category><![CDATA[юнити]]></category><category><![CDATA[разработка игр]]></category><category><![CDATA[майнкрафт]]></category><category><![CDATA[minecraft]]></category>
  </item>
  

	
  

  

  

    

  

  
  <item>
    <title><![CDATA[Пост @altea_dev — Unity (+2) — 08.07.2025 20:23]]></title>
    <guid isPermaLink="true">https://habr.com/ru/posts/926102/</guid>
    <link>https://habr.com/ru/posts/926102/?utm_campaign=926102&amp;utm_source=habrahabr&amp;utm_medium=rss</link>
    <description><![CDATA[<p><strong>Itch.io перестал работать на территории России (потеряло актуальность)</strong><br><br><strong>UPT: Работа восстановлена и в России</strong></p><p>itch.io - сайт для распространения инди-игр, сегодня утром подвергся ботнет атаке. Спустя несколько часов сайт восстановил свою работу везде... Кроме России.<br><br>На данный момент, сайта нет в <a href="https://eais.rkn.gov.ru/" rel="noopener noreferrer nofollow">перечне заблокированных ресурсов</a>.<br><br>Насколько долго это продлится и проделки ли это РКН - пока неизвестно</p> <a href="https://habr.com/ru/posts/926102/?utm_campaign=926102&amp;utm_source=habrahabr&amp;utm_medium=rss">Читать дальше &rarr;</a>]]></description>
      
    <pubDate>Tue, 08 Jul 2025 17:23:37 GMT</pubDate>
    <dc:creator><![CDATA[altea_dev]]></dc:creator>
      
      <category><![CDATA[инди-игры]]></category><category><![CDATA[инди-разработка]]></category><category><![CDATA[инди]]></category><category><![CDATA[блокировка]]></category><category><![CDATA[роскомнадзор]]></category>
  </item>
  

	
  

  

  

    

  

  
  <item>
    <title><![CDATA[Пост @maxgammer — AR и VR (+3) — 24.05.2025 13:29]]></title>
    <guid isPermaLink="true">https://habr.com/ru/posts/912442/</guid>
    <link>https://habr.com/ru/posts/912442/?utm_campaign=912442&amp;utm_source=habrahabr&amp;utm_medium=rss</link>
    <description><![CDATA[<p>Хотел поделится интересным опытом использования VR для задач обучения.  В данном случае Цифровой двойник буровой установки БУ 5000/320ЭУК-Я используется при ведении лекции в формате VR.</p><p>Видео:</p><p><a href="https://rutube.ru/video/54aa5419eaac2a5477a01d05be0bc003/" rel="noopener noreferrer nofollow">https://rutube.ru/video/54aa5419eaac2a5477a01d05be0bc003/</a></p><iframe id="68319f83a54631a83a967274" src="https://embedd.srv.habr.com/iframe/68319f83a54631a83a967274" class="embed_video embed__content" allowfullscreen="true"></iframe><p>Лекция — устное систематическое и последовательное изложение материала по какой-либо проблеме, методу, теме вопроса и т.д. 	Семинар — форма учебных практических занятий, при которой учащиеся (студенты) обсуждают сообщения, доклады и рефераты, выполненные ими по результатам учебных исследований под руководством преподавателя. В советской школе семинары предназначались для углубленного изучения различных дисциплин.</p><p>	Конечно, имитаторы/тренажеры являются только вспомогательным средством при проведении лекций или семинаров по техническим дисциплинам, там, где  необходима наглядная демонстрация промышленных объектов, оборудования, принципа его работы, протекающие процессы и т.&nbsp;д. Такие имитаторы имеют достаточно много преимуществ перед традиционными технологиями, такими как презентация, видеофильм и т.д., главным образом в силу того, что тренажером можно управлять, т.е. лектор может  производить демонстрацию «в реальном времени», т.е. управлять тем, что видят обучаемые. Если отдельно рассмотреть распределенные имитационные системы, то можно представить, например, следующую ситуацию...  </p><p>	Ведется «массовая» тренировка работы буровой установки, где участниками являются студенты различных кафедр. Присоединившись к этой системе, лектор может показать процесс в «реальном времени» или в необходимых временных промежутках, указать совершенные или совершаемые ошибки, работу оборудования, может сам совершать необходимые действия и т.&nbsp;д.</p><p>	В целом использование имитаторов при проведении лекций и практик можно сравнить с возможностью «перемещать» лекционную аудиторию вместе со всеми слушателями на любые интересующие лектора производственные участки, комплексы, заводы, самолеты и т.д.</p><p>Подробнее на <a href="https://habr.com/ru/articles/844810/" rel="noopener noreferrer nofollow">https://habr.com/ru/articles/844810/</a></p> <a href="https://habr.com/ru/posts/912442/?utm_campaign=912442&amp;utm_source=habrahabr&amp;utm_medium=rss">Читать дальше &rarr;</a>]]></description>
      
    <pubDate>Sat, 24 May 2025 10:29:34 GMT</pubDate>
    <dc:creator><![CDATA[maxgammer]]></dc:creator>
      
      <category><![CDATA[буровая установка]]></category><category><![CDATA[vr]]></category><category><![CDATA[обучение персонала]]></category><category><![CDATA[Виртуальная экскурсия]]></category>
  </item>
  

	
  

  

  

    

  

  
  <item>
    <title><![CDATA[Пост @Maggotya — Разработка игр (+1) — 25.12.2024 19:14]]></title>
    <guid isPermaLink="true">https://habr.com/ru/posts/869792/</guid>
    <link>https://habr.com/ru/posts/869792/?utm_campaign=869792&amp;utm_source=habrahabr&amp;utm_medium=rss</link>
    <description><![CDATA[<p><strong>Неоднозначный MVC: причины и следствия</strong></p><figure class="full-width "><img src="https://habrastorage.org/getpro/habr/upload_files/d7c/8b5/eb4/d7c8b5eb48576eaa7977b51015cc779e.png" width="1020" height="378"></figure><p><strong>Уровень материала:</strong> 🐥 #middle</p><p>Ранее <a href="https://t.me/aks2dio/67" rel="noopener noreferrer nofollow">я писал</a>, что прохожу обучение на курсе от <a href="https://t.me/+zryjQK5N_IM5NTgy" rel="noopener noreferrer nofollow">Unity Architect</a>. Недавно была тема, посвященная <code>MVC</code>. И упор был сделан не на очередной разбор очередной реализации, а на выяснение причин, почему существует такое разнообразие трактовок. Из этого вытекают и некоторые следствия, о которых не часто рассказывают, но которые находят место в практике.</p><p><strong>Про разнообразие подходов 🛠️ :</strong></p><p>Причина такого раздрая — «<em>так исторически сложилось</em>». Когда по принципу «<em>глухого телефона</em>» революционный много десятилетий назад подход дошёл до наших современных дней.</p><p>Подробнее с этим можно ознакомиться в длинном исследовательском материале из двух частей на Хабре: <a href="https://habr.com/ru/articles/321050/" rel="noopener noreferrer nofollow">#1</a> и <a href="https://habr.com/ru/articles/322700/" rel="noopener noreferrer nofollow">#2</a>. Текст объёмный и сложный. Но увлекательный. Для вдумчивого чтения (<em>а иначе смысла нет</em>) стоит заложить на обе статьи где-то 1 час.</p><p>А один из примеров реализации в геймдеве я шарил в <a href="https://t.me/aks2dio/71" rel="noopener noreferrer nofollow">этом посте</a>.</p><p><strong>Следствие 1️⃣:</strong></p><p><code>MVC</code> — это изначально история про взаимодействие с пользователем. Т. е. про UI. Соответственно, попытки затащить это в геймплей сделают из <code>MVC</code> не <code>MVC</code> (<em>и даже не обязательно какой-то </em><code>MVx</code>). Т. к. для удобства использования в геймплее эту штуку приходится адаптировать.</p><p><strong>Следствие 2️⃣:</strong></p><p>Как бы ни был «<em>приготовлен</em>» <code>MVC</code>, кто-то обязательно скажет, что это неправильно. Или это не <code>MVC</code>, а какой-нибудь другой <code>MVx</code>. Это бесконечные бессмысленные споры, стоящие на противоречивых источниках.</p><p>Чтобы не маячить красным платком перед «<em>искушённой</em>» публикой, можно отойти от общеизвестного нейминга. Соблюсти идею разделения визуала и бизнес-логики, но назвать это иначе. Особенно легко это делается в геймплее.</p><p>Ведь задача — спроектировать всё хорошо, а не сдать экзамен по «<em>эталонному соответствию канонам</em>». Тогда на нападки в виде «<em>но в </em><code>MVx</code><em> же...</em>» можно отвечать «<em>а это не </em><code>MVx</code>».</p><p><strong>Следствие 3️⃣:</strong></p><p>Эталонно <code>View</code> и <code>Controller</code> находятся на одном слое взаимодействия с пользователем. И в современных системах, где нет низкоуровневого кода по непосредственно рендерингу и обработке ввода, контроллер как-таковой не шибко нужен. Поэтому достаточно использовать только <code>Model</code> и <code>View</code>.</p><p>В качестве <code>Model</code> можно подготовить специальную прослойку, типа <code>Facade</code>, <code>Adapter</code> или <code>Mediator</code>, которая будет агрегировать внутри всю коммуникацию с необходимыми игровыми моделями и сервисами.</p><p>Например, нажалась кнопочка, медиатор из <code>WalletModel</code> снял монетки, в <code>StorageModel</code> положил конфетки, а у <code>AdService</code> запросил показ <code>InterstitialAd</code>.</p><p>В свою очередь <code>View</code> будет отвечать за всю логику представления (<em>кнопочки, формочки, генерация карточек, анимации прокрутки, заполнение прогресс-баров и пр.</em>) и передачу событий в <code>Mediator</code>.</p><p>Связку из <code>View</code> и <code>Mediator</code> я и в своей команде использую уже очень давно — это отлично себя показывает в проектах разных масштабов.</p><p>На каком-то из стримов K-Syndicate оговаривались, что используют двухуровневый шаблон и связующий слой тоже называют <code>Mediator</code>. Не нашёл, на каком именно, но у них был <a href="https://www.youtube.com/live/EC_lzaSpiuc?si=Cb2M1zQvO76cxvfc" rel="noopener noreferrer nofollow">большой классный стрим по MVx в целом</a>.</p><p>————————————</p><p>#unity #gamedev #development #architecture #mvc #mvx #геймдев #разработка #архитектура #рекомендация #статья #видео</p> <a href="https://habr.com/ru/posts/869792/?utm_campaign=869792&amp;utm_source=habrahabr&amp;utm_medium=rss">Читать дальше &rarr;</a>]]></description>
      
    <pubDate>Wed, 25 Dec 2024 16:14:24 GMT</pubDate>
    <dc:creator><![CDATA[aks2dio]]></dc:creator>
      
      <category><![CDATA[mvc]]></category><category><![CDATA[mvx]]></category><category><![CDATA[архитектура]]></category><category><![CDATA[паттерны]]></category><category><![CDATA[разработка игр]]></category><category><![CDATA[разработка]]></category><category><![CDATA[gamedev]]></category><category><![CDATA[unity]]></category><category><![CDATA[рекомендации]]></category>
  </item>
  

	
  

  

  

    

  

  
  <item>
    <title><![CDATA[Пост @Maggotya — Unity (+1) — 19.12.2024 06:12]]></title>
    <guid isPermaLink="true">https://habr.com/ru/posts/867826/</guid>
    <link>https://habr.com/ru/posts/867826/?utm_campaign=867826&amp;utm_source=habrahabr&amp;utm_medium=rss</link>
    <description><![CDATA[<p>👣 <strong>Инсайт про Unity AI Navigation</strong> 🧭</p><figure class="full-width "><img src="https://habrastorage.org/getpro/habr/upload_files/b7d/dec/b2b/b7ddecb2b808b08d88e7891eba38ed4a.jpg" width="2040" height="522"></figure><p><strong>Уровень материала:</strong> 🐣 #junior</p><p>Unity выпустили серию роликов о своей системе <a href="https://docs.unity3d.com/Packages/com.unity.ai.navigation@2.0/manual/" rel="noopener noreferrer nofollow">AI Navigation</a>. Вышло три видео (<a href="https://youtu.be/SMWxCpLvrcc?si=asl1zLoi5UDzflfh" rel="noopener noreferrer nofollow">#1</a>, <a href="https://youtu.be/vU6fCMC_IXA?si=JIXe2lCZBnhUZj49" rel="noopener noreferrer nofollow">#2, </a><a href="https://youtu.be/UGh4VSeKPNA?si=pUouF2BG-wg9GYpY" rel="noopener noreferrer nofollow">#3</a>). В целом, очень полезный для знакомства с системой контент — Unity вообще радуют последние годы в этом плане. Но меня во время просмотра посетила любопытная мысль 💡</p><p><em>AI Navigation</em> — это новое название пакета <em>NavMesh</em>. И у старых версий была неприятная особенность: строил навигацию он только на плоскости <code>XZ</code>. И неприятность в том, что для 2D-игр Unity использует плоскость <code>XY</code> 👾</p><p>Соответственно, 2D-игры ради навигации были вынуждены или искать/изобретать другие решения (<a href="https://assetstore.unity.com/packages/tools/behavior-ai/navigation2d-pathfinding-for-2d-games-35803" rel="noopener noreferrer nofollow">пример</a>), или использовать костыль: "<em>разворачивать</em>" свои спрайты так, чтобы они лежали на плоскости <code>XZ</code>. Были даже <a href="https://github.com/h8man/NavMeshPlus/wiki/HOW-TO" rel="noopener noreferrer nofollow">отдельные решения</a>, основанные на этом ухищрении 🩼<br>[<a href="https://gamedev.stackexchange.com/questions/117595/is-it-possible-to-use-nav-mesh-in-2d-game-in-unity" rel="noopener noreferrer nofollow">Форум с обсуждением</a>]</p><p>Т.к. уже давно не работал с 2D-проектами, не придавал этому значения. И сейчас смотрю на видео и вижу, как настраивается навигация на вертикальной стене, на плоскости <code>XY</code>. Похоже, Unity теперь умеет полноценно в навигацию для 2D. Кто в 2D уже пробовал и может подтвердить или опровергнуть ❓</p><p>—————————————</p><p>#unity #gamedev #development #pathfinding #navigation #insight #разработка #геймдев #навигация #поискпути #рекомендация #видео</p> <a href="https://habr.com/ru/posts/867826/?utm_campaign=867826&amp;utm_source=habrahabr&amp;utm_medium=rss">Читать дальше &rarr;</a>]]></description>
      
    <pubDate>Thu, 19 Dec 2024 03:12:13 GMT</pubDate>
    <dc:creator><![CDATA[aks2dio]]></dc:creator>
      
      <category><![CDATA[unity]]></category><category><![CDATA[gamedev]]></category><category><![CDATA[development]]></category><category><![CDATA[pathfinding]]></category><category><![CDATA[navigation]]></category><category><![CDATA[разработка игр]]></category><category><![CDATA[поиск пути]]></category><category><![CDATA[видео]]></category><category><![CDATA[рекомендация]]></category>
  </item>
  

	
  

  

  

    

  

  
  <item>
    <title><![CDATA[Пост @Maggotya — Unity (+1) — 15.12.2024 17:01]]></title>
    <guid isPermaLink="true">https://habr.com/ru/posts/866762/</guid>
    <link>https://habr.com/ru/posts/866762/?utm_campaign=866762&amp;utm_source=habrahabr&amp;utm_medium=rss</link>
    <description><![CDATA[<p>⏯️ Про создание реплеев для игр ⏺️</p><iframe id="675ee083ae0e5d6b3154d487" src="https://embedd.srv.habr.com/iframe/675ee083ae0e5d6b3154d487" class="embed_video embed__content" allowfullscreen="true"></iframe><p><strong>Уровень материала:</strong> 🐥 #middle</p><p>Хочу поделиться свежим полезным видео с реализацией системы реплеев. И дополнить своими комментариями. Однажды такая фича может потребоваться, и было бы здорово знать, в какую сторону начинать думать.</p><p><strong>🔎 Суть реплея:</strong></p><p>Чтобы иметь возможность когда-то потом восстановить игровой процесс, необходимо во время этого игрового процесса записывать минимальный набор данных, необходимый для восстановления игровой сессии в конкретный момент времени. Всегда.</p><p>Чем меньше данных, тем более легковесным получится файл реплея. А это важно, ведь его надо хранить (<em>ROM</em>), читать (<em>CPU</em>), загружать (<em>RAM</em>) и возможно даже передавать по сети (<em>Network</em>).</p><p>Например, если поворот персонажа полностью восстанавливается из его направления движения, то достаточно записать только направление движения. И записывать его только тогда, когда оно изменится, а не просто каждые N сек. И т.д. Всё, как при синхронизации данных в мультиплеере.</p><p>Лучший вариант, когда игра детерминирована (<em>т.е. при одинаковых вводных будет происходить всегда одно и то же</em>). Тогда достаточно только записывать инпут от игрока с отметками времени и во время реплея его применять. Минимум данных, но детерминированность имеется (<em>или хотя бы вообще возможна</em>) не во всех проектах. Особенно в Unity с её недетерминированной физикой.</p><p><strong>📐 Зачем нужен:</strong></p><p>Помимо понятной для игрока функции «<em>посмотреть, как эффектно я пробежал этот уровень»</em> или возможности разрешить спорные моменты в соревновательных играх, эта механика может быть полезна в не пользовательских сценариях. </p><ul><li><p>В сервисных играх реплей полезен для отправки сессии на валидацию сервером, чтобы уличить мошенника в нечестных манипуляциях. </p></li><li><p>Реплей может помочь с отладкой игры. Или с воспроизведением бага, который нашёл QA или какой-то игрок.</p></li><li><p>Реплеи, собираемые с игроков, можно анализировать и в результате совершенствовать пользовательский опыт (<em>или монетизационные подходы</em>).</p></li><li><p>По реплеям можно тестировать игровой баланс и прорабатывать его детальнее.</p></li><li><p>Реплеи можно использовать для создания маркетинговых материалов, т.к. на таком пост-продакшене можно усилить эффектность геймплея через иную настройку камеры, редактирование окружения, добавление всяческих эффектов и пр.</p></li></ul><p>Т.е. отсутствие возможности реплея в самой игре как механики ещё не гарантирует её отсутствия как части проекта. И это стоит учитывать при проектировании очередного проекта.</p><p>————————————</p><p>#gamedev #development #feature #tool #replay #геймдев #разработка #механика #рекомендация #видео</p> <a href="https://habr.com/ru/posts/866762/?utm_campaign=866762&amp;utm_source=habrahabr&amp;utm_medium=rss">Читать дальше &rarr;</a>]]></description>
      
    <pubDate>Sun, 15 Dec 2024 14:01:31 GMT</pubDate>
    <dc:creator><![CDATA[aks2dio]]></dc:creator>
      
      <category><![CDATA[unity]]></category><category><![CDATA[gamedev]]></category><category><![CDATA[development]]></category><category><![CDATA[feature]]></category><category><![CDATA[рекомендация]]></category><category><![CDATA[разработка игр]]></category><category><![CDATA[механика]]></category><category><![CDATA[инструмент]]></category><category><![CDATA[видео]]></category>
  </item>
  

	
  

  

  

    

  

  
  <item>
    <title><![CDATA[Пост @Maggotya — Разработка игр (+1) — N/P]]></title>
    <guid isPermaLink="true">https://habr.com/ru/posts/862668/</guid>
    <link>https://habr.com/ru/posts/862668/?utm_campaign=862668&amp;utm_source=habrahabr&amp;utm_medium=rss</link>
    <description><![CDATA[<p><strong>⏱ Природа DeltaTime ⏱</strong></p><div class="embed_link"><div class="embed__thumb" style="background-image: url(&quot;undefined&quot;);"></div><div class="embed__caption"><div class="embed__caption-title"><span>DeltaTime is a frame behind</span></div><a href="https://theorangeduck.com/page/delta-time-frame-behind" target="_blank" rel="noopener noreferrer nofollow" class="embed__caption-host">theorangeduck.com</a></div></div><p><strong>Уровень материала:</strong>&nbsp;🐣&nbsp;<a href="https://dtf.ru/tag/junior" rel="noopener noreferrer nofollow">#junior</a></p><p>Интересная&nbsp;<a href="https://theorangeduck.com/page/delta-time-frame-behind" rel="noopener noreferrer nofollow">коротенькая статья</a>&nbsp;про то, как устроено&nbsp;<code>deltaTime</code>&nbsp;в игровых движках. Никакого откровения нет, если внимательно прочитать само определение параметра в документации к движку (<em>например,&nbsp;</em><a href="https://docs.unity3d.com/ScriptReference/Time-deltaTime.html" rel="noopener noreferrer nofollow"><em>Unity</em></a>). Но всё равно найдутся те, для кого это может оказаться неожиданностью.</p><p>А не зная, как работает инструмент, можно получить неожиданное поведение при использовании.</p><p>Рекомендую также заглянуть в&nbsp;<strong>Appendix</strong>&nbsp;— там есть ссылки на более углубленные статьи: про нюансы отрисовки, общение между&nbsp;<em>CPU</em>&nbsp;и&nbsp;<em>GPU</em>, способы определения&nbsp;<code>deltaTime</code>, влияние параметра&nbsp;<code>maxQueuedFrames</code>&nbsp;и особенности работы при&nbsp;<code>vSync</code>.</p><p>Это контент посложнее, но, если заинтересует, уже будет понятно, в какую сторону рулить поисковые запросы и промпты для чат-ботов.</p><p><em>p.s. может потребоваться VPN.</em></p><p>—————————————<br><a href="https://dtf.ru/tag/gamedev" rel="noopener noreferrer nofollow">#gamedev</a>&nbsp;<a href="https://dtf.ru/tag/development" rel="noopener noreferrer nofollow">#development</a>&nbsp;<a href="https://dtf.ru/tag/graphics" rel="noopener noreferrer nofollow">#graphics</a>&nbsp;<a href="https://dtf.ru/tag/gpu" rel="noopener noreferrer nofollow">#gpu</a>&nbsp;<a href="https://dtf.ru/tag/cpu" rel="noopener noreferrer nofollow">#cpu</a>&nbsp;<a href="https://dtf.ru/tag/render" rel="noopener noreferrer nofollow">#render</a>&nbsp;<a href="https://dtf.ru/tag/%D1%80%D0%B0%D0%B7%D1%80%D0%B0%D0%B1%D0%BE%D1%82%D0%BA%D0%B0" rel="noopener noreferrer nofollow">#разработка</a>&nbsp;<a href="https://dtf.ru/tag/%D0%B3%D0%B5%D0%B9%D0%BC%D0%B4%D0%B5%D0%B2" rel="noopener noreferrer nofollow">#геймдев</a>&nbsp;<a href="https://dtf.ru/tag/%D1%81%D1%82%D0%B0%D1%82%D1%8C%D1%8F" rel="noopener noreferrer nofollow">#статья</a>&nbsp;<a href="https://dtf.ru/tag/%D1%80%D0%B5%D0%BA%D0%BE%D0%BC%D0%B5%D0%BD%D0%B4%D0%B0%D1%86%D0%B8%D1%8F" rel="noopener noreferrer nofollow">#рекомендация</a></p><p></p> <a href="https://habr.com/ru/posts/862668/?utm_campaign=862668&amp;utm_source=habrahabr&amp;utm_medium=rss">Читать дальше &rarr;</a>]]></description>
      
    <pubDate>Tue, 03 Dec 2024 07:06:23 GMT</pubDate>
    <dc:creator><![CDATA[aks2dio]]></dc:creator>
      
      <category><![CDATA[gamedev]]></category><category><![CDATA[unity]]></category><category><![CDATA[разработка игр]]></category><category><![CDATA[engine]]></category><category><![CDATA[движок]]></category><category><![CDATA[рекомендация]]></category>
  </item>
  

	
  

  

  

    

  

  
  <item>
    <title><![CDATA[Пост @Maggotya — Разработка игр (+1) — N/P]]></title>
    <guid isPermaLink="true">https://habr.com/ru/posts/862666/</guid>
    <link>https://habr.com/ru/posts/862666/?utm_campaign=862666&amp;utm_source=habrahabr&amp;utm_medium=rss</link>
    <description><![CDATA[<p><strong>🆓 Бесплатные курсы с YouTube 🆓</strong></p><figure class="full-width "><img src="https://habrastorage.org/getpro/habr/upload_files/643/b79/b54/643b79b54e8e30f41d5d6c2a89d5b65a.png" width="1280" height="627"></figure><p><strong>Уровень материала:</strong>&nbsp;🎓&nbsp;<a href="https://dtf.ru/tag/education" rel="noopener noreferrer nofollow">#education</a></p><p>На YouTube-канале CodeMonkey недавно вышло два больших видео, два бесплатных курса. Это&nbsp;<a href="https://api.dtf.ru/v2.8/redirect?to=https%3A%2F%2Fyoutu.be%2FqZpMX8Re_2Q%3Fsi%3DHcsWWE3qVc5G5Jsi&amp;postId=3191843" rel="noopener noreferrer nofollow">12-часовой курс по C#&nbsp;</a>и 7<a href="https://api.dtf.ru/v2.8/redirect?to=https%3A%2F%2Fyoutu.be%2F1gSnTlUjs-s%3Fsi%3DbGBH8x2_5iMXMe5K&amp;postId=3191843" rel="noopener noreferrer nofollow">-часовой курс по DOTS</a>. Я их ещё не просмотрел и не могу объективно оценить. Но если вдруг какой-то подобный контент был как раз нужен — возможно это оно. Ранее там же выходил ещё курс по&nbsp;<a href="https://api.dtf.ru/v2.8/redirect?to=https%3A%2F%2Fyoutu.be%2FI6kx-_KXNz4%3Fsi%3D-QlkZTn4zkvmtqyx&amp;postId=3191843" rel="noopener noreferrer nofollow">C# Intermediate</a>.</p><p><strong># Про C#:</strong></p><p>Видео по C# для меня интереса не представляет. Полистал, вроде всё адекватно, примеры нормальные. Видел пример реализации&nbsp;<a href="https://api.dtf.ru/v2.8/redirect?to=https%3A%2F%2Fstackoverflow.com%2Fa%2F8462&amp;postId=3191843" rel="noopener noreferrer nofollow">[Flags] для enum через побитовый сдвиг</a>&nbsp;— очень полезная штука, почему-то её при обучении любят игнорировать.</p><p><strong>✨ Про DOTS:</strong></p><p>А вот видео по DOTS я, пожалуй, затестирую лично, но уже в новом году — пока катастрофически загружен. Напомню, что DOTS — это не только ECS-фреймворк, но и целый стек технологий, часть которых доступно и вне ECS (<em>например,&nbsp;</em><a href="https://api.dtf.ru/v2.8/redirect?to=https%3A%2F%2Fdocs.unity3d.com%2FPackages%2Fcom.unity.burst%401.8%2Fmanual%2Findex.html&amp;postId=3191843" rel="noopener noreferrer nofollow"><em>Burst Compiler</em></a><em>&nbsp;и&nbsp;</em><a href="https://api.dtf.ru/v2.8/redirect?to=https%3A%2F%2Fdocs.unity3d.com%2FManual%2Fjob-system.html&amp;postId=3191843" rel="noopener noreferrer nofollow"><em>Job System</em></a>).</p><p>Из ECS-решений ранее я пробовал&nbsp;<a href="https://api.dtf.ru/v2.8/redirect?to=https%3A%2F%2Funity.com%2Fru%2Fecs&amp;postId=3191843" rel="noopener noreferrer nofollow">DOTS</a>,&nbsp;<a href="https://api.dtf.ru/v2.8/redirect?to=https%3A%2F%2Fgithub.com%2Fsschmid%2FEntitas&amp;postId=3191843" rel="noopener noreferrer nofollow">Entitas</a>,&nbsp;<a href="https://api.dtf.ru/v2.8/redirect?to=https%3A%2F%2Fgithub.com%2FLeopotam%2Fecslite&amp;postId=3191843" rel="noopener noreferrer nofollow">LeoECS</a>&nbsp;и&nbsp;<a href="https://api.dtf.ru/v2.8/redirect?to=https%3A%2F%2Fgithub.com%2Fscellecs%2Fmorpeh&amp;postId=3191843" rel="noopener noreferrer nofollow">Morpeh</a>&nbsp;— и последний мне нравится больше всех, пусть он и не самый производительный. А DOTS нравился меньше всех. Интересно будет посмотреть, что в нём изменилось и что он из себя представляет сейчас.</p><p><strong>📖 Про подобные курсы в целом:</strong></p><p>Помнится, год назад Сакутин тоже выпускал подобные YouTube-курсы&nbsp;<a href="https://api.dtf.ru/v2.8/redirect?to=https%3A%2F%2Fyoutu.be%2Fw8rRhAup4kg%3Fsi%3DRk_Nh8UQ1W0A5KPI&amp;postId=3191843" rel="noopener noreferrer nofollow">по C#&nbsp;</a>и&nbsp;<a href="https://api.dtf.ru/v2.8/redirect?to=https%3A%2F%2Fyoutu.be%2FYKf1Yo58RYA%3Fsi%3Dnl7h3W3Cr0rBr40u&amp;postId=3191843" rel="noopener noreferrer nofollow">по Unity</a>. Я их не смотрел, ничего сказать не могу. Видел только в чатах отзывы проходивших, что классическое «<em>обо всём и ни о чём</em>». Что, на самом деле, ожидаемо. 7–12 часов — это капля в море, особенно для Unity. Можно только успеть «<em>тегов</em>» набросать и по верхам пробежаться.</p><p>Так что это всё не более чем помощь в самообучении и практике. Только самостоятельное копошение в теме сможет чему-то научить. Не нужно ждать, что такие короткоформатные курсы смогут резко прокачать. Только подскажут и направят, не более.</p><p><strong>🔖 Рекомендация от себя:</strong></p><p>Пользуясь случаем, порекламлю мой любимый ресурс по C# (<em>и не только</em>) —&nbsp;<a href="https://api.dtf.ru/v2.8/redirect?to=https%3A%2F%2Fmetanit.com%2Fsharp%2F&amp;postId=3191843" rel="noopener noreferrer nofollow">Metanit</a>. Удобный, качественный, бесплатный, масштабный. Он не заменит всё на свете, но это очень хороший дополнительный ресурс, который удобно использовать параллельно с другими ресурсами и к которому удобно возвращаться потом.</p><p>Сам по нему учился, параллельно с кучей других профильных книг. В «<em>своё время</em>» выел там весь контент по C#. Пригодилось ли мне это?</p><ul><li><p><strong>С практической точки зрения:</strong>&nbsp;что повседневно не использую, то уже, конечно, не помню совершенно.</p></li><li><p><strong>С точки зрения эрудиции:</strong>&nbsp;в моменте, когда учишься, когда много белых пятен, такой широкий контекст помогает выстроить майндсет и осознать, что где, как и почему используется. А в последствии помогает решать проблемы более высокого порядка, чем простое написание кода.</p></li></ul><p>—————————————</p><p><a href="https://dtf.ru/tag/unity" rel="noopener noreferrer nofollow">#unity</a>&nbsp;<a href="https://dtf.ru/tag/gamedev" rel="noopener noreferrer nofollow">#gamedev</a>&nbsp;<a href="https://dtf.ru/tag/development" rel="noopener noreferrer nofollow">#development</a>&nbsp;<a href="https://dtf.ru/tag/ecs" rel="noopener noreferrer nofollow">#ecs</a>&nbsp;<a href="https://dtf.ru/tag/programming" rel="noopener noreferrer nofollow">#programming</a>&nbsp;<a href="https://dtf.ru/tag/csharp" rel="noopener noreferrer nofollow">#csharp</a>&nbsp;<a href="https://dtf.ru/tag/code" rel="noopener noreferrer nofollow">#code</a>&nbsp;<a href="https://dtf.ru/tag/%D1%80%D0%B0%D0%B7%D1%80%D0%B0%D0%B1%D0%BE%D1%82%D0%BA%D0%B0" rel="noopener noreferrer nofollow">#разработка</a>&nbsp;<a href="https://dtf.ru/tag/%D0%B3%D0%B5%D0%B9%D0%BC%D0%B4%D0%B5%D0%B2" rel="noopener noreferrer nofollow">#геймдев</a>&nbsp;<a href="https://dtf.ru/tag/%D0%BE%D0%B1%D1%83%D1%87%D0%B5%D0%BD%D0%B8%D0%B5" rel="noopener noreferrer nofollow">#обучение</a>&nbsp;<a href="https://dtf.ru/tag/%D0%BE%D0%B1%D1%80%D0%B0%D0%B7%D0%BE%D0%B2%D0%B0%D0%BD%D0%B8%D0%B5" rel="noopener noreferrer nofollow">#образование</a>&nbsp;<a href="https://dtf.ru/tag/%D0%BA%D1%83%D1%80%D1%81%D1%8B" rel="noopener noreferrer nofollow">#курсы</a>&nbsp;<a href="https://dtf.ru/tag/%D0%BF%D1%80%D0%BE%D0%B3%D1%80%D0%B0%D0%BC%D0%BC%D0%B8%D1%80%D0%BE%D0%B2%D0%B0%D0%BD%D0%B8%D0%B5" rel="noopener noreferrer nofollow">#программирование</a>&nbsp;<a href="https://dtf.ru/tag/%D1%80%D0%B5%D0%BA%D0%BE%D0%BC%D0%B5%D0%BD%D0%B4%D0%B0%D1%86%D0%B8%D1%8F" rel="noopener noreferrer nofollow">#рекомендация</a></p> <a href="https://habr.com/ru/posts/862666/?utm_campaign=862666&amp;utm_source=habrahabr&amp;utm_medium=rss">Читать дальше &rarr;</a>]]></description>
      
    <pubDate>Sun, 01 Dec 2024 10:05:14 GMT</pubDate>
    <dc:creator><![CDATA[aks2dio]]></dc:creator>
      
      <category><![CDATA[unity]]></category><category><![CDATA[gamedev]]></category><category><![CDATA[образование]]></category><category><![CDATA[обучение]]></category><category><![CDATA[рекомендация]]></category><category><![CDATA[разработка игр]]></category>
  </item>
  

	
  

  

  

    

  

  
  <item>
    <title><![CDATA[Пост @Maggotya — Разработка игр (+1) — 30.11.2024 16:13]]></title>
    <guid isPermaLink="true">https://habr.com/ru/posts/862664/</guid>
    <link>https://habr.com/ru/posts/862664/?utm_campaign=862664&amp;utm_source=habrahabr&amp;utm_medium=rss</link>
    <description><![CDATA[<p><strong>📝 Заметка про шорткаты в Rider и Unity 📝</strong></p><figure class="full-width "><img src="https://habrastorage.org/getpro/habr/upload_files/d23/8a8/f01/d238a8f012502e83211ee9bd2d4b831d.png" width="2040" height="800"></figure><p><strong>Уровень материала:</strong>&nbsp;🐣 #junior</p><p>Кто из лагеря Visual Studio уже успел попробовать&nbsp;<a href="https://t.me/aks2dio/72" rel="noopener noreferrer nofollow">теперь уже бесплатную версию Rider</a>? Внутри много интересного: тесная интеграция с движками, шустрый и настраиваемый анализатор кода, полезные подсказки и автодополнения, генератор кода, мощный отладчик и&nbsp;<a href="https://api.dtf.ru/v2.8/redirect?to=https%3A%2F%2Fwww.jetbrains.com%2Frider%2Fcompare%2Frider-vs-visual-studio%2F&amp;postId=3186048" rel="noopener noreferrer nofollow">всякое другое</a>.</p><p>Даже простое знакомство с настройками может затянуться не на один час (<em>при этом они удобно скомпонованы, и поиск по ним работает отлично</em>). Но что важно — у Rider очень гибкая система шорткатов и хоткеев.</p><p>❓ Зачем это нужно?&nbsp;<strong>Для удобства.</strong>&nbsp;Конечно, для эффективности тоже. Но главное — для удобства. Нажатие на клавиши значительно быстрее, чем аналогичное действие совершённое мышкой. И требует меньше внимания. Мышку нужно перехватить, передвинуть, навести на меню, потом на вложенное меню, кликнуть и вернуть руку обратно (<em>если нет навыка однорукой печати</em>).</p><p>Rider позволяет полностью отказаться от мыши и сосредоточиться на работе. Захотел что-то сделать – стукнул пальцами и моментально увидел результат. При доведении до автоматизма, это превращается в настоящую магию, как-будто IDE управляется силой мысли. И это доставляет определённый кайф от работы.</p><p>Особенно ярко это раскрывается при рефакторинге кода. Во многих IDE есть куча автоматизаций для этого процесса, которые невероятно облегчают жизнь разработчику. И шорткаты превращают это всё в увлекательный процесс грациозного и эффективного дирижирования кодом.</p><p>🎥 Приложу видео, которые могут помочь познакомиться с основными возможностями. Они не очень свежие, но всё ещё актуальные, только с тех времён всё стало ещё лучше, и возможностей прибавилось.</p><ul><li><p><strong>Горячие клавиши Rider:</strong>&nbsp;<a href="https://api.dtf.ru/v2.8/redirect?to=https%3A%2F%2Fyoutu.be%2FhQxC6QTHOc8%3Fsi%3D6eDlbV4X9_yzsYib&amp;postId=3186048" rel="noopener noreferrer nofollow">K-Syndicate</a></p></li><li><p><strong>Эффективная разработка в Rider IDE:</strong>&nbsp;<a href="https://api.dtf.ru/v2.8/redirect?to=https%3A%2F%2Fyoutu.be%2FT0UKv_ACqOo%3Fsi%3DR67-N1m1B2Qh0A_6&amp;postId=3186048" rel="noopener noreferrer nofollow">DevGamm 2018</a></p></li><li><p><strong>Shortcuts, Editing, and Completion:</strong>&nbsp;<a href="https://api.dtf.ru/v2.8/redirect?to=https%3A%2F%2Fyoutu.be%2FztQ9ez1bFNg%3Fsi%3DNaWFEjRlxFlQLt2B&amp;postId=3186048" rel="noopener noreferrer nofollow">Rider Essentials</a></p></li><li><p><strong>An Introduction to JetBrains Rider:</strong>&nbsp;<a href="https://api.dtf.ru/v2.8/redirect?to=https%3A%2F%2Fyoutu.be%2FDZvqGC0PPGA%3Fsi%3DApNKxuN-ZBAea4Bx&amp;postId=3186048" rel="noopener noreferrer nofollow">Dan Clarke</a></p></li></ul><p>⚙ Рекомендую также заглянуть в настройках во&nbsp;<a href="https://api.dtf.ru/v2.8/redirect?to=https%3A%2F%2Fwww.jetbrains.com%2Fhelp%2Frider%2FConfiguring_Keyboard_and_Mouse_Shortcuts.html&amp;postId=3186048" rel="noopener noreferrer nofollow">вкладку Keymap</a>, где можно через поиск найти практически любое действие в IDE, которому можно назначить свой шорткат. Что-то часто приходится делать мышкой? Или на видео показывают полезный шорткат, который у тебя не срабатывает? Зайди в Keymap, найди нужное действие и назначь желаемую комбинацию.</p><p>Если запоминать комбинации не хочется, достаточно запомнить название операции и использовать&nbsp;<a href="https://api.dtf.ru/v2.8/redirect?to=https%3A%2F%2Fwww.jetbrains.com%2Fhelp%2Frider%2FNavigating_to_Action.html&amp;postId=3186048" rel="noopener noreferrer nofollow">поиск по Action'ам</a>. Также в запоминании шорткатов может помочь плагин&nbsp;<a href="https://api.dtf.ru/v2.8/redirect?to=https%3A%2F%2Fplugins.jetbrains.com%2Fplugin%2F9792-key-promoter-x%2F&amp;postId=3186048" rel="noopener noreferrer nofollow">Key Promoter X</a>&nbsp;(<em>или может раздражать, если шорткаты игнорировать</em>).</p><p>🤹 Шорткаты есть во всех программах. И везде они помогают сделать работу более комфортной (<em>и эффективной</em>). Не только в Rider и не только в IDE стоит уделять этому внимание. В т.ч. горячие клавиши есть и в Unity. И я рекомендую посмотреть их&nbsp;<a href="https://api.dtf.ru/v2.8/redirect?to=https%3A%2F%2Fyoutu.be%2FDSdtOrLlyyo%3Fsi%3DbvJyfDX_J-1PpvEQ&amp;postId=3186048" rel="noopener noreferrer nofollow">официальный тутор</a>. Уверен, что ты сможешь узнать что-то новое, потому что в Unity далеко не все полезные возможности «лежат на поверхности». Также у них есть&nbsp;<a href="https://api.dtf.ru/v2.8/redirect?to=https%3A%2F%2Fdocs.unity3d.com%2F2022.3%2FDocumentation%2FManual%2FUnityHotkeys.html&amp;postId=3186048" rel="noopener noreferrer nofollow">Shortcuts Manager</a>, куда стоит периодически заглядывать.</p><p>—————————————————</p><p><a href="https://dtf.ru/tag/gamedev" rel="noopener noreferrer nofollow">#gamedev</a>&nbsp;<a href="https://dtf.ru/tag/development" rel="noopener noreferrer nofollow">#development</a>&nbsp;<a href="https://dtf.ru/tag/rider" rel="noopener noreferrer nofollow">#rider</a>&nbsp;<a href="https://dtf.ru/tag/unity" rel="noopener noreferrer nofollow">#unity</a>&nbsp;<a href="https://dtf.ru/tag/code" rel="noopener noreferrer nofollow">#code</a>&nbsp;<a href="https://dtf.ru/tag/programming" rel="noopener noreferrer nofollow">#programming</a>&nbsp;<a href="https://dtf.ru/tag/hotkey" rel="noopener noreferrer nofollow">#hotkey</a>&nbsp;<a href="https://dtf.ru/tag/shortcut" rel="noopener noreferrer nofollow">#shortcut</a>&nbsp;<a href="https://dtf.ru/tag/%D1%85%D0%BE%D1%82%D0%BA%D0%B5%D0%B8" rel="noopener noreferrer nofollow">#хоткеи</a>&nbsp;<a href="https://dtf.ru/tag/%D1%88%D0%BE%D1%80%D1%82%D0%BA%D0%B0%D1%82%D1%8B" rel="noopener noreferrer nofollow">#шорткаты</a>&nbsp;<a href="https://dtf.ru/tag/%D0%B3%D0%BE%D1%80%D1%8F%D1%87%D0%B8%D0%B5%D0%BA%D0%BB%D0%B0%D0%B2%D0%B8%D1%88%D0%B8" rel="noopener noreferrer nofollow">#горячиеклавиши</a>&nbsp;<a href="https://dtf.ru/tag/%D1%80%D0%B0%D0%B7%D1%80%D0%B0%D0%B1%D0%BE%D1%82%D0%BA%D0%B0" rel="noopener noreferrer nofollow">#разработка</a>&nbsp;<a href="https://dtf.ru/tag/%D0%B3%D0%B5%D0%B9%D0%BC%D0%B4%D0%B5%D0%B2" rel="noopener noreferrer nofollow">#геймдев</a>&nbsp;<a href="https://dtf.ru/tag/%D0%BA%D0%BE%D0%B4" rel="noopener noreferrer nofollow">#код</a>&nbsp;<a href="https://dtf.ru/tag/%D1%80%D0%B5%D0%BA%D0%BE%D0%BC%D0%B5%D0%BD%D0%B4%D0%B0%D1%86%D0%B8%D1%8F" rel="noopener noreferrer nofollow">#рекомендация</a>&nbsp;<a href="https://dtf.ru/tag/%D0%B2%D0%B8%D0%B4%D0%B5%D0%BE" rel="noopener noreferrer nofollow">#видео</a></p> <a href="https://habr.com/ru/posts/862664/?utm_campaign=862664&amp;utm_source=habrahabr&amp;utm_medium=rss">Читать дальше &rarr;</a>]]></description>
      
    <pubDate>Sat, 30 Nov 2024 13:13:41 GMT</pubDate>
    <dc:creator><![CDATA[aks2dio]]></dc:creator>
      
      <category><![CDATA[unity]]></category><category><![CDATA[gamedev]]></category><category><![CDATA[разработка игр]]></category><category><![CDATA[shortcut]]></category><category><![CDATA[hotkey]]></category><category><![CDATA[горячие клавиши]]></category><category><![CDATA[программирование]]></category>
  </item>
  

	
  

  

  

    

  

  
  <item>
    <title><![CDATA[Пост @Maggotya — Разработка игр — 28.11.2024 19:04]]></title>
    <guid isPermaLink="true">https://habr.com/ru/posts/862172/</guid>
    <link>https://habr.com/ru/posts/862172/?utm_campaign=862172&amp;utm_source=habrahabr&amp;utm_medium=rss</link>
    <description><![CDATA[<p><strong>Про хранение конфигураций уровня и не только</strong></p><p><strong>Уровень материала:</strong>&nbsp;🐣&nbsp;<a href="https://dtf.ru/tag/junior" rel="noopener noreferrer nofollow">#junior</a><br><em>&lt;тестирую раздел Посты. этот материал уже можно было встретить в моём </em><a href="https://t.me/aks2dio" rel="noopener noreferrer nofollow"><em>Telegram</em></a><em>&gt;</em></p><p>В рекомендации отправляю видео, которое показывает два любопытных подхода:</p><p>1. Хранение конфигурации уровня в&nbsp;<em>ScriptableObject</em>, а не в отдельной сцене.<br>2. Анимированное появление тайлов уровня.</p><p>И внутри есть ряд ещё более мелких интересных деталей.</p><iframe id="6748953708571a136e03e776" src="https://embedd.srv.habr.com/iframe/6748953708571a136e03e776" class="embed_video embed__content" allowfullscreen="true"></iframe><p><strong>📋 1. Хранение конфигурации уровня:</strong></p><p>С этим я столкнулся в самом начале своей карьеры, т.к. начал с матч-3 направления, которое славится большим количеством уровней. По неопытности я хранил каждый настроенный уровень в отдельной сцене. Это привело к тому, что 10 таких уровней раздули билд без существенного контента до&nbsp;<strong>100Мб</strong>.</p><p>Поизучав предметную область подробнее, я пришёл к тому, чтобы для уровня иметь одну сцену, а её наполнение формировать по данным из некоторого файла. Я использовал&nbsp;<em>XML</em>, т.к. тогда это было популярно (позднее для настройки уровня был подключен&nbsp;<a href="https://api.dtf.ru/v2.8/redirect?to=https%3A%2F%2Fwww.mapeditor.org%2F&amp;postId=2987475" rel="noopener noreferrer nofollow">Tiled</a>, который как раз умел экспортировать в&nbsp;<em>XML</em>). Билд тут же сдулся до&nbsp;<strong>20Мб</strong>. А подход подарил невероятное количество всяческих бенефитов.</p><p><em>ScriptableObject&nbsp;</em>— это тоже некоторый файл с данными (а точнее&nbsp;<em>YAML</em>&nbsp;или&nbsp;<em>Binary</em>, в зависимости от настроек Unity), который Unity умеет красиво отрисовывать в инспекторе.</p><p>А вот&nbsp;<a href="https://api.dtf.ru/v2.8/redirect?to=https%3A%2F%2Fassetstore.unity.com%2Fpackages%2Ftools%2Futilities%2Flevel-build-optimization-with-json-241495&amp;postId=2987475" rel="noopener noreferrer nofollow">пример ассета</a>&nbsp;(<em>с ёмким описанием</em>), который конвертирует уровень в&nbsp;<em>JSON</em>.</p><p><strong>🎲 2. Анимированное появление тайлмапа:</strong></p><p>Если уровень строится из тайлов, то это отличная возможность за "дёшево" сделать его эффектное появление. Например, как в видео, от точки позиции игрока плавно появить все тайлики в порядке удаления. Также можно и в целом оживить тайловое окружение, реагируя на разнообразные действия игрока.</p><p><strong>✨ 3. Полезные мелочи:</strong></p><p>В видео можно подглядеть:</p><ul><li><p>Как удалять элементы из списка, чтобы в&nbsp;<em>for</em>&nbsp;не делать лишних декрементов и в&nbsp;<em>foreach</em>&nbsp;не получить исключение&nbsp;<em>InvalidOperationException “Collection was modified”</em>. Подробнее про это можно также почитать в&nbsp;<a href="https://api.dtf.ru/v2.8/redirect?to=https%3A%2F%2Fblog.magnusmontin.net%2F2015%2F02%2F28%2Fenumerating-collections-that-change-in-csharp%2F&amp;postId=2987475" rel="noopener noreferrer nofollow">этом материале</a>.</p></li><li><p>Использование&nbsp;<em>sqrMagnitude</em>&nbsp;при сравнении дистанций для оптимизации вычислений. Про сравнение с обычным&nbsp;<em>magnitude</em>&nbsp;—&nbsp;<a href="https://api.dtf.ru/v2.8/redirect?to=https%3A%2F%2Fdaveoh.wordpress.com%2F2013%2F05%2F02%2Funity3d-vector3-magnitude-vs-sqrmagnitude%2F&amp;postId=2987475" rel="noopener noreferrer nofollow">тут</a>&nbsp;(<em>я тоже проводил подобные замеры: данные всё ещё актуальны</em>).</p></li><li><p>Как оформлять&nbsp;<em>Coroutine</em>&nbsp;для анимаций: нейминг, аргументы, содержание.</p></li><li><p>Использование&nbsp;<em>AnimationCurve</em>&nbsp;для контроля плавности анимации.</p></li><li><p>Использование&nbsp;<em>Lerp</em>&nbsp;для реализации анимации.</p></li></ul><p>—————————————</p><p><a href="https://dtf.ru/tag/gamedev" rel="noopener noreferrer nofollow">#gamedev</a>&nbsp;<a href="https://dtf.ru/tag/development" rel="noopener noreferrer nofollow">#development</a>&nbsp;<a href="https://dtf.ru/tag/animation" rel="noopener noreferrer nofollow">#animation</a>&nbsp;<a href="https://dtf.ru/tag/scene" rel="noopener noreferrer nofollow">#scene</a>&nbsp;<a href="https://dtf.ru/tag/loading" rel="noopener noreferrer nofollow">#loading</a>&nbsp;<a href="https://dtf.ru/tag/%D0%B3%D0%B5%D0%B9%D0%BC%D0%B4%D0%B5%D0%B2" rel="noopener noreferrer nofollow">#геймдев</a>&nbsp;<a href="https://dtf.ru/tag/%D1%80%D0%B0%D0%B7%D1%80%D0%B0%D0%B1%D0%BE%D1%82%D0%BA%D0%B0" rel="noopener noreferrer nofollow">#разработка</a>&nbsp;<a href="https://dtf.ru/tag/%D0%B0%D0%BD%D0%B8%D0%BC%D0%B0%D1%86%D0%B8%D0%B8" rel="noopener noreferrer nofollow">#анимации</a>&nbsp;<a href="https://dtf.ru/tag/%D0%B7%D0%B0%D0%B3%D1%80%D1%83%D0%B7%D0%BA%D0%B0" rel="noopener noreferrer nofollow">#загрузка</a>&nbsp;<a href="https://dtf.ru/tag/%D1%80%D0%B5%D0%BA%D0%BE%D0%BC%D0%B5%D0%BD%D0%B4%D0%B0%D1%86%D0%B8%D1%8F" rel="noopener noreferrer nofollow">#рекомендация</a>&nbsp;<a href="https://dtf.ru/tag/%D0%B2%D0%B8%D0%B4%D0%B5%D0%BE" rel="noopener noreferrer nofollow">#видео</a></p><p></p> <a href="https://habr.com/ru/posts/862172/?utm_campaign=862172&amp;utm_source=habrahabr&amp;utm_medium=rss">Читать дальше &rarr;</a>]]></description>
      
    <pubDate>Thu, 28 Nov 2024 16:04:44 GMT</pubDate>
    <dc:creator><![CDATA[aks2dio]]></dc:creator>
      
      <category><![CDATA[gamedev]]></category><category><![CDATA[development]]></category><category><![CDATA[уровни]]></category><category><![CDATA[тайлы]]></category><category><![CDATA[конфигурация]]></category><category><![CDATA[игры]]></category><category><![CDATA[разработка игр]]></category>
  </item>
  

	
  

  

  

    

  

  
  <item>
    <title><![CDATA[Пост @dev_family — React Native — 11.10.2024 13:40]]></title>
    <guid isPermaLink="true">https://habr.com/ru/posts/849984/</guid>
    <link>https://habr.com/ru/posts/849984/?utm_campaign=849984&amp;utm_source=habrahabr&amp;utm_medium=rss</link>
    <description><![CDATA[<p>Пишете на React Native и хотите добавить в приложение крутые игровые механики или AR/VR-функции? Это легко сделать с помощью Unity. Мы расписали подробно все этапы и разобрали возможные проблемы. Переходите по ссылке и читайте пошаговую инструкцию для интеграции 👉 <a href="https://habr.com/ru/articles/848100/" rel="noopener noreferrer nofollow">https://habr.com/ru/articles/848100/</a></p><p></p> <a href="https://habr.com/ru/posts/849984/?utm_campaign=849984&amp;utm_source=habrahabr&amp;utm_medium=rss">Читать дальше &rarr;</a>]]></description>
      
    <pubDate>Fri, 11 Oct 2024 10:40:13 GMT</pubDate>
    <dc:creator><![CDATA[dev_family]]></dc:creator>
      
      <category><![CDATA[react native]]></category><category><![CDATA[mobile development]]></category><category><![CDATA[gamedevelopment]]></category><category><![CDATA[unity]]></category>
  </item>
  

	
  

  

  

    

  

  
  <item>
    <title><![CDATA[Пост @mitay-walle — Разработка игр (+1) — 29.09.2024 15:38]]></title>
    <guid isPermaLink="true">https://habr.com/ru/posts/846858/</guid>
    <link>https://habr.com/ru/posts/846858/?utm_campaign=846858&amp;utm_source=habrahabr&amp;utm_medium=rss</link>
    <description><![CDATA[<p>Как добавить кастомные поля в инспектор любого AssetImporter</p><figure class="full-width "><img src="https://habrastorage.org/getpro/habr/upload_files/3c2/12c/5d7/3c212c5d725177c05a4721aa7b4333e4.png" alt="ModelImporter с полем Enum, сохраняемым для каждой модели" title="ModelImporter с полем Enum, сохраняемым для каждой модели" width="807" height="1314"><div><figcaption>ModelImporter с полем Enum, сохраняемым для каждой модели</figcaption></div></figure><ul><li><p><a href="https://docs.unity3d.com/Manual/editor-CustomEditors.html" rel="noopener noreferrer nofollow">пишем стандартный CustomEditor(AssetImporter)</a></p></li><li><p><a href="https://docs.unity3d.com/ScriptReference/Editor.CreateEditor.html" rel="noopener noreferrer nofollow">создаем копию встроенного Editor'a</a>, и вызываем из него OnInspectorGUI</p></li><li><p>далее рисуем наши поля</p></li><li><p>для сохранения используем plain class сохранённый с помощью <a href="https://docs.unity3d.com/ScriptReference/JsonUtility.html" rel="noopener noreferrer nofollow">JsonUtility</a> в поле <a href="https://docs.unity3d.com/ScriptReference/AssetImporter-userData.html" rel="noopener noreferrer nofollow">AssetImporter.userData (string)</a></p></li><li><p>вызываем <a href="https://docs.unity3d.com/ScriptReference/AssetImporter.SaveAndReimport.html" rel="noopener noreferrer nofollow">AssetImporter.SaveAndReimport</a> чтобы применить изменения</p></li></ul><p>Здесь базовый класс, который я использую, чтобы добавить поля в любой встроенный инспектор: <a href="https://github.com/mitay-walle/CustomOverrideEditor/blob/main/CustomOverrideEditor.cs" rel="noopener noreferrer nofollow">GitHub | CustomOverrideEditor</a></p><p>Может быть непросто показать всё, что изначально рисовал встроенный инспектор (например, в примере с ModelImporter, у меня исчезли кнопки «Apply/Revert»), но имея доступ к декомпилированному коду, через рефлексию я успешно все отрисовал</p><p>В ваших пользовательских полях вам также придется <a href="https://docs.unity3d.com/ScriptReference/EditorGUI-showMixedValue.html" rel="noopener noreferrer nofollow">обрабатывать mixed values вручную</a>, потому что у вас нет общего <a href="https://docs.unity3d.com/ScriptReference/SerializedObject.html" rel="noopener noreferrer nofollow">SerializedObj<em>ect</em></a><em>. Вы можете создать ScriptableObject для каждого AssetImporter.userData, но это может крайне медленно, при выделении множества объектов одновременно</em></p><p>Код полной реализации с картинки-примера, ModelImporter с полем Enum, сохраняемым для каждой модели: <a href="https://gist.github.com/mitay-walle/9726e90ff6ab6704fb3a788893b98a37" rel="noopener noreferrer nofollow">GitHub Gist | Source code</a><br> </p><p></p> <a href="https://habr.com/ru/posts/846858/?utm_campaign=846858&amp;utm_source=habrahabr&amp;utm_medium=rss">Читать дальше &rarr;</a>]]></description>
      
    <pubDate>Sun, 29 Sep 2024 12:38:24 GMT</pubDate>
    <dc:creator><![CDATA[mitay-walle]]></dc:creator>
      
      <category><![CDATA[asset pipeline]]></category><category><![CDATA[import]]></category><category><![CDATA[inspector]]></category><category><![CDATA[customization]]></category>
  </item>
  

	
  

  

  

    

  

  
  <item>
    <title><![CDATA[Пост @dan_sw — Unity (+2) — 25.08.2024 15:54]]></title>
    <guid isPermaLink="true">https://habr.com/ru/posts/838394/</guid>
    <link>https://habr.com/ru/posts/838394/?utm_campaign=838394&amp;utm_source=habrahabr&amp;utm_medium=rss</link>
    <description><![CDATA[<p><strong>Модификация UI элементов не в основном потоке Unity</strong></p><p>В настоящее время я активно изучаю и использую Unity для разработки проекта с <a href="https://en.m.wikipedia.org/wiki/Augmented_reality" rel="noopener noreferrer nofollow">AR</a> и столкнулся с классической проблемой "модификации UI элементов не в основном потоке" - так делать нельзя, поскольку средой будет вызвано исключение UnityException.</p><p>В рамках изучения этого вопроса я далеко не сразу нашёл решение. Передо мной стояла задача сделать обработку сообщения, получаемого по каналу связи через WebSocket, изменив при этом некоторые UI элементы. Обработка происходит не в основном потоке.</p><p>Через некоторое время я наткнулся на <a href="https://qna.habr.com/q/1219230" rel="noopener noreferrer nofollow">одно из возможных решений</a> этой проблемы через очередь задач, которая решает данную проблему:</p><pre><code class="cs">// Экземпляр WebSocket
private WebSocket _ws;

// Очередь команд для обработки
private readonly ConcurrentQueue&lt;Action&gt; _actions = new ConcurrentQueue&lt;Action&gt;();

void Start()
{
    // ...
    ConnectWebSocket();
}

void ConnectWebSocket()
{
    // ...
  
    // Добавление обработчика ответа от сервера
    _ws.OnMessage += OnMessage;
  
    // ...
}

void Update()
{
  // ...
  while (_actions.Count &gt; 0)
  {
    if (_actions.TryDequeue(out var action))
    {
      // Выполнение задачи из очереди
      action?.Invoke();
    }
  }
}

void OnMessage(object sender, MessageEventArgs e)
{
  // Добавление команды в очередь
  _actions.Enqueue(() =&gt; MessageHandler(sender, e));
}

void MessageHandler(object sender, MessageEventArgs e)
{
  // Данный блок кода выполняется в основном (main) потоке
}</code></pre><p></p> <a href="https://habr.com/ru/posts/838394/?utm_campaign=838394&amp;utm_source=habrahabr&amp;utm_medium=rss">Читать дальше &rarr;</a>]]></description>
      
    <pubDate>Sun, 25 Aug 2024 12:54:40 GMT</pubDate>
    <dc:creator><![CDATA[dan_sw]]></dc:creator>
      
      <category><![CDATA[unity]]></category><category><![CDATA[websocket]]></category><category><![CDATA[c#]]></category><category><![CDATA[concurrent queue]]></category><category><![CDATA[ui]]></category>
  </item>
  

	
  

  

  

    

  

  
  <item>
    <title><![CDATA[Пост @Darell_Ldark — Godot (+4) — 23.06.2024 15:29]]></title>
    <guid isPermaLink="true">https://habr.com/ru/posts/823774/</guid>
    <link>https://habr.com/ru/posts/823774/?utm_campaign=823774&amp;utm_source=habrahabr&amp;utm_medium=rss</link>
    <description><![CDATA[<p>Игровые движки и HTML5: а что по размеру билдов?</p><p>На рынке игровых движков полно вариантов на любой вкус и цвет, начиная от Open Source решений и заканчивая огромными коммерческими комбайнами. Большое количество игровых движков поддерживают сборку проекта для веб-платформ. Но от движка к движку различается итоговый размер собранного проекта. И это может влиять очень критично - не все платформы дистрибуции готовы хостить веб-проекты сами, а если и готовы, то они часто имеют ограничение на размер проекта.<br><br>В связи с этим решил посмотреть, а что по размеру сборок у основных игроков на рынке?<br><br>Тестовая сцена влючает в себя лого Godot 128x128 32 бита, размер 4,209 килобайт. <br>Результаты сборки при максимальных возможных оптимизациях на уровне движка:<br>1. Godot (4.2.2) - 18.7 мегабайта. Остались включенными только модули GDScript, OpenGL, Brotli. Для полноценной работы маловато, но терпимо. Снизить ниже уже в разы сложнее.<br>2. Unity (2022.3 LTS) - 8.42 мегабайта. <a href="https://forum.unity.com/threads/webgl-builds-for-mobile.545877/page-2#post-9021013" rel="noopener noreferrer nofollow">Потенциально можно дойти до 3-5 мегабайт</a>.<br>3. Defold (1.8.1) - 2.62 мегабайта. <a href="https://github.com/defold/build-size" rel="noopener noreferrer nofollow">Размер сборок мониторится</a>, графики правдоподобные.<br>4. Game Maker (2024.4.1) - 2.32 мегабайта. <s>Ужать дальше можно только с сжатием контента</s>. <strong>upd</strong> <a rel="noopener noreferrer nofollow">можно залезть в код</a><br><br>Сюда не вошли:<br>1. Unreal Engine. Последняя версия с поддержкой web-платформ была 4.24, дальше только в виде отдельного расширения. <br>2. Нативные для браузеров движки на JS/TS, коих множество.<br>3. Прочие решения, которые не подошли мне по разным параметрам: Phaser, PlayCanvas, Construct, GDevelop и другие.</p><p></p> <a href="https://habr.com/ru/posts/823774/?utm_campaign=823774&amp;utm_source=habrahabr&amp;utm_medium=rss">Читать дальше &rarr;</a>]]></description>
      
    <pubDate>Sun, 23 Jun 2024 12:29:34 GMT</pubDate>
    <dc:creator><![CDATA[Darell_Ldark]]></dc:creator>
      
      <category><![CDATA[Godot]]></category><category><![CDATA[Unity]]></category><category><![CDATA[Defold]]></category><category><![CDATA[Game Maker]]></category><category><![CDATA[Gamedev]]></category><category><![CDATA[gamedevelopment]]></category>
  </item>
  

	
  

  

  

    

  

  
  <item>
    <title><![CDATA[Пост @tac — .NET (+3) — N/P]]></title>
    <guid isPermaLink="true">https://habr.com/ru/posts/821273/</guid>
    <link>https://habr.com/ru/posts/821273/?utm_campaign=821273&amp;utm_source=habrahabr&amp;utm_medium=rss</link>
    <description><![CDATA[<p><strong>Реализация перераспределения целей (retarget) в играх RTS жанра</strong></p><p><em>Учитывая предыдущую критику, что удо</em>бнее читать статьи, а не слушать видео, попробую вначале сделать акцент на тему, вынесенную в заголовок. Дело в том, что в статье концентрация информации больше, но широкий контекст обсуждения вопроса, остается за кадром. Поэтому для узконаправленной подачи информации собираюсь написать статью, а для более широкого понимания вопроса предлагаю ознакомится с представленным видео. </p><p><strong>Задача выбора целей для атакующих NPC </strong></p><p>В играх RTS жанра обязательно возникает задача, как выбрать для NPC цель. Мы хорошо знаем, когда игроки на их жаргоне говорят "заагрился", что означает, что некий юнит, обратил внимание на юнитов игрока, и будет их преследовать и атаковать. В ряде игр от заагрившегося юнита можно убежать, в других наоборот, он будет вас выслеживать "по запаху, остаткам крови", как это реализовано в JA3. Но как усложнится задача, когда агрессивных NPC в игре сотни, и у игрока аналогично их сотни, или тысячи. Можно ли раз и навсегда заагрится на какого то конкретного юнита? По какому принципу перераспределять цели между разными NPC? Все это не тривиальные задачи, но они имеют одно достаточно простое решение на базе алгоритма искусственного интеллекта, который своими корнями восходит к алгоритму градиентного спуска. </p><iframe id="66698af328dfc09d9e454011" src="https://embedd.srv.habr.com/iframe/66698af328dfc09d9e454011" class="embed_video embed__content" allowfullscreen="true"></iframe><p></p> <a href="https://habr.com/ru/posts/821273/?utm_campaign=821273&amp;utm_source=habrahabr&amp;utm_medium=rss">Читать дальше &rarr;</a>]]></description>
      
    <pubDate>Wed, 12 Jun 2024 11:48:16 GMT</pubDate>
    <dc:creator><![CDATA[tac]]></dc:creator>
      
      <category><![CDATA[gamedev]]></category><category><![CDATA[rts]]></category><category><![CDATA[unity]]></category>
  </item>
  

	
  

  

  

    

  

  
  <item>
    <title><![CDATA[Пост @ArtemBoiko — Работа с 3D-графикой (+4) — 09.04.2024 17:23]]></title>
    <guid isPermaLink="true">https://habr.com/ru/posts/806503/</guid>
    <link>https://habr.com/ru/posts/806503/?utm_campaign=806503&amp;utm_source=habrahabr&amp;utm_medium=rss</link>
    <description><![CDATA[<p>CAD (BIM) Revit и IFC в Unreal Engine, Unity, Oculus — визуализация, рендеринг, метаверсии и игровой дизайн</p><p>? Стандартный рендеринг в CAD (BIM) программах часто не дотягивает до качества визуализации, но игровые движки, такие как Unreal Engine и Unity, произвели революцию в архитектурной и дизайнерской визуализации. Эти движки предлагают быстрый рендеринг и интуитивно понятные настройки света, материалов и геометрии, которые значительно улучшают процесс визуализации. Теперь клиенты могут изучать виртуальные модели зданий, взаимодействуя с такими элементами, как освещение и мебель, в режиме реального времени, что улучшает их понимание и вовлеченность. Unreal Engine позволяет проводить метаверсии, превращая 3D-виртуальные миры в крупные социальные центры.</p><iframe id="66154ec8ee68229db61415e5" src="https://embedd.srv.habr.com/iframe/66154ec8ee68229db61415e5" class="embed_video embed__content" allowfullscreen="true"></iframe><p>? Unreal Engine позволяет создавать интерактивные приложения 3D, дополненной (AR) и виртуальной (VR) реальности из 3D CAD (BIM) моделей.<br> ? Визуализацию или симуляцию движения автомобилей и людей можно настроить буквально в несколько кликов. Погода и время также легко настраиваются<br> ? Бесплатные движки позволяют подключать алгоритмы искусственного интеллекта, которые наглядно позволяют воспроизводить симуляции в реальных сценах, а не на бумаге<br> ? Используя Unity и инструментарий ML-Agents, ты можешь создавать ИИ-среды, которые будут физически, визуально и когнитивно насыщенными<br> ? С помощью Unity Machine Learning Agents больше не нужно"кодировать" эмерджентное поведение, а можно научить интеллектуальных агентов "учиться", </p><p></p> <a href="https://habr.com/ru/posts/806503/?utm_campaign=806503&amp;utm_source=habrahabr&amp;utm_medium=rss">Читать дальше &rarr;</a>]]></description>
      
    <pubDate>Tue, 09 Apr 2024 14:23:42 GMT</pubDate>
    <dc:creator><![CDATA[ArtemBoiko]]></dc:creator>
      
      <category><![CDATA[cad]]></category><category><![CDATA[cad/cam]]></category><category><![CDATA[bim]]></category><category><![CDATA[unreal]]></category><category><![CDATA[unity3d]]></category><category><![CDATA[oculus]]></category><category><![CDATA[строительство]]></category><category><![CDATA[дизайн]]></category><category><![CDATA[график]]></category>
  </item>
  

	
  

  

  

    

  

  
  <item>
    <title><![CDATA[Пост @daniilshat — Игры и игровые консоли (+2) — 09.01.2024 14:14]]></title>
    <guid isPermaLink="true">https://habr.com/ru/posts/785234/</guid>
    <link>https://habr.com/ru/posts/785234/?utm_campaign=785234&amp;utm_source=habrahabr&amp;utm_medium=rss</link>
    <description><![CDATA[<p>В блоге Unity <a href="https://blog.unity.com/games/made-with-unity-2023-review" rel="noopener noreferrer nofollow">опубликовали</a> большой список игр, которые разработали на одноимённом движке и выпустили в 2023 году. Редакция включила в список как полноценные релизы, так и находящиеся в раннем доступе. Для удобства игры разделили на 19 категорий. У каждой игры есть ссылка на карточку в Steam или собственный сайт.</p><figure class="full-width "><img src="https://habrastorage.org/getpro/habr/upload_files/09b/c97/870/09bc97870cd0b51d4f3d11d845a7d32d.jpg" width="1280" height="720"></figure><p></p> <a href="https://habr.com/ru/posts/785234/?utm_campaign=785234&amp;utm_source=habrahabr&amp;utm_medium=rss">Читать дальше &rarr;</a>]]></description>
      
    <pubDate>Tue, 09 Jan 2024 11:14:20 GMT</pubDate>
    <dc:creator><![CDATA[daniilshat]]></dc:creator>
      
      <category><![CDATA[unity]]></category><category><![CDATA[игры]]></category><category><![CDATA[разработка игр]]></category><category><![CDATA[2023]]></category><category><![CDATA[рейтинг]]></category><category><![CDATA[список]]></category>
  </item>
  

	
  

  

  

    

  

  
  <item>
    <title><![CDATA[Пост @Dmitry9192 — Unity — 26.08.2023 10:21]]></title>
    <guid isPermaLink="true">https://habr.com/ru/posts/757072/</guid>
    <link>https://habr.com/ru/posts/757072/?utm_campaign=757072&amp;utm_source=habrahabr&amp;utm_medium=rss</link>
    <description><![CDATA[<figure class="full-width "><img src="https://habrastorage.org/getpro/habr/upload_files/337/8af/d09/3378afd09403c33a9de29bee4fad3ce8.png" width="780" height="440"></figure><p>Актуализировал свою <a href="https://habr.com/ru/articles/652483/" rel="noopener noreferrer nofollow">статью</a> про async/await в Unity.</p><ul><li><p>Обновил примеры</p></li><li><p>Внёс ясности про асинхронность и UniTask</p></li><li><p>Дополнил раздел про CancellationToken</p></li></ul><p>Если упустили, советую ознакомиться.<br><br>P.S. Я там обещал статью о самых распространенных ошибках при использовании async/await. В ближайшее время и она увидит свет, так что следите за обновлениями.</p> <a href="https://habr.com/ru/posts/757072/?utm_campaign=757072&amp;utm_source=habrahabr&amp;utm_medium=rss">Читать дальше &rarr;</a>]]></description>
      
    <pubDate>Sat, 26 Aug 2023 07:21:48 GMT</pubDate>
    <dc:creator><![CDATA[Dmitry9192]]></dc:creator>
      
      <category><![CDATA[unity]]></category><category><![CDATA[async]]></category><category><![CDATA[coroutine]]></category><category><![CDATA[unitask]]></category>
  </item>
  

	
  

  

  

    

  

  
  <item>
    <title><![CDATA[Пост @fire64 — Unity — 24.04.2023 15:20]]></title>
    <guid isPermaLink="true">https://habr.com/ru/posts/731278/</guid>
    <link>https://habr.com/ru/posts/731278/?utm_campaign=731278&amp;utm_source=habrahabr&amp;utm_medium=rss</link>
    <description><![CDATA[<p>Небольшой хак, для тех, кто работает с кодом Unity в VS Code.</p><p>Если у вас не работает автокомплит при работе с проектами Unity или вообще с c# проектами, зайдите в настройки VS Code, вбейте в поиск: omnisharp.useModernNet и в найденной опции, выберите false.</p><p>После этого перезапустите VS Code и все заработает.</p> <a href="https://habr.com/ru/posts/731278/?utm_campaign=731278&amp;utm_source=habrahabr&amp;utm_medium=rss">Читать дальше &rarr;</a>]]></description>
      
    <pubDate>Mon, 24 Apr 2023 15:20:56 GMT</pubDate>
    <dc:creator><![CDATA[fire64]]></dc:creator>
      
      
  </item>
  

	
  

  

  

      

      

      

    
  </channel>
</rss>
