Оптимизация игры в Unity. Повышаем FPS

แชร์
ฝัง
  • เผยแพร่เมื่อ 25 ต.ค. 2024

ความคิดเห็น • 97

  • @NightTrainCode
    @NightTrainCode  3 ปีที่แล้ว +7

    🔥 MonoCache 2.0 уже лежит на GitHub, он немного отличается от версии из видео, но в релизах есть и старая. Рекомендую сразу использовать версию 2.0 и прочитать короткую и понятную документацию)
    github.com/MeeXaSiK/MonoCache

    • @lewaplay
      @lewaplay 2 ปีที่แล้ว

      Ты в своём MonoCache 2.0 за каким то хером прямо в GlobalUpdate логику покраски текста консоли хранишь и в Singleton у тебя where TSingleton : MonoBehaviour хотя ты форсишь MonoCache... это какой то рофл? Может это надо пофиксить?

    • @NightTrainCode
      @NightTrainCode  2 ปีที่แล้ว +2

      @@lewaplay Покраску текста можно вынести в другой класс, не спорю)
      А насчёт синглтона
      var instance = Singleton.Instance для лохов?)
      И неважно от чего наследуешься

  • @SCEEF
    @SCEEF 3 ปีที่แล้ว +16

    Самое то, перед дембелем, впитать новых знаний, чтобы в июле обновить все старые проекты, дав им оптимизации и новой жизни, а за одно и в новых не делать старых ошибок

    • @NightTrainCode
      @NightTrainCode  3 ปีที่แล้ว +2

      Аее, успехов 😎🔥

  • @lkghost7
    @lkghost7 3 ปีที่แล้ว +2

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

  • @-toplib-
    @-toplib- ปีที่แล้ว +8

    Спасибо, я из 29 ФПС оптимизировал от 41 мин до 76 ФПС +-

  • @RumTerry
    @RumTerry 3 ปีที่แล้ว +11

    Стоило бы использовать HashSet вместо List для пула объектов. Во первых - однозначное отсутствие копий, во вторых - вычислительная сложность удаления объекта - O(1), в отличие от листа, который будет перестраивать внутренний массив.

    • @N1kkyS
      @N1kkyS 3 ปีที่แล้ว +2

      Однако итерация по HashSet и Dictionary медленнее чем у списка (не так чтобы сильно, но все же), я тоже так сначала думал что хешсет хорошее решение, но отказался. Плюс есть вопросы к скоростям for(i= ) и foreach. Первые два вроде как не работают через for.
      Буду рад если поправишь!

    • @RumTerry
      @RumTerry 3 ปีที่แล้ว

      @@N1kkyS это возможно только в самом Unity из-за старого mono или оверхеда от IL2CPP. Внутри хэшсета всё равно хранится массив, как и в списке

    • @N1kkyS
      @N1kkyS 3 ปีที่แล้ว

      @@RumTerry а что насчет скорости итераций через фор и форич?

    • @RumTerry
      @RumTerry 3 ปีที่แล้ว

      @@N1kkyS опять же старый mono. В .NET эти моменты давно оптимизированы, надо дождаться пока Unity на него перейдут

    • @francyi-d
      @francyi-d 5 หลายเดือนก่อน

      Ну... Вроде структура данных у HashSet располагает элементы не линейно, друг за другом, как в List, так? Ну и вроде как итерация по такому линейному прямому массиву как в List должна быть быстрее, правильно? Ну там, кеш CPU, все дела. Плюс Span - хорошая вещь для быстрой итерации. С обычным массивом или List должна работать, а вот сможет ли она работать с структурой данных такой как хеш таблица... Очень сомневаюсь.

  • @vladyan01
    @vladyan01 2 ปีที่แล้ว +2

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

    • @NightTrainCode
      @NightTrainCode  2 ปีที่แล้ว +2

      Если чему-то уделять хотя бы полчаса каждый день, то всё возможно, спасибо)

  • @lewaplay
    @lewaplay 2 ปีที่แล้ว +1

    Супер! Спасибо

    • @NightTrainCode
      @NightTrainCode  2 ปีที่แล้ว

      На здоровье. В GitHub лежит MonoCache 2.0. Рекомендую сразу установить его, избавит от потенциальных ошибок) Понятная документация там имеется

  • @Arrrr-gj6kk
    @Arrrr-gj6kk 29 วันที่ผ่านมา +1

    По сути, вы изобрели ECS

  • @Pravda-bw3tj
    @Pravda-bw3tj 3 ปีที่แล้ว +6

    сегодня он Упдейт Менеджер завтра Директор

  • @olegggames6409
    @olegggames6409 2 หลายเดือนก่อน

    Гениально

  • @Андрей-в7и6ь
    @Андрей-в7и6ь 3 ปีที่แล้ว +1

    О, прикольно, я первый) Я б такие ролики смотрел, с кайфом, продолжай!!!

    • @NightTrainCode
      @NightTrainCode  3 ปีที่แล้ว +3

      Спасибо)
      Идеи для видосов есть, в ближайшем будущем:
      - Больше уроков по оптимизации
      - Фишки в C#
      - Обзор моего воксельного лоу-поли шутана про Россию
      - Другие крутые плюшки по Unity (как сделать персонажа, селектор оружия, стрельба, как сделать 3д модель человека по фотографии, анимация и др.) и тонкости

    • @Андрей-в7и6ь
      @Андрей-в7и6ь 3 ปีที่แล้ว +1

      @@NightTrainCode О, крутые темки! Я начинающий, мне это интересно) сейчас вот задумался об оптимизации, так как дофига объектов на карте будет, тысячи тайлов, юниты и тд. По с# тоже интересно, в частности как в идеале делать юниты и здания, наследниками от общего класса, нужны ли там интерфейсы и тд, я пока не особо шарю. Вобщем любому материалу буду рад, твори!))

    • @NightTrainCode
      @NightTrainCode  3 ปีที่แล้ว +1

      @@Андрей-в7и6ь Для твоей игры идеально подойдёт мой видос, если юнитам нужны апдейты
      Ещё в юнити есть Dynamic Batching, включается вроде в "Player Preferences -> Player", после активации нужно на каждом материале включить "Enable GPU instancing"
      Ещё поищи в Ютубе про Occlusion Culling в юнити, про него тоже видос планирую сделать
      Мог бы ещё про свет рассказать, но там слишком долго, поэтому вариант один - ждать мой видос 😹

    • @Андрей-в7и6ь
      @Андрей-в7и6ь 3 ปีที่แล้ว +2

      @@NightTrainCode да, по апдейтам взял на заметку реализую) слышал про эту тему, но ты хорошо объяснил, без лишней воды, спасибо! по occlusion culling у блогера с забавным ником Владимир свет Игродельский узнал)) толково рассказывает, старается подробно и чтоб начинающим понятно было. Я уже попробовал его применять но в сравнении с тупой деактивацией объектов на определённом расстоянии от камеры кулинг вроде бы медленнее, хотя надо будет ещё позже проверить.. Batching ущё не крутил, спасибо за наводку) подписался, с удовольствием посмотрю твои следующие видосы!

    • @NightTrainCode
      @NightTrainCode  3 ปีที่แล้ว

      @@Андрей-в7и6ь Благодарю 🔥
      Да, он тоже хорошо объясняет, один из немногих, на кого я подписан

  • @grandsunhar
    @grandsunhar 2 ปีที่แล้ว

    Супер

  • @Comrade_Suli
    @Comrade_Suli 3 ปีที่แล้ว +2

    Них..я не понял, но выглядит интересно

  • @cyberkyb461
    @cyberkyb461 2 ปีที่แล้ว +1

    Когда закидываю скрипт Global Update в пустышку выдаёт ошибку "Can't add script component 'Global Update' because the script class cannot be found. Make sure that there are no compile errors and that the file name and class name match. "

    • @INFinitely_Unregistered
      @INFinitely_Unregistered 2 ปีที่แล้ว

      Проверь совпадают ли названия класса и файла скрипта

    • @MrArtrynk
      @MrArtrynk ปีที่แล้ว

      Какое название класса, а какое у скрипта?(наверно по дефолту так и осталось).

  • @temptemp3346
    @temptemp3346 2 ปีที่แล้ว

    Вопрос, а можно ли использовать листы и встроенный в них ForEach?

  • @QQQ-cy6di
    @QQQ-cy6di 5 หลายเดือนก่อน +1

    как я сюда попал? зачем я это смотрю? ведь я даже не программист 🤔

  • @davityeghoyan9957
    @davityeghoyan9957 3 ปีที่แล้ว +3

    можно сразу ESC

    • @NightTrainCode
      @NightTrainCode  3 ปีที่แล้ว +1

      Ролик про ECS уже есть на канале 😎

  • @mactepmac
    @mactepmac 2 ปีที่แล้ว +1

    очень странно. сделал все как на видео. прироста фпс вообще никакого.

    • @_mirai
      @_mirai ปีที่แล้ว +2

      Потому что ты увидишь прирост фпс только тогда, когда у тебя на сцене будет очень много таких объектов с логикой в апдейте, как у автора. Когда их мало ты вообще ничего не заметишь.

  • @kormak7817
    @kormak7817 ปีที่แล้ว

    Можно узнать что за песня в конце видоса?

    • @sashakuzin4458
      @sashakuzin4458 2 หลายเดือนก่อน

      Ruby Amanfu - Didn't

  • @Anton-ny6tx
    @Anton-ny6tx 3 ปีที่แล้ว +1

    Сп*зжено с канала Пиксая без указания ссылок на первоисточник? Круто! Респект!

    • @NightTrainCode
      @NightTrainCode  3 ปีที่แล้ว +3

      Его видоса и канала в настоящее время я найти не могу, а ценная информация должна быть доступна всем 🔥

    • @grimseal
      @grimseal 3 ปีที่แล้ว +2

      @@NightTrainCode он их скрыл из общего списка видосов, т.к. переориентировал канал на свою игу, но их все еще можно найти если зайти к нему в плейлисты.
      th-cam.com/users/Pixeyeplaylists

    • @NightTrainCode
      @NightTrainCode  3 ปีที่แล้ว +1

      @@grimseal Опа, нифига ты сыщик) 🔥

  • @sestareknewgamestar2631
    @sestareknewgamestar2631 3 ปีที่แล้ว +1

    Привет! Это решение точно будет лучше в плане оптимизации,?

    • @NightTrainCode
      @NightTrainCode  3 ปีที่แล้ว +1

      Небольшой прирост фпс будет, если на сцене куча апдейтов
      Здесь и свои нюансы есть, например, если важен порядок выполнения апдейтов, то с этим способом, возможно, будут проблемы)

    • @KadykovDenis
      @KadykovDenis ปีที่แล้ว

      @@NightTrainCode а если применять не update, а yield return null в разных карутинах? будет ли прирост если объединить в одну?

  • @ДелайДобро-в9ж
    @ДелайДобро-в9ж 3 ปีที่แล้ว +2

    Так, а если у меня 100 апдейтов, а не 1к, то целесообразно ли это все использовать?

    • @NightTrainCode
      @NightTrainCode  3 ปีที่แล้ว +1

      Естественно, даже если у тебя всего лишь два апдейта)
      Такая реализации во многом будет получше :)

    • @ivanm71
      @ivanm71 3 ปีที่แล้ว +12

      @@NightTrainCode чем же она лучше? Накидает кто-то потом на такие монобехи анимаций, короутин. Захочет запаузить объект, перестав вызывать Tick , и все сломается

    • @oleksandrmartysh7534
      @oleksandrmartysh7534 2 ปีที่แล้ว +4

      @@ivanm71 Хорошо сказано! Корень всех зол - миниоптимизации там, где они не нужны. :)

    • @bq_g9369
      @bq_g9369 ปีที่แล้ว +3

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

    • @Bushido_Cat
      @Bushido_Cat 5 หลายเดือนก่อน

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

  • @alexwinston3635
    @alexwinston3635 3 ปีที่แล้ว +1

    Где ты этому научился?

    • @NightTrainCode
      @NightTrainCode  3 ปีที่แล้ว

      Самоучка + спасибо Пиксаю за конкретно этот способ

  • @Kostyan_Sigaev
    @Kostyan_Sigaev ปีที่แล้ว

    Ну а если у меня автосимулятор?

  • @samvelnorekyan2397
    @samvelnorekyan2397 2 ปีที่แล้ว

    А можем с Start() тоже так делать?

    • @polandpolandpoland6622
      @polandpolandpoland6622 2 ปีที่แล้ว

      Можно, только зачем? Ты же не будешь среди геймплея дёргать 40 тысяч стартов из-за которых появятся статтеры, а в начале сцены один кадр длиной даже 200 мс никакой погоды не сделает

  • @frost2519
    @frost2519 3 ปีที่แล้ว +1

    дарова у меня тут возникла одна проблемка я не могу открыть архив из видео можешь мне скинуть в вк скрипты отдельно?

    • @NightTrainCode
      @NightTrainCode  3 ปีที่แล้ว

      Хола,
      MonoCache: drive.google.com/file/d/1y77YEHZG7OZEzS1l8YwgfqZSO5KRuySg/view?usp=sharing
      GlobalUpdate: drive.google.com/file/d/1h6AXdyGrc7FpUmkchLddTONbAA3PuLtv/view?usp=sharing

    • @frost2519
      @frost2519 3 ปีที่แล้ว

      @@NightTrainCode спасиб большое)

    • @NightTrainCode
      @NightTrainCode  3 ปีที่แล้ว

      @@frost2519 На здоровье)

    • @frost2519
      @frost2519 3 ปีที่แล้ว +2

      @@NightTrainCode я тут на юнити делал шутер но я незнаю как сделать стрельбу из автомата можешь снят тутор как сделать стрельбу просто я поискал на ютубе но все видосы старые и половина скриптов не работают пожалуйсто)

    • @NightTrainCode
      @NightTrainCode  3 ปีที่แล้ว +2

      @@frost2519 Могу организовать)

  • @timurmingulov1535
    @timurmingulov1535 ปีที่แล้ว

    Сомнительное решение на самом деле. Доп-наследование, а прирост не такой уж и существенный, а функция апдейт используется довольно редко.
    Может стоит поискать какое-то более производительное решение, раз уж прям нужно отрисовать тучу чего-либо? Например, партикли или шейдера.

  • @red4ss
    @red4ss 3 ปีที่แล้ว

    Где взял модельки для своей игры?

    • @NightTrainCode
      @NightTrainCode  3 ปีที่แล้ว

      В ролике про Light Probes я об этом рассказывал)

    • @NightTrainCode
      @NightTrainCode  3 ปีที่แล้ว

      А персонажа и оружие сам делал

  • @ИмяФамилия-у9щ2п
    @ИмяФамилия-у9щ2п 2 ปีที่แล้ว +2

    Ну чет честно говоря слабо. Было 29fps стало 36fps. Это даже не в два раза. Я понимаю если было б 30 fps стало 700. Тогда бы да.

    • @NightTrainCode
      @NightTrainCode  2 ปีที่แล้ว +8

      29 и 36 фпс - это уже огромная разница. Особенно если проект коммерческий
      Один прием оптимизации вряд-ли решил проблему, нужно комплексное решение

  • @Tarpopo
    @Tarpopo 3 ปีที่แล้ว

    еее, пиксай, к сожалению уже скрыл кучу уроков у себя на канале

  • @sucompanygames
    @sucompanygames 2 ปีที่แล้ว

    error CS0246: The type or namespace name 'MonoCache' could not be found (are you missing a using directive or an assembly reference?)

  • @IIIllllllllll
    @IIIllllllllll 3 ปีที่แล้ว

    *ТВОЮ М@ТЬ, ЧТО У ВАС ЗДЕСЬ ПРОИСХОДИТ..А?*

  • @Star-j6b6e
    @Star-j6b6e 2 ปีที่แล้ว +3

    Бред полнейший, закрытая реализация Update именно так и устроено, одним событием вызывается все. Кешировать Update накера надо? Чтобы использовать позже? Прошлые кадры для отображение куба разве для этого :((( не проще ли сделать спрайт и отображать 1000-раз быстрее.

  • @Game_max88
    @Game_max88 ปีที่แล้ว

    Я не могу повесить скрипт

  • @NezertorcheaT
    @NezertorcheaT ปีที่แล้ว

    что, как?

  • @Wk3611
    @Wk3611 10 หลายเดือนก่อน

    У меня только 20 фпс отнялось)

  • @coolplayerivan
    @coolplayerivan ปีที่แล้ว

    еще бы накинуть систему джобей и норм

  • @Veyron104
    @Veyron104 ปีที่แล้ว

    мде, нормально же всё было, зачем маты в видосе? У некоторых дети ходят по комнате...

    • @NightTrainCode
      @NightTrainCode  ปีที่แล้ว +1

      На ютубе к такому нужно быть готовым (и это моё первое видео) и для детей есть отдельный раздел на TH-cam

    • @Veyron104
      @Veyron104 ปีที่แล้ว

      @@NightTrainCode я понимаю что канал не для детей в плане контента, но они могут быть рядом когда я смотрю видосы, но это первый видос с матом на этом канале) надеюсь на "культурные" ролики в дальнейшем)

    • @NightTrainCode
      @NightTrainCode  ปีที่แล้ว +2

      @@Veyron104 Это мой первый и единственный ролик с матом)

    • @Veyron104
      @Veyron104 ปีที่แล้ว +1

      @@NightTrainCode эт называется фиаско) как я так открыл ролик из подписок и попал на единственный ролик с матом на канале)))

    • @NightTrainCode
      @NightTrainCode  ปีที่แล้ว +3

      @@Veyron104 Пхахах, закон подлости 😹

  • @mihanikgames3304
    @mihanikgames3304 3 ปีที่แล้ว

    шо? выигрыш 3мс или 3 фпс? хрень какая то...

    • @NightTrainCode
      @NightTrainCode  3 ปีที่แล้ว

      На канале есть видео про NightCache, обновленная система. Там есть детальное сравнение, где выигрыш по производительности - 25%

    • @Александр-с6з5к
      @Александр-с6з5к 3 หลายเดือนก่อน

      @@NightTrainCode Я похоже слепой, не могу найти видео по NightCache, можете дать ссылку?

  • @chmo123
    @chmo123 4 หลายเดือนก่อน

    И какой смысл? Мне надо из 30 сделать 100
    Нахуя мне 3 фпс? Делать гораздо сложнее
    А смысла почти нет
    А чё делать с Fixed Update? У меня на нем вообще вся игра работает

  • @ivankramarenko
    @ivankramarenko ปีที่แล้ว

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

    • @EndMan
      @EndMan ปีที่แล้ว

      Типо русские не имеют мозга? Вы ксенофоб?

    • @ivankramarenko
      @ivankramarenko ปีที่แล้ว +1

      @@EndMan нуууу.. я люблю людей, но не тех кто причиняют другим вред на прямую или косвенно, а этот контент вреден, как и практика синглтона в большой системе

    • @_mirai
      @_mirai ปีที่แล้ว

      ​@@ivankramarenkoиспользование одного апдейта удобно хотя бы потому, что можно отключить все апдейты из одного места, тем самым поставив игру на паузу, не трогая тайм скейл. Плюс можно отключать апдейт самому себе, когда он не нужен, а потом снова включать.
      Так что один апдейт это скорее хорошая практика, чем наоборот.
      Кстати, а где ты в этом видео сингелтон увидел?)

  • @vg-vovagatova289
    @vg-vovagatova289 ปีที่แล้ว

    У меня очень сильно грузит процесс: semaphore.waitforsignal
    У меня игра для пк, как мне исправить это? Потому что-то больше 30%+

    • @NightTrainCode
      @NightTrainCode  ปีที่แล้ว +1

      Это нормально. Насколько помню, это процессор ждёт видеокарту, когда он подготовил кадры (вроде бы когда подготових их больше, чем видеокарта может отрисовать), а она их отрисовывает.