aks2dio | Unity и геймдев
435 subscribers
173 photos
5 videos
209 links
Директ: @antonkerp

Про GameDev, разработку на Unity и C#, менеджмент, образование, менторство и карьеру в целом.

С 2017 г. разрабатываю, лидую, преподаю и консультирую.
Был в найме, стартапах, фрилансе, инди.
Опыт: Mobile, Desktop, Web, XR.
Download Telegram
🤡 MemIT #16 🤡

Новый Год уже близко, но ещё ближе новая подборка мемов про игры, GameDev и IT из самых рабочих чатов и самых ваших комментариев 🎉

Уже вот тут, в комментариях 💬

🆙 прошлый выпуск 🆙
Please open Telegram to view this post
VIEW IN TELEGRAM
🎄61🔥1
📱 Про работу с памятью от Unity 📱

На YouTube начали выкладывать доклады с Unite 2025. Обычно они довольно скучные, банальные и неинформативные. И оттуда редко удаётся что-то полезное выцепить.

Но доклад Understanding Unity memory 📺 кажется очень хорошим положительным примером. Он динамичный, насыщенный, простой, с понятными аналогиями, примерами и практической значимостью, без лишней лирики.

💎 Он не имеет какой-то уникальности и инновационности. Это всё база базовая: обычная программа по Computer Science из технического вуза. Только что в контексте Unity.

Так сложилось, что не все попадают в сферу через вуз. И не многие находят интересным или нужным изучать это самостоятельно.

Но это важно для понимания контекста и принятия нужных решений, особенно там, где важна производительность. И в эпоху AI, где фундаментальные навыки приобретают бòльшую значимость.

Данный доклад — полезный экспресс-экскурс по тематике, чтобы освежить знания или закрыть имеющиеся пробелы. Что ждёт внутри 🔄

🔴 Как устроена работа CPU с памятью и кэшем;
🔴 Чем опасны промахи кэша (Cache Miss) и какие есть оптимизации на уровне CPU;
🔴 Чем значимые типы отличаются от ссылочных, а структуры — от классов;
🔴 Чем опасно использование классов и почему использование коллекций внутри структур неэффективно;
🔴 Как устроен сборщик мусора в Unity и в CoreCLR (который всё когда-нибудь обещают затащить в Unity);
🔴 Как может помочь Data Oriented Design, unsafe и буферы для данных;
🔴 И когда вообще стоит обращать пристальное внимание на всё это.

эту тему чуть-чуть дальше двигает следующий доклад про DOTS для GameObject 📺
Но это как раз типичный доклад Unite, с которым чувствуешь, как зря теряешь время — можно собрать всю полезность, просто прокликав.
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥103👍1
🎁 Free Dark Fantasy Modular Swordsman Girl 🎁

Готовый персонаж для Unity (Built-in, URP, HDRP) и UE5.
Много опций для изменения внешности, причёсок и одежды.

Ссылка: 📱 Asset Store
Промокод: IDAFABER2025
Please open Telegram to view this post
VIEW IN TELEGRAM
33🔥3
🎁 Free Apocalyptic Environment 🎁

35 объектов с 2K и 4K паками текстур:
Разрушенное здание, лестницы, качели, разбитые окна, тротуары, статуи, обломки и др.

Где:
📱 Asset Store
Промокод: NOTLONELY2025
Please open Telegram to view this post
VIEW IN TELEGRAM
👍4🔥4
Шпаргалка по базовым концепциям C#

Уровень материала: 🐣 #junior

Хотел к кейсам по ref из видео оставить ссылок на доп материалы и сделать конспект. Т.к. тема интересная и часто используемая в популярных ECS-фреймворках.

Но увлёкся дополнением контекста — слишком всё разрослось. Попробовал ужать до формата карточек, но туда тоже никак не помещается.

В общем, ни туда, ни сюда. Удалять тоже жалко. Оставлю в формате "шпаргалки". Может окажется полезно. А может кринж-треш-слоп. Как минимум, сам многое с удовольствием перечитал и повторил.

