Unity: Всё, что вы не знали о разработке

Unity: Всё, что вы не знали о разработке

@unsafecsharp

Авторский канал о разработке в Unity от Alex Silaev (CTO в Zillion Whales). Mushroom Wars 2 моих рук дело. Рассказываю об интересный кейсах, делюсь лайфхаками, решениями.

1 760подписчиков
🇷🇺

Похожие каналы

Все →

Последние посты

Unity.Profiling.IgnoredByDeepProfilerAttributeАттрибут, который спасет вам время, если у вас много кода, который вы точно не хотели бы видеть в профайлере.#attributes #profiling #unity

12 окт. 2025 г.3 640В Telegram

Рукожопы (других слов нет) выпустили апдейт юнити, в котором отломали uitk в инспекторе.Так что ждем хотфикс, а пока (если у вас вдруг ломается инспектор) можно отключить uitk и использовать imgui:Project Settings -> Editor -> use IMGUI#editor #unity

6 окт. 2025 г.4 840В Telegram

Unity: Всё, что вы не знали о разработке pinned a photo

4 сент. 2025 г.В Telegram
Unity: Всё, что вы не знали о разработке — пост в ТГ канале

Всем привет ;)Как вы могли заметить, в этом канале нет рекламы, продажи курсов и подобных историй. Так будет продолжаться и дальше.Но я хотел бы предложить свои услуги в качестве консультаций в частном порядке, то есть мы разберем вашу проблему и найдем оптимальное для нее решение. Готов помочь с любыми проблемами на ваших текущих проектах или просто подтянуть знания по какой-то теме.Оплата по договоренности.https://boosty.to/chromealexПишите в личку: @chromealex

4 сент. 2025 г.5 010В Telegram

NoAliasЭтот аттрибут используется для Burst и позволяет экономить на инструкциях.Например:int Method(ref int a, ref int b) { b = 13; a = 42; return b;}В данном случае Burst не знает, пересекаются ли данные a и b (хранятся ли в памяти в одном месте или нет).То есть тут будет 3 инструкции mov, 2 для установки значения, а третья - для чтения этого значения. Если же добавить аттрибут NoAlias, возврат данных будет без дополнительной загрузки:int Method([NoAlias] ref int a, ref int b) { b = 13; a = 42; return b;}Аттрибут можно использовать для NativeArray (контейнеров), которые не пересекаются, и в качестве возврата из методов [return: NoAlias]. При этом это имеет смысл, если метод не заинлайнен, т.к. при инлайне аттрибут не будет иметь смысла.#noalias #burst #code

4 сент. 2025 г.3 380В Telegram

ResourcesAPIВ юнити 6.2 появилась классная штука, которая позволяет переопределить дефолтные методы загрузки ресурсов. И это круто, если подобным образом они будут развиваться и дальше, то когда-нибудь можно будет переписать весь движок 🙂https://docs.unity3d.com/6000.2/Documentation/ScriptReference/ResourcesAPI.html#unity #api #resources

1 сент. 2025 г.2 290В Telegram

Unity.MathematicsНа самом деле многие не поняли зачем им использовать Unity.Mathematics, если у них есть Vector2/Vector3 и Mathf, например.Давайте разберем самый простой пример:var a = 10;var b = 20;var c = 30;var result = a * b + c; // Считаем результатУ Unity.Mathematics есть math.mad, который внутри делает тоже самое:void mad(int a, int b, int c) => a * b + c;И самая большая ошибка считать, что никакой разницы в коде не будет. А работает это так: при компиляции кода, вызов math.mad мапится напрямую на simd-инструкцию, то есть код превращается из 2х инструкций в одну.Пример с math.mad - это лишь пример того, где вы можете сэкономить, в целом есть всякие select еще, которые тоже все избегают использовать.#unity #simd #math

1 сент. 2025 г.2 330В Telegram

