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

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

С 2017 г. разрабатываю, лидую, преподаю и консультирую.
Был в найме, стартапах, фрилансе, инди.
Опыт: Mobile, Desktop, Web, XR.
Download Telegram
👩‍💻 Roslyn 👩‍💻
Уровень материала: 🐓 #senior

На этой неделе выходил очень полезный ролик 📱 про использование Roslyn в связке с Unity. Кто интересуется и следит за C#, уже наверняка знакомы с Roslyn. А в инфополе Unity Roslyn упоминается не часто, разве что в беседах между разработчиками. Так что это весьма редкий контент про весьма полезный инструмент.

Roslyn 📱 — это компилятор для C# и Visual Basic, предоставляющий API для компиляции, рефакторинга, статического анализа и генерации кода.

Он позволяет производить поиск потенциальных ошибок, нарушений стиля или уязвимостей. Автоматизировано исправлять найденные проблемы в коде. А также генерировать всякий boilerplate, что бывает часто нужно, например, при разработке на ECS или при реализации DI (см. Pure DI 📱).

При этом все эти автоматизации можно привязать к пайплайнам в CI/CD и прогонять при мержах или сборках.

Вообще, никто не мешает работать с файлами кода, как с текстовыми документами. Можно открыть cs-файл, перегнать в строку, через регулярные выражения искать совпадения и проверять выполнения тех или иных условий.

Можно даже написать простой кодоген "на коленке" из "строк и палок" как в этом видео 📱

Почему это не так удобно, как Roslyn, подробно и наглядно рассказано в классном докладе с DotNext 📱

Roslyn преобразует исходный код в синтаксическое дерево (Syntax Tree 📱), где каждый узел соответствует определённой синтаксической конструкции (класс, метод, выражение и т.д.).

Также Roslyn предоставляет доступ к семантической модели (Semantic Model 📱), которая позволяет анализировать типы данных, символы и контекст использования. Например, это позволяет искать ссылки на методы.
————————————
#unity #gamedev #development #roslyn #tool #compiler #analyse #геймдев #разработка #анализ #инструмент #рекомендация #видео
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥4👍3🥴1
В видео из прошлого поста можно заметить также любопытный момент про специальные директории, которые игнорируются в Unity.

Т.е. при необходимости какие-то папки можно сделать "невидимыми" для движка. Как это сделать, можно посмотреть в документации 📱
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥3👍2
🧠 Для чего нужна База 🧠
Уровень материала: 🎓 #education

💬 К прошлому посту про «базу» поступил комментарий, ответ на который получился объёмным. Но, как мне показалось, важным. Я решил получившуюся мысль сохранить и дополнить.

Время — важный инструмент, который работает как «на», так и «против» нас. Со временем каждый может стать экспертом в своей области — вопрос только в количестве времени. Однако в конкурентной среде важно использовать время наиболее эффективно.

Целенаправленная работа над своей «базой» позволяет приобрести на длинной дистанции неоспоримое преимущество перед теми, кто полагается только на «практический опыт».

📞 Решая конкретные проблемы, человек учится справляться именно с ними. Хорошо, если при этом он выстраивает логические связи, рефлексирует и углубляет знания с помощью внешних источников.

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

Но, как показывает практика преподавания и найма, на это способны не все. Многие мыслят конкретными кейсами и теряются, когда сталкиваются с нестандартными для них ситуациями. Или, боясь «ударить в грязь лицом», принимают импульсивные, неэффективные и опасные решения.

🍽 Казалось бы, нужно просто набрать больше кейсов. Но проблема в том, что научиться решать все проблемы на конкретных сценариях невозможно. Их миллионы, особенно в IT, где их количество растёт ежедневно вместе с развитием технологий и процессов.

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

👩‍💻 Например, для программистов важно алгоритмическое мышление. Оно учит не просто писать код под конкретную задачу, а видеть структуру проблемы. Разрабатывать системы, устойчивые к изменению входных данных и окружения. И, соответственно, менее подверженные появлению багов и недоработок.

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

⚙️ Инструменты и задачи меняются. А «база» — остаётся и помогает быстрее адаптироваться к изменениям.

🟣Что такое База
🟣База и Книги
—————————————
#development #разработка #обучение #образование #aks2dio
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥6👌1
🔓 Игнорирование internal для asmdef 🔓
Уровень материала: 🐥 #middle

Assembly Definitions — мощный инструмент для организации кода в Unity.

📌 Кратко про возможности Assembly Definitions:

🟡Помогает разделить проект на модули и изолировать их друг от друга (UI, Gameplay, Data).

🟡Помогает прозрачно контролировать зависимости между модулями.

🟡Предотвращает появление циклических зависимостей, хотя бы на уровне модулей.