⚫️ Stack / Heap
⚫️ Reference / Pointer
⚫️ Value Type / Reference Type
⚫️ Boxing / Closure
⚫️ ref / out / in
⚫️ ref struct / ref return / ref local

Дополнительно сошлюсь на Metanit — любимый, простой, удобный и бессмертный учебник. Все эти темы там разобраны более практично и подробно.
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥71
Дешевле — не всегда хуже: экономим на AI
Уровень материала: ☕️ #offtop #ai

В этом месяце про AI пока не писал — успеваю ещё исчерпать свой лимит.

Замечаю, что большинство (по моим ощущениям) пользуется тем, что громче звучит в инфополе. Типа Claude Code, Codex, Cursor.
Это несомненно хорошие инструменты. Мощные. Но, соответственно, недешёвые.

Но с мощными инструментами нужно ещё уметь работать, чтобы эффективно конвертировать вложенные средства в пользу. Один только факт подписки на них чуда не сделает.

У меня поинта два🔄

1️⃣ Учиться можно на аналогах попроще и подешевле.

2️⃣ Сейчас такой перенасыщенный рынок, что в целом есть достойные альтернативы подешевле и на повседнев.

Про эти варианты "подешевле" я далее и раскатаю монолог.
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥32👍2
Нельзя Toolbar, но можно Overlay: кастомизация Unity

Уровень материала: 📎 #tool

В Update Notes по Unity 6.3 LTS 💬 была добавлена кастомизация Toolbar. Тогда по докам 📱 не было понятно, может ли оно удобно заменить популярные пользовательские расширения для кастомизации, которые были упомянуты в посте про EditorPrefs 💬

Лично залазить в 6.3 пока некогда. Но на канале git-amend вышло видео 📱 про эти новые возможности кастомизации. И похоже что это именно оно. Совсем не так удобно, как в любительских расширениях, но зато без дополнительных пакетов и "из коробки".

Однако это только в 6.3 — не все успели её раскатить. Но и в версиях постарше, начиная от 2021, тоже есть похожая возможность: кастомные Overlay для Scene View.

Документация: Unity 📱

Это такие панели, которые могут быть плавающими, прикреплёнными к краям Scene View или встроенными в него.
В частности, их можно тоже "вписать" в Toolbar, но только который внутри Scene View.

Они могут быть как элементарно простыми, так и нагружено сложными.
Так что в какой-то степени это даже более гибкая история, чем обычный Toolbar.

Оно достаточно удобно пишется (генерируется) на уже прижившемся Visual Elements из UI Toolkit.

Поддерживается два типа оверлеев:
⚫️ Toolbar Overlay
⚫️ Panel Overlay
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥63
MongoBleed: критическая уязвимость CVE-2025-14847

Уровень материала: 📢 #news #offtop

Ещё один элемент из нашего стека на одном проекте навёл суеты.
Если кто-то тоже гоняет на монге, берите к сведению.

После обнародования таких уязвимостей особо ушлые хакеры любят искать тех, кто не успел принять меры.
Один раз даже проиграли в эти догонялки. В этот раз не повезло серверам Rainbow Six Siege (habr).

Оценка по CVSS: 8.7 / 10.

Суть: уязвимость позволяет злоумышленникам извлекать неинициализированную heap memory с серверов БД без необходимости аутентификации, через механизм сжатия zlib, который используется для компрессии сетевых сообщений.

Поражение: многие версии, от 3.6 до 8.2. Т.е. вплоть до версий от 2017 года. Это более 87 тысяч активных инстансов.

Решения:
⚫️ MongoDB Atlas уже пропатчен.
⚫️ Для собственных инстансов нужно установить патч-обновление требуемой версий.
⚫️ Если нет возможности обновиться, отключить сжатие zlib.
⚫️ И лучше закрыть открытый доступ к порту до Mongo.