Player LoopВместо MonoBehaviour на сцене можно использовать инжект в текущий луп. Для этого нужно понимать в какой именно мы хотим добавить вызов своего метода. Всего есть 8 групп:TimeUpdate = 0Initialization = 1EarlyUpdate = 2FixedUpdate = 3PreUpdate = 4Update = 5PreLateUpdate = 6PostLateUpdate = 7Использовать проще всего с инжектом при инициализации, но в принципе можно вызывать этот код когда угодно, как и удалять свою систему из обработки:[RuntimeInitializeOnLoadMethod]static void Inject() { var loop = PlayerLoop.GetCurrentPlayerLoop(); var sys = new PlayerLoopSystem { type = typeof(YourClassName), updateDelegate = () => Debug.Log("Custom Update") }; var index = 4; // PreUpdate (см список выше) loop.subSystemList[index].subSystemList = loop.subSystemList[index].subSystemList.Append(sys).ToArray(); PlayerLoop.SetPlayerLoop(loop);}#unity #playerloop

31 авг. 2025 г.2 600В Telegram

CallerFilePathAttributeЭтот аттрибут позволяет получить путь к файлу, из которого происходит вызов метода:void Sample([CallerFilePath] string file = null) { UnityEngine.Debug.Log(file);}Еще обратите внимание, что есть CallerMemberName (из какого метода вызов) и CallerLineNumber (на какой строке).#debug #csharp #code

30 авг. 2025 г.2 080В Telegram

https://youtu.be/GUVi04UCKsQПоговорили про AI, какие основные алгоритмы используют для этого, что из себя представляют, где что использовать#streams #ai

21 авг. 2025 г.2 880В Telegram

https://youtu.be/TilgB9G1G3gКогда-то давно я показывал видео про наброски rts, в этом видео рассматривается основная механика построения деревьев и поиск данных в них. На ее основе можно строить физику, коллизии, RVO, поиск целей и множество других интересных вещей.#becs #trees

1 авг. 2025 г.3 410В Telegram

https://docs.google.com/presentation/d/1LlxyWOz88aXjAQVVJdN3Fss08E8Rnu8k/edit?usp=drivesdk&ouid=113802151767136274653&rtpof=true&sd=trueДелюсь с вами моей презой для одного из закрытых ивентов. Тут собрана база, но вполне возможно, что в вашей компании/команде вы отходите от нее, чтобы делать мир лучше :)#events #presentation #allocations

31 июл. 2025 г.3 830В Telegram

Marshal.OffsetOfС помощью этого метода я в BECS нахожу где фактически находится поле в структуре, в которое я хотел бы записать данные.Я это использую в кодогене, когда я точно знаю название поля и хочу вписать туда данные, но использовать рефлексию для этого нет никакого желания.Работает примерно так:var offset = Marshal.OffsetOf(type, field.Name);codeGenOutput.Add($"var addr = (byte*)_addressOf(ref obj) + {offset};");codeGenOutput.Add($"*(({objType}*)addr) = new SomeStruct(...);");В итоге получается, что мы просто записываем данные в структуру obj без рефлексии и нам не важно приватное там поле или публичное.#unsafe #fieldoffset #marshal

12 июл. 2025 г.3 290В Telegram

https://www.youtube.com/watch?v=6syQWOWxUwYПро Players и Teams#becs #tutorials

6 июл. 2025 г.3 180В Telegram
Unity: Всё, что вы не знали о разработке — пост в ТГ канале

https://github.com/chromealex/ME.Monitor/tree/mainНаписал тут тулзу для мониторинга за серваками.Умеет ping, tcp, rest, выводит графики, рисует маршруты. Предназначена для сборки в качестве standalone/adroid/ios билдов. Строит наглядно визуализацию расположения серверов и маршруты к ним. Для примера есть Config.json с рандомными сервисами, которые можно легко заменить на свои.Проект написан на коленке и там ничего не структурировано, так что без поллитра вряд ли разберетесь. Тем не менее, вполне хорошее решение получилось и свою задачу выполняет отлично. Собираете билд, подменяете конфиг на свои серваки и вперед наблюдать.Предложения принимаются :)#unity #tools #monitoring

29 июн. 2025 г.3 270В Telegram