🟡Ускоряет компиляцию скриптов, т.к. перекомпиляция происходит только для изменившихся и зависимых от них asmdef'ов.

🟡Позволяет реализовывать платформозависимые модули (в т.ч. чисто Editor-модули).

🟡Позволяет использовать Define Constraints на уровне целого модуля.

🟡Позволяет реализовывать Define Symbols на основе версий Unity или используемых пакетов.

🟡Позволяет пользоваться благами модификатора доступа internal.

Про это более подробно написано в документации Unity 📱

⬇️⬇️⬇️
Please open Telegram to view this post
VIEW IN TELEGRAM
👍32
⬆️⬆️⬆️

🔒 Про internal 🔒

Что делает internal: он делает доступ невозможным за пределами конкретного asmdef. Т.е. с internal можно взаимодействовать только в рамках одного модуля. Как private в рамках одного класса. Только уровнем выше.

Это помогает контролировать как Low Coupling, так и High Cohesion (см GRASP).

⬇️⬇️⬇️
Please open Telegram to view this post
VIEW IN TELEGRAM
👍2
⬆️⬆️⬆️

🚧 Преодоление internal 🚧

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

Test и Editor – два модуля, которые вполне оправданно хотят трогать другие модули за все доступные и недоступные места. Но как это сделать?

Ответ: атрибут InternalsVisibleTo. Но как его использовать?

Это один из тех моментов, который плохо освещён в документации Unity 📱 Но всё очень просто.

Достаточно около asmdef'а создать файл AssemblyInfo.cs и поместить там атрибут InternalsVisibleTo с указанием имён asmdef'ов, для которых должен быть открыт доступ до internal методов и классов.

⬇️⬇️⬇️
Please open Telegram to view this post
VIEW IN TELEGRAM
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥6
⬆️⬆️⬆️

🔍 Поиск asmdef'ов 🔍

Не все это знают, но в Unity внутри вкладки Project можно отфильтровать все Assembly Definition в проекте через промпт
t: asmdef 

​—————————————
#gamedev #development #unity #assembly #asmdef #internal #advice #геймдев #разработка #советы
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥9👍2
🚀 Zero allocation LINQ 🚀
Уровень материала: 📣 #news

Не секрет, что LINQ в .NET имеет проблему с аллокацией памяти, что ограничивает его применение в часто исполняемой или высоконагруженной логике.

Ребутяшки из Cysharp, известные по UniTask и R3, 2 недели назад создали репозиторий с ZLinq — это их NonAlloc struct-based имплементация Linq.

👩‍💻 Пакет уже совместим с .NET 9, .NET 10, Unity 📱 (от 2022.3.12f1) и Godot (от 4.0.0).

В Unity и Godot предусмотрены методы расширения для GameObject, Transform и Node2D. Аналогичные методы расширения реализованы и для Json, что может быть полезно для систем миграций/патчинга пользовательских игровых данных.

📱 Узнал про ZLinq из видео с канала git-amend. Там рассмотрены примеры использования и интеграции в Unity. Также там можно подглядеть полезные методики для профилирования.

💡 Мне нравятся и UniTask, и R3. Поэтому пока для меня ZLinq, построенный на тех же идеях, выглядит как многообещающий инструмент для оптимизации LINQ-запросов, который позволит снизить нагрузку на GC и упростить работу с деревьями объектов.

⚠️ Библиотека пока находится в стадии preview, но в не-продуктовой среде я уже начну с ней знакомиться.
————————————
#unity #godot #gamedev #development #dotnet #csharp #tool #linq #optimization #allocation #геймдев #разработка #оптимизация #инструмент #рекомендация #видео
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥83👍2
💾 Сохранение игрового прогресса v2.0 💾

Сегодня я выступаю на Cityfest в Новосибирске с докладом о сохранении прогресса в играх.

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

Обновлённая и дополненная версия доступна на 📝 Habr и 📝 Dtf.

Переписал многие разделы. Дополнил новой информацией и ссылками на ресурсы. Не очень значительный контент даже удалил.

Доофрмил репозиторий с примерами. Потестировал им для себя дополнительно ещё и GitVerse.
—————————————
#unity #gamedev #development #save #cloud #data #геймдев #разработка #сохранения #данные #облако #aks2dio #статья
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥9👍1
🧠 База и Книги 🧠
Уровень материала: 🎓 #education

Ранее я отмечал, что книги сильно недооценены. Это доступный и эффектный способ прокачать свою "базу". S0ER в одном из видео 📺 тоже подчеркнул эту мысль.

Мультимедиа-контент проще для восприятия, но не заменяет более глубокое развитие, которое даёт чтение книг.

Оно развивает разнообразные когнитивные функции, такие как память, абстрактное мышление, способность к обучению и др. А также предоставляет, как правило, более проработанный материал.