Подробнее: The Hacker News 🔗
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥6
🤡 MemIT #17 🤡

Это был тяжёлый год. Новый будет ещё тяжелее. Но хорошо смеётся тот, кто смеётся последним 🤡

Остатки мемсиков про игры, GameDev и IT рискуют стать прошлогодними — так что доедаем, пока не испортились. А завтра уже приступим к салатам 🥑

Смеяться — это сюда 💬

🆙 прошлый выпуск 🆙
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥4
📱 Новое API для SpriteAtlas 📱

Уровень материала: 📢 #news

Наконец можно выдохнуть и продолжить спокойно отсматривать доклады с Unity 2025.

В докладе The state of 2D in Unity 📱 был замечен новый API для спрайт-атласов: SpriteAtlasManager.CreateSpriteAtlas.

В Unity 6.3 он ещё не доступен. Но есть упоминание в документации по Unity 6.4.

API позволяет упаковывать спрайты в атлас не на этапе разработки в редакторе, а динамически, прямо во время работы приложения.

Эти сродни CombineMeshes, когда несколько мешей объединяются в один. Только теперь для спрайтов, которые собираются по востребованию в один общий спрайт-атлас.

↗️ Преимущества:

⚫️ Батчинг и снижение количества Draw Calls: Unity сможет отрисовать один атлас за один проход.

⚫️ Экономия видеопамяти: будет один плотный "спрайт" с нужным контентом вместо множества вариантов отдельных спрайтов со своими отступами и прочими "накладными расходами".

📉 Недостатки:

⚫️ Выделение дополнительной памяти под новый бо́льший "спрайт" при одновременном существовании оригинальных, если память не будет подчищена.

⚫️ Тяжёлая операция, поэтому потребуется это делать в моменты низкой нагрузки или на экранах загрузки.

💼 Сценарии применения:

⚫️ Procedural Gen: динамическое создание, когда заранее неизвестно, какие спрайты понадобятся вместе.

⚫️ Character Creators: объединение разных вариантов экипировки, причесок и аксессуаров в единую текстуру.

⚫️ Modular Content: загрузка и группировка отдельных частей игровых объектов.

⚫️ User Generated Content: эффективное встраивание изображений, загруженных игроками.
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥73👍2
Offerwall как наступившее будущее монетизации

Offerwall — это внутриигровая витрина заданий, где игроки добровольно получают премиальную валюту за конкретные действия: прохождение опроса, достижение уровня в другой игре или регистрация в сервисе.

В разработке пока не касался. Но похоже этого уже не миновать, особенно в Mobile. Этот приём развивается достаточно давно, и как пользователь я уже неоднократно с этим сталкивался.

Вместо "плати или смотри" приходит "плати или делай". Но рекламу минуту "посмотрел" и закрыл. А тут сходи, набери 1000 очков в вообще другой игре — это намного дольше, не интересно, и требует активного участия. И на очередном пэйволле от этого сложно отмахнуться.

С точки зрения пользы для рекламодателей и разработчиков об этом рассказали в докладе The evolution of rewarded engagement 📱 с Unite 2025.

💎 Кто что получает:
⚫️ Игрок — бонусы и платный контент бесплатно,
⚫️ Разработчик — монетизация игроков и выплаты от рекламодателя,
⚫️ Рекламодатель — гарантированное целевое действие.

🖥 Типы заданий:
⚫️ Простые/Дешёвые: Просмотр видео, подписки на соцсети, короткие опросы.
⚫️ Средние: Регистрация в сервисах, установка и запуск приложений.
⚫️ Сложные/Дорогие: Достижение этапов в других играх.

📈 Плюсы:
⚫️ Открываются по желанию пользователя в любое время (в отличие от рекламы).
⚫️ Средний eCPM (доход на 1000 рекламных показов) достигает $280.
⚫️ Лучше конверсия в платящих пользователей.

