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

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

@unsafecsharp

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

1,740подписчиков

Открыть канал

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

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

    2 мар., 10:30

    Век живи - век учисьЯ вот только сегодня узнал, что оказывается можно писать не только так:var str =
    quot;{value}";
    А еще и вот так:var str = $"""{{value}}""";Или вот так:var str = $
    quot;""{{{value}}}""";
    Или проще говоря, от количества $ символов зависит количество скобочек. В целом довольно удобно иногда может быть. Я вот обнаружил это только сейчас, т.к. мне всегда хватало и одного $.#csharp #strings
    2,250331713932Открыть в Telegram
  • Unity: Всё, что вы не знали о разработке

    10 февр., 10:28изменён

    OverlayУ юнити, начиная с 2022.2, появилась возможность рисовать свои окна в SceneView, при этом не прибегая к костылям вида "подпишусь на колбэк GUI, потом нарисую хрен пойми где хрен пойми как".UnityEditor.Overlays.Overlay - позволяет это сделать очень просто и легко.[Overlay(typeof(SceneView), "YourUniqueId", "Caption", defaultDisplay = true)] public class YourOverlay : Overlay { public override VisualElement CreatePanelContent() { return new Label("Test"); } }В целом довольно удобно, когда нужны какие-то настройки объектов на сцене, раньше приходилось руками рисовать, а сейчас удобная тулза.#unity #editor #sceneview
  • Unity: Всё, что вы не знали о разработке

    20 дек. 2025 г., 08:42

    Удобное APIВы наверняка сталкивались с такой проблемой:void Method<T>(System.Action<T> callback) {...}То есть мы хотим вызвать метод, который вернет нам колбэк в какой-то момент. Например, что действие завершено. Все вроде хорошо, но если мы начнем это использовать, то сталкнемся с другой проблемой:Method<MyObj>(static (obj) => { // И вот тут нам явно не хватает данных при static });Отсюда 2 выхода: либо мы используем аллокации при замыкании, либо реализуем некий второй параметр, в который мы сможем положить любые данные:void Method<T1, T2>(T1 t1, System.Action<T1, T2> callback) {...}С точки зрения метода будем считать, что T1 - это замыкание, которое мы передаем в метод:Method<int, MyObj>(123, static (closure, obj) => { ... });
    3,14024962Открыть в Telegram
  • Unity: Всё, что вы не знали о разработке

    7 дек. 2025 г., 07:38

    Простые лайфхакиЧасто встречаю в разных проектах подобные конструкции (на самом деле обычно они страшнее, но я убрал все лишнее):var result = false; if (Method1() == true) result = true; if (Method2() == true) result = true; if (Method3() == true) result = true; ... return result;На самом деле этот код можно записать проще:var result = false; result |= Method1(); result |= Method2(); result |= Method3(); ... return result;
    2,770378766Открыть в Telegram
  • Unity: Всё, что вы не знали о разработке

    18 нояб. 2025 г., 11:11

    Довольно интересная задачка попалась на собеседовании в гугле: Есть матрица (массив массивов) вида [ [1, 0, 0, 0, 0, 1], [0, 1, 0, 1, 1, 1], [0, 0, 1, 0, 1, 0], [1, 0, 0, 0, 1, 0], [1, 0, 1, 1, 0, 0], [1, 0, 0, 0, 0, 1] ]Нужно реализовать метод, который найдет все острова. Островом считаются 1, которые не примыкают к границам. Диагонали не считаются за соединения. То есть на выходе должна быть матрица такого вида: [ [0, 0, 0, 0, 0, 0], [0, 1, 0, 0, 0, 0], [0, 0, 1, 0, 0, 0], [0, 0, 0, 0, 0, 0], [0, 0, 1, 1, 0, 0], [0, 0, 0, 0, 0, 0]
    3,0301164Открыть в Telegram
  • Unity: Всё, что вы не знали о разработке

    12 окт. 2025 г., 13:30

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

    6 окт. 2025 г., 14:04

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

    4 сент. 2025 г., 11:36

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

    4 сент. 2025 г., 10:18изменён

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

    4 сент. 2025 г., 05:34изменён

    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; }
  • Unity: Всё, что вы не знали о разработке

    1 сент. 2025 г., 18:49

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

    1 сент. 2025 г., 08:59

    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
    2,3604821Открыть в Telegram
  • Unity: Всё, что вы не знали о разработке

    31 авг. 2025 г., 14:15

    Player LoopВместо MonoBehaviour на сцене можно использовать инжект в текущий луп. Для этого нужно понимать в какой именно мы хотим добавить вызов своего метода. Всего есть 8 групп:TimeUpdate = 0 Initialization = 1 EarlyUpdate = 2 FixedUpdate = 3 PreUpdate = 4 Update = 5 PreLateUpdate = 6 PostLateUpdate = 7Использовать проще всего с инжектом при инициализации, но в принципе можно вызывать этот код когда угодно, как и удалять свою систему из обработки:[RuntimeInitializeOnLoadMethod] static void Inject() { var loop = PlayerLoop.GetCurrentPlayerLoop(); var sys = new PlayerLoopSystem { type = typeof(YourClassName),
  • Unity: Всё, что вы не знали о разработке

    30 авг. 2025 г., 07:56изменён

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

    21 авг. 2025 г., 15:03

    https://youtu.be/GUVi04UCKsQПоговорили про AI, какие основные алгоритмы используют для этого, что из себя представляют, где что использовать#streams #ai
    YouTubeunsafecsharp: [AI] FSM, BT, Utility AI, GOAP, Influence Maps, Steering Behaviour, Voronoi DiagramРассмотрим основные алгоритмы: [AI] FSM, BT, Utility AI, GOAP, Influence Maps, Steering Behvaiour, Voronoi Diagram Больше на канале https://t.me/unsafecsharp
  • Unity: Всё, что вы не знали о разработке

    1 авг. 2025 г., 18:53

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

    31 июл. 2025 г., 16:38

    https://docs.google.com/presentation/d/1LlxyWOz88aXjAQVVJdN3Fss08E8Rnu8k/edit?usp=drivesdk&ouid=113802151767136274653&rtpof=true&sd=trueДелюсь с вами моей презой для одного из закрытых ивентов. Тут собрана база, но вполне возможно, что в вашей компании/команде вы отходите от нее, чтобы делать мир лучше :)#events #presentation #allocations
    Google DocsПрезентация Allocs.pptxИ что с ними делать © Copyright PresentationGO.com – The free PowerPoint and Google Slides template library 1 Аллокации
    3,89043124211Открыть в Telegram
  • Unity: Всё, что вы не знали о разработке

    12 июл. 2025 г., 14:19

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

    6 июл. 2025 г., 21:06

    https://www.youtube.com/watch?v=6syQWOWxUwYПро Players и Teams#becs #tutorials
    YouTubeME.BECS #7: Players, TeamsКак использовать PlayersSystem, команды игроков
    3,19011221Открыть в Telegram
  • Unity: Всё, что вы не знали о разработке

    29 июн. 2025 г., 21:23

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