⬇️⬇️⬇️
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥4
⬆️⬆️⬆️

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

О том, как читать осознанно и не превращать это занятие в разновидность прокрастинации, есть интересный пост с хорошими советами, которые я и сам активно применяю.

По этим причинам чтение каждой книги у меня (статей и видео это касается тоже) — это длительное занятие. Но зато из этого удаётся извлекать максимум пользы.

⬇️⬇️⬇️
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥3
⬆️⬆️⬆️

В этом году я начал пробовать читать по 3-10 страниц в день. Такой объём легко осилить и законспектировать.

Поскольку продвижение небольшое, на следующие дни материал невольно приходится вспоминать — это помогает закрепить прочитанное.

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

Нетворкинг на прошедшем CityFest подарил мне ещё несколько ценных рекомендаций, которые я пробую вклинить в своё, пока что перегруженное бытом, расписание.

Такого же подхода я придерживаюсь и при изучении иностранных языков. В моменте, возможно, результат кажется незначительным, но на длинной дистанции он очень ощутимый, особенно если сравнивать с полным бездействием.
—————————————
#development #разработка #книги #обучение #образование #рекомендация #видео
Please open Telegram to view this post
VIEW IN TELEGRAM
50🔥3👍1
☄️ JetBrains AI теперь доступен бесплатно ☄️
Уровень материала: 📣 #news

JetBrains открыли бесплатный доступ не только к Rider, но и к своему AI, обновив тарифную сетку сервиса.

На Free-тарифе доступен неограниченный автокомплит, небольшое кол-во токенов для прочих облачных функций и добавлена поддержка локальных LLM на уровне IDE, вместо необходимости использовать сторонние плагины типа Continue.

————————

🟣Опыт использования других ассистентов в Rider:

Долгое время я пользовался GigaCode. Но отсутствие RAG (учёт контекста проекта) для C# сильно ограничивало. Хотя для Java и Kotlin его уже добавили.

Я пользовался Codeium, TabNine, Cody, JetBrains AI, Copilot. JetBrains и TabNine сильно разочаровали. Copilot — лучший из этой пачки и сравнительно недорогой. Но ему постоянно требуется VPN.

По итогу остановился на малоизвестном Supermaven и последние два месяца пользуюсь Pro-подпиской.

————————

🟣Про Supermaven:

Из минусов: почти никаких настроек и более скудный функционал, чем у конкурентов. По сути, есть только автокомплит и чат. В чате даже Ctrl+C не работает — настолько он неудобный.

Но автокомплит просто великолепный. Даже в бесплатной версии, которая тоже есть. Быстро работает, чётко попадает в контекст, использует RAG, учитывает code style и предсказывает действия по перемещению курсора и удалению/замене блоков кода.

Всё это без VPN и большой нагрузки на систему, всего за $10/мес.

К сожалению, команда переключилась на разработку своей AI IDE по типу Cursor и Windsurf. Поэтому плагин лучше уже не станет. Будет повод в следующем месяце взять паузу и попробовать JetBrains AI ещё раз.
————————
#unity #gamedev #development #rider #tech #ide #jetbrains #llm #news #ai #code #геймдев #разработка #код #ии #новости
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥6👍21🤔1
🤡 MemIT #9 🤡

Зарядка перед началом новой рабочей недели.
Подборка из 10 кеков/шуток/юморесок/мемов про игры, GameDev и IT, которые были мною украдены из рабочих чатов и ваших комментариев к предыдущим подборкам.

Мемы уже в комментариях 💬

⬆️ прошлый выпуск ⬆️
—————————————
#gamedev #development #it #meme #humor #геймдев #разработка #айти #мемы #юмор
Please open Telegram to view this post
VIEW IN TELEGRAM
🤣5🔥3👍2
Автоматизированное создание иконок предметов в Unity
Уровень материала: 🐥 #middle

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

Ручная подготовка этих иконок отнимает много времени. А на стадиях активной разработки, когда модели объектов постоянно изменяются, это время теряется впустую.

В видео с канала Game Dev Guide 📺 демонстрируется один из способов по решению этой проблемы – инструмент для автоматизации создания иконок. Продемонстрированы все этапы разработки: от кода до интерфейса в редакторе.

Что умеет инструмент:

🟡Генерирует иконки на основе 3D-моделей предметов.

🟡Позволяет настраивать ракурс (положение камеры, поворот объекта).

🟡Экспортирует иконки в PNG.

🟡Автоматически назначает иконки игровым объектам.

🧷Подобные решения создаются и используются очень часто и могут потребоваться в любой момент — полезно знать об их существовании и способах реализации.
————————————
#unity #gamedev #development #icon #tool #геймдев #разработка #иконки #автоматизация #инструмент #рекомендация #видео
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥5👍3
🗓 MidUp #7 🗓

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