📉 Минусы:
⚫️ Подходит не для всех жанров.
⚫️ При неправильной настройке можно обесценить игровую валюту.
⚫️ Основной доход в Tier-1 странах, с другими — сложнее, потребуется гео-мультипликатор наград для привлечения.
⚫️ На iOS запрещены задания на установку приложений.
⚫️ Риск ухода пользователя в другую игру из оффера.

✔️ Когда использовать:
⚫️ Устойчивая игровая экономика с высокой ценностю игровой валюты.
⚫️ Доля платящих > 3%.
⚫️ Праздничные акции.
⚫️ Midcore и Hardcore проекты.

Когда не стоит использовать:
⚫️ Не на что тратить много игровой валюты.
⚫️ Слабая экономика, без дефицита ресурсов.
⚫️ Нет hard-валюты, только soft.
⚫️ Гиперказуальные игры.
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥3👍2
На Хабре встретил статью про сценарии и способы использования [SerializeReference] 📝

Не сторонник такого способа сериализации, но тем, кто готов к нему прибегнуть, контент придётся в пору. Особенно хорошо, что тема раскрывается через анализ того, во что это по итогу сериализуется в yaml'ах.

Отдельного внимания заслуживают и пакеты для Unity 💻 и для Rider 💻 от автора статьи для работы с SerializeReference. Подобный тулинг сильно скрашивает опыт взаимодействия с ними.

Добавил также ссылку на эту статью в свой обзорный материал про способы сериализации 💬
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥8
🧠 Утечки памяти 🧠
Уровень материала: 🐣 #junior

Ещё один полезный доклад с Unite 2025: How to find memory leaks with the Memory Profiler 📺

Не смотря на название, в докладе внимание уделено не только возможностям Memory Profiler.

Есть информация и про типы памяти: Native, Managed, Graphics, Untracked.

Есть про естественный рост потребления, про утечки памяти, про фрагментацию и её особенности с GC в Unity (т.е. про Boehm и CoreCLR).

В некотором смысле, он хорошо дополняет доклад Understanding Unity memory 💬

〰️〰️〰️〰️〰️〰️〰️
🍳 Основные причины утечек 🗑️

🟣 Частые аллокации.
🟣 Как следствие, фрагментация памяти.
🟣 Удержание ссылок на данные дольше, чем это необходимо, что мешает работе GC.
🟣 В частности, создание/загрузка ассетов без их последующего уничтожения.

〰️〰️〰️〰️〰️〰️〰️
🍳 Что к этому приводит 🗑️

🟣 Отсутствие своевременной очистки статических ссылок на объекты и коллекции.

🟣 Отсутствие отписок для событий и делегатов.

🟣 Использование анонимных функций и лямбда-выражений для подписки: ими невозможно отписаться без костылей и пристроек. И они могут вызывать при этом замыкание (про замыкание 💬).

🟣 Отсутствие вызова Dispose у того, что это требует.

🟣 Неявное клонирование материалов: при обращении к .material может создаваться новый материал, который нужно уничтожать (нужно помнить про .sharedMaterial).

🟣 Злоупотребление асинхронными методами без CancellationToken или в Forget-режиме: могут работать неконтролируемо долго и удерживать ссылки на данные.
(пример про AttachExternalCancellation 💬)

〰️〰️〰️〰️〰️〰️〰️
🍳 Как этого избежать 🗑️

🟣 Сделал подписку — тут же задизайнил отписку. Сразу, не откладывая. Это и надёжнее (не забудешь), и получится архитектурно чище, т.к. придётся сразу продумать жизненный цикл реализуемой фичи.

🟣 Аналогично для Dispose.

🟣 Использовать симметрию: делать обратные действия в противоположных фазах. Это удобно дополняет прошлые пункты и упрощает контроль.

Например, в OnEnable — подписались, в OnDisable — отписались. В Start — инициализировали, в OnDestroy — деинициализировали. И т.д.


🟣 Отказ от анонимных функций и лямбд для подписок: предпочитать методы.

