Про Unity от .NET-разработчика
Уровень материала: 🐣 #junior 🐥 #middle 📝 Полезная статья, которая будет не лишней каждому. Сам ничего нового не узнал, но всё равно увлекло так, что прочитал на одном дыхании. Для новичков — неглубоко и не развёрнуто, но достаточно, чтобы подтолкнуть к правильным промтам для дальнейшего поиска. Мне даже нечего прокомментировать или добавить. Просто делюсь просто хорошим контентом. >>> Задето много важных моментов: 🟣 Unity и .NET имеют различия в компиляции и исполнении кода. 🟣 Есть особенности при использовании пакетов из NuGet. 🟣 Немного сказано про сериализацию сцен и ассетов. Это очень важный момент, понимания которого не хватает многим начинающим разработчикам. Планирую насобирать материалов и сделать отдельный пост. 🟣 Из-за отсутствия конструктора у MonoBehaviour компоненты имеют неконсистентное состояние сразу после создания. Awake вызывается не сразу. Ещё и какой-нибудь Init тоже надо успеть вызвать вовремя. А то и, не дай бог, несколько Init'ов (не надо так). 🟣 Рассмотрены нюансы с созданием, сравнением и уничтожением объектов в Unity. 🟣 Упомянуты особенности работы с многопоточностью и асинхронностью в Unity. 🟣 Важный и редко упоминаемый момент: у Unity свой SynchronizationContext, который позволяет async-коду выполняться в одном с Unity потоке. Поэтому в контексте Unity простое использование async/await не ведёт к многопоточности ❗️ Услышите обратное (а на курсах такое прогоняют) — бегите. 🟣 В WebGL действительно не работают обычные Task'и. Но, это было не упомянуто, зато работают UniTask. Awaitable тоже должны работать — правда, это уже я лично не проверял. 🟣 Оставлено много советов по оптимизации. Мельком, кратенько, но верно. ———————————— #unity #gamedev #development #engine #dotnet #csharp #геймдев #разработка #движок #рекомендация #статья
· 11.01
Async/await это технология асинхронности. Асинхронность и многопоточность это разные понятия. Асинхронность возможна в одном потоке. Это справедливо даже вне контекста unity.
Информация уровня сеньор-мидл. Новичкам лучше разобраться с базой, иначе мозг сломают раньше времени.
ответить
коммент удалён
· 12.01
Да, в статье это тоже упоминается и поясняется, почему это так и почему такое сравнение может быть ненадёжным.
Вопросы оптимизации — это последнее, о чём стоит заботиться новичкам. Им бы научиться сначала понятный и рабочий продукт создавать. И осознанно. Эффективная разработка — уже вотчина миддл-звена.
ответить
ответ удалён
· 12.01
Я бы на эту тему ознакомил новичков с информацией о том, что сравнение gameobject с null является операцией с высокой стоимостью вычисления. Для меня это было действительно важным открытием, когда я начал знакомиться с unity. Это единственная вещь, которая заставила переписать значительную часть кода. Исходную статью не читал, возможно в ней это написано.
ответить
ответ удалён
· 12.01
Благодарю за уточнения 🎩
Контент в статье — как раз база. Джунам — сильно полезно. Мидлы — всё это уже должны знать. Если говорить про геймдев. Сужу по актуальному рынку и потребностям.
Асинхронность и многопоточность — крупные отдельные темы. Статья не про это. Она лишь касается этих блоков в контексте сравнения. Как попадётся под руку специализированный интересный контент — поделюсь и им. По многопоточности в бэклоге уже что-то лежит. Нужно по асинхронности насобирать :)
Добавка про "в контексте Unity" — это аллюзия на то, как именно подобная ложная информация офрмляется. В .net выход в другой поток ничем фатальным не светит. Unity же смачно ударит по рукам. И (якобы) "именно в Unity использовать async/await — большое а-та-та", ссылаясь на то, что "именно в Unity многопоточность запрещена", что неверно само по себе и не к месту "пришито"
ответить
ответ удалён