Ссылки в комментариях 💬

Ещё больше GameDev-событий — в Геймдев Афише 💬
—————————————
#it #development #gamedev #gamejam #meetup #conference #разработка #айти #геймдев #конференция #митап #событие #подборка
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥32
✈️ Куда пропал самолёт Skimmer в GTA SA ✈️
Уровень материала: ☕️ #offtop

Многие наверняка знакомы с неприятными багами, которые проявляются только на определённых платформах или только при определённых конфигурациях. А что насчёт багов, которые дают о себе знать только спустя 20 лет?

Про такой баг из GTA San Andreas, который выстрелил лишь в Windows 11 24H2, вышел увлекательный материал 📝

Поучительная история о том, в какие чеховские ружья могут превращаться алгоритмы, которые начинают полагаться на некие условности, существующие где-то вне своего контекста 🔫

Выяснилось, что баг возник из-за изменения структуры стека в Windows 11, что повлияло на чтение неинициализированных переменных. Проблема решилась простым добавлением недостающих параметров в конфиг 💻

Несмотря на незамысловатость результата, добраться до него непросто — было очень любопытно понаблюдать за расследованием такого инцидента 🔍
————————————
#gamedev #development #bug #debug #геймдев #разработка #баг #отладка #рекомендация #статья
Please open Telegram to view this post
VIEW IN TELEGRAM
👀4🔥2😱1🤣1
Были опубликованы записи с прошедшего Gamedev Cityfest 📺 в Новосибирске.

Не смотря на то, что мой доклад про сохранения в играх 📺 в этом году был единственным из технического трека, было много полезных докладов от представителей других областей.

Планировал провести работу над ошибками, подготовить новую тему и выступить на фестивале у Unigine, но по таймингам не удалось совпасть. Буду выбирать из других мероприятий 🔍
—————————————
#unity #gamedev #development #save #геймдев #разработка #сохранения #aks2dio #выступление
Please open Telegram to view this post
VIEW IN TELEGRAM
👍3🔥32😎1
🎮 Unity Input System 🎮
Уровень материала: 🐣 #junior

Последние годы Unity радуют качественными учебными материалами по своим инструментам. Недавно был опубликован плейлист с видео-гайдами по использованию их Input System 📱.

Гайд пробегается поверхностно, но по всем важным возможностям системы.

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

В чатах до сих пор многие не могут смириться с постепенным замещением старой системы на новую и ищут способы работать в "старой парадигме", т.к. новую Input System находят слишком сложной и непонятной.

Кто сталкивался с проблемами множества контроллеров, локального мультиплеера, сменой схем управления в процессе игры (например для режима "в машине") и переназначением клавиш, поймёт, почему всё устроено именно так. И вряд захочет отказаться от предоставляемых системой возможностей.

При этом это всё теперь доступно "из коробки", бесплатно, без необходимости изобретать свои решения или покупать сторонние ассеты по типу Rewired или InControl.

На старте Input System было много всяких проблем, особенно с UI. Сейчас уже она работает исправно и не доставляет хлопот.
————————————
#unity #gamedev #development #input #control #package #геймдев #разработка #ввод #инпут #управление #пакет #рекомендация #видео
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥4
🚀 Упрощение запуска Unity-игры с EntryPoint 🚀

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

По мере роста проекта запуск игры в Unity усложняется. У новичков логика старта часто разбросана по нескольким MonoBehaviour, каждый из которых запускается сам по себе. Это приводит к хаосу и ошибкам, особенно на этапе инициализации.

Мне попалось полезное видео Starting Your Unity Game Flawlessly (8 Steps) 📱, в котором дают доступное пояснение, как этого избежать. В частности, за счёт использования паттерна EntryPoint.

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


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

Прозрачность: легко найти, откуда начинается выполнение логики.

Контроль порядка: нет race condition между объектами.

• Удобно сочетается с DI и асинхронностью.


🔍 Следствия:

• Упрощаются тестирование и отладка.

• Можно применять на более мелкие вложенные части игры.

• Проще подключать и встраивать новые механики и возможности.


📎 Варианты реализации:

MonoBehaviour с началом исполнения в Start.

• Обычный класс с атрибутом RuntimeInitializeOnLoadMethod на своём методе.

• Специальный контракт инициализации у DI-фреймворков типа IStartable.


🖥 Простой пример кода:

internal sealed class EntryPoint : MonoBehaviour
{
private async void Start()
{
await InitializeServicesAsync();
await LoadGameDataAsync();
await StartGameAsync();
}
}

————————————
#unity #gamedev #development #architecture #initialization #геймдев #разработка #архитектура #инициализация #рекомендация #видео
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥2😴1