🟣 Избегать хранения данных в статике. Только в случаях реальной необходимости или соответствия дизайну приложения.

🟣 Внимательно следить за статическими данными. И своевременно удалять оттуда неактуальные данные.

🟣 Выгружать загруженные или созданные ранее ассеты, при потере необходимости в них.

🟣 Использовать CancellationToken и/или принудительные таймауты для асинхронных методов.

🟣 Использовать пул объектов вместо частого создания и уничтожения одних и тех же объектов для снижения фрагментации.

〰️〰️〰️〰️〰️〰️〰️
Ещё у меня есть короткие тематические нарезки из старых докладов:
🟣 Про фрагментацию: YouTube 📺 | VK 🎥
🟣 Про пул объектов: YouTube 📺 | VK 🎥
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥91
Читеры в многопользовательских играх
Уровень материала: 🐥 #middle #multiplayer

Последний шэр хорошего доклада с Unite 2025.
В этот раз Making games that keep cheaters away 📺

Тут тему читов тоже уже ранее немного однажды задевал: пуньк 💬

И на Хабре ранее натыкался на серию статей: про сами читы и про анти-читы 📝

Что было внутри доклада, с небольшими дополнениями от себя:

1️⃣ Мотивации читеров:
🟣 Заработок (P2E, продажа прокаченных аккаунтов и читов, влияние на игровую хард-экономику).
🟣 Соц. статус: получение признания и статуса без усилий.
🟣 Доминирование.

2️⃣ Типы читов:
🟣 Локальные (Wall Hack, Radar, Aim Bots и т.д.)
🟣 Сетевые (Lag Switch, Fake Lag Drop Hack и т.д.)
🟣 Читы, изменяющие состояние игры (Speed Hack, Fly Hack и т.д.).

3️⃣ Способы реализации читов:
🟣 Изменение данных в RAM.
🟣 Реверс инжениринг, патчинг кода, подмена ассетов.
🟣 Перехват системных вызовов.
🟣 Подмена сетевых пакетов.

4️⃣ Модели авторитарность:
🟣 Server Authority, когда всё решает сервер, самый безопасный и подходящий для PvP.
🟣Про виды авторитарности и топологий я ранее собирал более подробный материал 💬

5️⃣ Технические барьеры для читеров:
🟣 Code Obfuscation: беспорядочное переименование, перемешивание и замусоривание итогового кода.
🟣 Memory Scrambling: случайное смещение адресов в RAM.
🟣 Projection: смещение чисел в RAM, чтобы не хранить их в памяти в явном виде.
🟣 Network Encryption: шифрование сетевого трафика.
🟣 Data Encryption: шифрование сохраняемых данных.
🟣 Code Virtualization: использование кастомного языка для части кода игры, который может понять только встроенная в игру "виртуальная машина".
🟣 Integrity Protection: хэширование и сверка файлов и участков памяти игры.
🟣 Anti-cheats инструменты: Client-side, Server-side.
🟣 Runtime-проверка подключенных дебаггеров.
🟣 Анализ паттернов поведения.

6️⃣ Правила разработки:
🟣 Запрещено хранить пароли и API-ключи в коде или системах контроля версий.
🟣 Серверный и клиентский код должны находиться в разных сборках и не попадать друг в друга.
🟣 Хранить в RAM минимально необходимую информацию для продолжения игры текущего конкретного игрока.
🟣 Не хранить в RAM избыточные данные других игроков.

7️⃣ Стратегии наказания:
🟣 Платные игры: бан для читера в бесплатной игре ничего не стоит.
🟣 Банить отложено, не сразу, чтобы читеры не поняли, из-за чего именно случился бан.

8️⃣ Задача в борьбе с читерами:
🟣 Искоренить читеров невозможно, но можно сделать взлом настолько дорогим и скучным, чтобы им было проще уйти в другой проект.

