Задать вопрос
  • Почему рекомендуется использовать private а не просто ставить везде Public?

    K0TlK
    @K0TlK
    Василий Банников, Плохо гуглил.
    66d7c39b4f062732558412.png

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

    Если тебе это не очевидно, соболезную.
    В чем заключается ценность приватных полей, если они абсолютно везде? Каким образом понять, что поле следует сделать публичным?
    Предвосхищая зеркальный вопрос на вопрос:
    • Если у тебя в проекте условно 5% приватных полей от всего кол-ва полей, то ВНЕЗАПНО, приватные поля не просто так понапиханы, а они должны тут быть. И говорит о том, что они должны тут быть тот факт, что приватные поля - редкость, исключение из правил.
    • Поле следует сделать приватным, если оно не должно быть доступно никому извне даже для чтения. Как пример - мьютекс должен быть приватным.

    Удивительно сложный рефакторинг - нажать две кнопки в райдере или любом другом иде.

    Зачем тогда приводить этот пример, если он примитивный и несостоятельный? Можешь, вместо того, чтобы отвечать на все остальные вопросы, привести пример того, как реализовать статы персонажа (сила, ловкость и тд) не используя публичные поля и чтобы это все было потом удобно использовать.

    В чем заключается хрупкость? То, что мододел сломал все, не почитав документацию, проблема исключительно мододела.
    Написано
  • Почему рекомендуется использовать private а не просто ставить везде Public?

    K0TlK
    @K0TlK
    Василий Банников, Во-первых, я не про тот индирекшен, чтобы понять про какой я говорю, загугли значение этого слова.

    Во-вторых, каким образом жит компилятор уберет тебе прыжки по указателям в случае с классами?

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

    В-четвертых, этому примеру с хп уже миллион лет. Если разработчику больше 12 лет (от роду), он прекрасно будет понимать, что должна быть какая-то функция/метод для нанесения урона и не будет менять хп напрямую.

    В-пятых, удобная и гибкая система модов может быть реализована только с повсеместным использованием публичных полей, чтобы как можно меньше ограничивать мододелов.
    Написано
  • Почему рекомендуется использовать private а не просто ставить везде Public?

    K0TlK
    @K0TlK
    Если никогда не задумывался, то пора начать задумываться, вместо того, чтобы задавать этот вопрос в интернете. В интернете тебе напишут десятистраничные пасты о "безопасности", невозможности изменить поле извне и о том как хорошо иметь везде приватные поля. В реальном мире бездумное использование приватных полей приводит:
    К нечитабельному коду. Когда вместо публичного поля используется конструкция типа
    [SerializeField] 
    private TypeName _field1;
    [SerializeField] 
    private TypeName2 _field2;
    
    public TypeName Field1 => _field1;
    public TypeName Field2 => _field2;

    или еще хуже:
    [field: SerializeField] public TypeName Property {get; private set;}


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

    К тому, что ты не будешь понимать с первого взгляда на код, действительно ли эта переменная настолько важная, что должна быть приватной или приватной ее сделал бездарь, который насмотрелся видео на ютубе / (начитался статей в интернете / книг) от таких же бездарностей.
    Написано
  • В чем принципиальная разница в unity между private и public?

    K0TlK
    @K0TlK
    leremin, Табличка "не трогать" Васю не остановит, как я и написал выше, если он захочет что-то изменить, он заменит приват на паблик. Если эта табличка висит абсолютно везде, то ее польза начинает превращаться во вред, т.к. становится невозможно сходу определить где приватное поле означает, что все сломается, если его изменить, а где оно просто так впихнуто, потому что так сказали "умные дяди" в книжке.

    Твой пример несостоятельный. Во-первых, зачем кому-то может понадобиться изменять поле версии? Во-вторых, даже если ты изменишь это поле, то запустишь программу, чтобы проверить работает ли то, что ты сделал, программа не будет работать, откатишь изменения назад. И опять же, если бы поле версии было приватным, а всё остальное подавляющее большинство полей - публичными, то сразу было бы понятно, даже тому самому Васе, что это поле трогать не нужно. Но в ситуации, когда у тебя 10 приватных полей и одно публичное свойство, которое возвращает данные из приватного поля, и так по всему проекту, становится невозможным определить действительно ли это поле настолько важное, что оно должно быть приватным.
    Написано
  • В чем принципиальная разница в unity между private и public?

    K0TlK
    @K0TlK
    jaroslav1245, В контексте юнити - паблик поля видны в инспекторе, прайват - нет. Больше различий нет.

    Приватными поля делают потому что в какой-то книжке/статье/видео на ютуб кто-то написал/сказал, что так нужно делать и так правильно. В реальности же, в подавляющем большинстве случаев, приватные поля попросту не нужны и мешаются, вынуждая тебя плодить немыслимое количество методов (отобразить данные в ui, подсчитать что-то, основываясь на части данных этого класса, повзаимодействовать с другим классом). Аргумент с безопасностью абсолютно бредовый. Что мешает Васе изменить приватное поле на публичное или использовать рефлексию и достать данные этим способом? Если Вася захочет, он сделает свое грязное дело и никакие приватные поля его не остановят.

    Ограничение доступа к данным, когда объект находится в каком-то неправильном состоянии, как написал алекс - один из немногих(если не единственный) адекватных юзкейсов приватных полей. Но таких случаев крайне мало, на ум приходит только многопоток и использования мьютекса, чтобы ограничить доступ к данным из разных потоков. Методы, которые кидают исключения, избегай, т.к., потом эти исключения нужно будет обрабатывать, это лишняя сущность, которую нужно будет поддерживать.
    Написано
  • Проблема с кодом в Unity Ecs, как исправить?

    K0TlK
    @K0TlK
    Ты пытаешься использовать метод конвертации, который заменили другим. Гугли документацию к Entities последней версии
    Написано
  • Нашёл скрипт но он инвертированный по горизонтали в юнити?

    K0TlK
    @K0TlK
    Найди другой, который не инвертирован.
    Написано
  • Как бы вы оптимизировали большую сцену в 2D игре?

    K0TlK
    @K0TlK
    mayton2019, мудрый филин, если ты не разработчик игр или не разработчик на юнити и не знаешь работают ли твои идеи, то может не нужно давать советы в той области, в которой ты не разбираешься?

    Весь код

    Движение 10000 юнитов находится в самом низу, занимает 5 строчек кода.

    Скрин из профайлера в эдиторе.
    65cb5bea8e5eb824716010.png

    Как можешь видеть, движение 10000 юнитов занимает 0.05ms
    Рендер занимает 7ms и он занимает так много времени из-за конвертации float3 в vector3, если делать умнее и конвертировать только матрицу, а не отдельно позицию, вращение и скейл, времени оно занимать будет меньше.
    При этом я никак не фильтрую сущности, отрисовываются абсолютно все 10000
    И это метрики из эдитора.

    Вот скрин из билда:
    Ссылка на имгур

    Верхнее число - фреймтайм, нижнее - количество кадров в секунду
    Это на 10000
    А вот на 100000:
    Ссылка на имгур
    Делай выводы
  • Как бы вы оптимизировали большую сцену в 2D игре?

    K0TlK
    @K0TlK
    Евгений Иванов, проседает потому что их юнитевский батчинг обрабатывает и отправляет на отрисовку даже ту геометрию, что не попадает в камеру. если нужно отрисовывать и обрабатывать только то, что находится на определенной дистанции от персонажа или попадает в камеру, делай свой батчинг и отрисовывай спрайты сам через rendermesh/rendermeshinstanced/rendermeshindirect
  • Как синхронизировать Input с FixedUpdate?

    K0TlK
    @K0TlK
    input ни с чем не синхронизирован. это просто метод, который ты вызываешь там, где тебе нужно. фиксед апдейт вызывается движком не каждый кадр, а раз в определенное время, поэтому и персонаж прыгает через раз. замени фиксед апдейт на обычный апдейт и не делай ту дичь с флагами, что написана в ответе.
  • Как лучше сделать проверку для возможности использования предмета?

    K0TlK
    @K0TlK
    yraiv, и снова одна проверка в кадр, не повлияет абсолютно ни на что
  • Как лучше сделать проверку для возможности использования предмета?

    K0TlK
    @K0TlK
    нет никакого правильно. твой вариант нормальный, что ты там хочешь оптимизировать? 1 рейкаст в кадр никакой роли не сыграет абсолютно, он по времени даже одной десятой миллисекунды не займет.
  • Как считать время у большого количества объектов?

    K0TlK
    @K0TlK
    yraiv, не будет оно лагать. просто не используй юнитевский апдейт в предметах, а обновляй их из одного места. всё. если будет лагать, тогда будешь думать как лучше сделать
  • Как считать время у большого количества объектов?

    K0TlK
    @K0TlK
    yraiv, 500 штук и у тебя уже лагает? или ты думаешь, что будет лагать? 500 раз сравнить числа для процессора как капля в море.
  • Как оптимизировать события с большим количеством вещей?

    K0TlK
    @K0TlK
    yraiv, оптимизируются по-разному, задай какой-то конкретный вопрос и тебе ответят
  • Как оптимизировать события с большим количеством вещей?

    K0TlK
    @K0TlK
    или как-то можно это упростить
    можно, называется полиморфизм подтипов.
    как-то странно выглядит
    вопрос твой тоже как-то странно выглядит, непонятна суть.
  • Почему дёргается камера при движении?

    K0TlK
    @K0TlK
    yraiv, и где здесь камера дергается? когда у тебя зеленые круги появляются, они не дергаются. дергаются у тебя два белых круга, потому что на них коллайдеры и они друг друга отталкивают
  • Почему дёргается камера при движении?

    K0TlK
    @K0TlK
    yraiv, так ты текст то напиши, который в качестве ссылки должен отображаться >здесь</a>