Это в т.ч. коррелирует с мыслью, которую я давно прочно ухватил из "45 татуировок менеджера" Батырева: если хочешь, чтобы следовали правилам, нужно создать условия, в которых нарушать правила настолько сложно, что проще им следовать.
Please open Telegram to view this post
VIEW IN TELEGRAM
7🔥5
🎁 Бесплатное из мира AI 🎁
Уровень материала: 📢 #news #ai

В конце года писал про бесплатные легальные возможности использовать AI — там пока всё актуально (разве что Antigravity лимиты урезали). Но успели появится новые возможности.

1️⃣ В KiloCode стала доступна бесплатно preview новой Stealth Frontier модели под кодовым название Giga_Potato. После preview узнаем, кто за картошкой скрывался 🥔

2️⃣ Появилось бесплатное API для автокомплита от Mistral. И KiloCode сделали инструкцию о том, как это подключить к ним. Подтверждение аккаунта по российскому номеру телефона работает.

3️⃣ У Mistral с недавнего времени есть свой CLI Vibe, в котором можно бесплатно использовать их Devstral 2 (в KiloCode тоже доступно бесплатно).

4️⃣ В Trae раздают Anniversary Gift. 600 fast request для Free Users и 800 для Paid Users. В этот раз у меня заработал полностью без VPN. И они наконец-то добавили поддержку AGENTS.md и Agent Skills.

5️⃣ В Windsurf примерно до марта доступна бесплатно всем пользователям их модель SWE-1.5 (но эта версия без Cerebras, т.е. не 900 токенов/сек).

▪️ картинка сгенерирована в qwen ▪️
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥54
📅 MidUp #14 📅

Новая подборка GameDev и IT мероприятий, которые встретились в чатах, группах и сети ⬇️

⚫️ Январь
⚫️ Февраль
⚫️ Март

Находи свой город, оставляй ссылки на другие мероприятия и заглядывай в Геймдев Афишу 🃏
Please open Telegram to view this post
VIEW IN TELEGRAM
🎁 Промо-код для Human Crafting Animations 🎁

📱 Unity Asset Store 📱

Более 150 Humanoid анимаций для перемещения, боя, крафтинга и всяческого сбора ресурсов.

Промокод: KEVINIGLESIAS2026
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥631
#️⃣ Пакет для бенчмарков в Unity #️⃣
Уровень материала: 📎 #tool

Были планы сделать какой-то медиа-контент по этой теме, но так долго жду возможности, что уже, похоже, никогда. Поэтому хотя бы в виде постика зафиксирую этот тул в истории.

〰️〰️〰️〰️〰️〰️
Performance Testing Package — это официальное расширение для Unity Test Framework, которое позволяет удобно и быстро реализовывать бенчмарки для вашего кода.

Бенчмарк — это тест, который измеряет производительность в контролируемых условиях для получения объективных числовых показателей.

Подробнее — в оф документации 📱

〰️〰️〰️〰️〰️〰️
🍳 Как пользоваться 🗑️

Оно интегрируется в обычный Test Runner: и в EditMode, и в PlayMode. Но в EditMode доступны не все варианты измерений. Например, нет работы с кадрами или профайлером по понятным причинам.

Соответственно, это удобно и запускать самостоятельно, и встраивать в CI-пайплайны.
(в последний раз тут про CI была информация в этом посте 💬)

Пакет предоставляет наглядные отчёты. И эти отчёты можно выгружать в xml и csv.

Пишется это аналогично NUnit-тестами, на родном C#. Только добавляются специальные методы, которые на себя забирают много полезной рутины.
По типу того, сколько делать прогонов и как часто делать замеры.

Пользоваться весьма удобно. А т.к. LLM отлично генерируют нужный код, то ещё очень просто и быстро.

Гонять бенчмарки можно не только в редакторе, но и в билде на конечном устройстве через режим Player.

Продолжение — в комментариях 🔄
Please open Telegram to view this post
VIEW IN TELEGRAM
5🔥5