Тёмный

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

Night Train Code
Подписаться 9 тыс.
Просмотров 27 тыс.
50% 1

Опубликовано:

 

26 окт 2024

Поделиться:

Ссылка:

Скачать:

Готовим ссылку...

Добавить в:

Мой плейлист
Посмотреть позже
Комментарии : 97   
@NightTrainCode
@NightTrainCode 3 года назад
🔥 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 года назад
@@lewaplay Покраску текста можно вынести в другой класс, не спорю) А насчёт синглтона var instance = Singleton.Instance для лохов?) И неважно от чего наследуешься
@SCEEF
@SCEEF 3 года назад
Самое то, перед дембелем, впитать новых знаний, чтобы в июле обновить все старые проекты, дав им оптимизации и новой жизни, а за одно и в новых не делать старых ошибок
@NightTrainCode
@NightTrainCode 3 года назад
Аее, успехов 😎🔥
@-toplib-
@-toplib- Год назад
Спасибо, я из 29 ФПС оптимизировал от 41 мин до 76 ФПС +-
@lkghost7
@lkghost7 3 года назад
такой своеобразный пул, я бы конечно изначально не применял такое архитектурное решение ), но подход интересный это да.
@RumTerry
@RumTerry 3 года назад
Стоило бы использовать HashSet вместо List для пула объектов. Во первых - однозначное отсутствие копий, во вторых - вычислительная сложность удаления объекта - O(1), в отличие от листа, который будет перестраивать внутренний массив.
@N1kkyS
@N1kkyS 3 года назад
Однако итерация по 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 должна работать, а вот сможет ли она работать с структурой данных такой как хеш таблица... Очень сомневаюсь.
@Pravda-bw3tj
@Pravda-bw3tj 3 года назад
сегодня он Упдейт Менеджер завтра Директор
@NightTrainCode
@NightTrainCode 3 года назад
🤣🤣🤣
@Arrrr-gj6kk
@Arrrr-gj6kk 29 дней назад
По сути, вы изобрели ECS
@lewaplay
@lewaplay 2 года назад
Супер! Спасибо
@NightTrainCode
@NightTrainCode 2 года назад
На здоровье. В GitHub лежит MonoCache 2.0. Рекомендую сразу установить его, избавит от потенциальных ошибок) Понятная документация там имеется
@vladyan01
@vladyan01 2 года назад
Как вообще возможно в этом всем разобраться, а еще и придумывать что-то, жесть, люди с другой планеты
@NightTrainCode
@NightTrainCode 2 года назад
Если чему-то уделять хотя бы полчаса каждый день, то всё возможно, спасибо)
@olegggames6409
@olegggames6409 2 месяца назад
Гениально
@cyberkyb461
@cyberkyb461 2 года назад
Когда закидываю скрипт 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 Год назад
Какое название класса, а какое у скрипта?(наверно по дефолту так и осталось).
@Андрей-в7и6ь
@Андрей-в7и6ь 3 года назад
О, прикольно, я первый) Я б такие ролики смотрел, с кайфом, продолжай!!!
@NightTrainCode
@NightTrainCode 3 года назад
Спасибо) Идеи для видосов есть, в ближайшем будущем: - Больше уроков по оптимизации - Фишки в C# - Обзор моего воксельного лоу-поли шутана про Россию - Другие крутые плюшки по Unity (как сделать персонажа, селектор оружия, стрельба, как сделать 3д модель человека по фотографии, анимация и др.) и тонкости
@Андрей-в7и6ь
@Андрей-в7и6ь 3 года назад
@@NightTrainCode О, крутые темки! Я начинающий, мне это интересно) сейчас вот задумался об оптимизации, так как дофига объектов на карте будет, тысячи тайлов, юниты и тд. По с# тоже интересно, в частности как в идеале делать юниты и здания, наследниками от общего класса, нужны ли там интерфейсы и тд, я пока не особо шарю. Вобщем любому материалу буду рад, твори!))
@NightTrainCode
@NightTrainCode 3 года назад
@@Андрей-в7и6ь Для твоей игры идеально подойдёт мой видос, если юнитам нужны апдейты Ещё в юнити есть Dynamic Batching, включается вроде в "Player Preferences -> Player", после активации нужно на каждом материале включить "Enable GPU instancing" Ещё поищи в Ютубе про Occlusion Culling в юнити, про него тоже видос планирую сделать Мог бы ещё про свет рассказать, но там слишком долго, поэтому вариант один - ждать мой видос 😹
@Андрей-в7и6ь
@Андрей-в7и6ь 3 года назад
@@NightTrainCode да, по апдейтам взял на заметку реализую) слышал про эту тему, но ты хорошо объяснил, без лишней воды, спасибо! по occlusion culling у блогера с забавным ником Владимир свет Игродельский узнал)) толково рассказывает, старается подробно и чтоб начинающим понятно было. Я уже попробовал его применять но в сравнении с тупой деактивацией объектов на определённом расстоянии от камеры кулинг вроде бы медленнее, хотя надо будет ещё позже проверить.. Batching ущё не крутил, спасибо за наводку) подписался, с удовольствием посмотрю твои следующие видосы!
@NightTrainCode
@NightTrainCode 3 года назад
@@Андрей-в7и6ь Благодарю 🔥 Да, он тоже хорошо объясняет, один из немногих, на кого я подписан
@grandsunhar
@grandsunhar 2 года назад
Супер
@Comrade_Suli
@Comrade_Suli 3 года назад
Них..я не понял, но выглядит интересно
@mactepmac
@mactepmac 2 года назад
очень странно. сделал все как на видео. прироста фпс вообще никакого.
@_mirai
@_mirai Год назад
Потому что ты увидишь прирост фпс только тогда, когда у тебя на сцене будет очень много таких объектов с логикой в апдейте, как у автора. Когда их мало ты вообще ничего не заметишь.
@temptemp3346
@temptemp3346 2 года назад
Вопрос, а можно ли использовать листы и встроенный в них ForEach?
@frost2519
@frost2519 3 года назад
дарова у меня тут возникла одна проблемка я не могу открыть архив из видео можешь мне скинуть в вк скрипты отдельно?
@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 года назад
@@NightTrainCode я тут на юнити делал шутер но я незнаю как сделать стрельбу из автомата можешь снят тутор как сделать стрельбу просто я поискал на ютубе но все видосы старые и половина скриптов не работают пожалуйсто)
@NightTrainCode
@NightTrainCode 3 года назад
@@frost2519 Могу организовать)
@Kostyan_Sigaev
@Kostyan_Sigaev Год назад
Ну а если у меня автосимулятор?
@ДелайДобро-в9ж
@ДелайДобро-в9ж 3 года назад
Так, а если у меня 100 апдейтов, а не 1к, то целесообразно ли это все использовать?
@NightTrainCode
@NightTrainCode 3 года назад
Естественно, даже если у тебя всего лишь два апдейта) Такая реализации во многом будет получше :)
@ivanm71
@ivanm71 3 года назад
@@NightTrainCode чем же она лучше? Накидает кто-то потом на такие монобехи анимаций, короутин. Захочет запаузить объект, перестав вызывать Tick , и все сломается
@oleksandrmartysh7534
@oleksandrmartysh7534 2 года назад
@@ivanm71 Хорошо сказано! Корень всех зол - миниоптимизации там, где они не нужны. :)
@bq_g9369
@bq_g9369 Год назад
я не советую делать то что на видео, я тестировал разные нагрузки, не только через профайлер. вышло что юнити справляется с индивидуальными апдейтами на обьектах лучше , чем если прогонять это все через листы или арреи каждый фрейм. может сейчас ситуация другая с юнити дотс, но не с такой реализацией 100%.
@Bushido_Cat
@Bushido_Cat 5 месяцев назад
@@bq_g9369согласен, эта реализация не чуть не повысит производительность, так как сама жрет дополнительную память на обслуживания самой себя с кучей экземпляров которые создаются и уничтожаются.
@kormak7817
@kormak7817 Год назад
Можно узнать что за песня в конце видоса?
@sashakuzin4458
@sashakuzin4458 2 месяца назад
Ruby Amanfu - Didn't
@QQQ-cy6di
@QQQ-cy6di 5 месяцев назад
как я сюда попал? зачем я это смотрю? ведь я даже не программист 🤔
@sestareknewgamestar2631
@sestareknewgamestar2631 3 года назад
Привет! Это решение точно будет лучше в плане оптимизации,?
@NightTrainCode
@NightTrainCode 3 года назад
Небольшой прирост фпс будет, если на сцене куча апдейтов Здесь и свои нюансы есть, например, если важен порядок выполнения апдейтов, то с этим способом, возможно, будут проблемы)
@KadykovDenis
@KadykovDenis Год назад
@@NightTrainCode а если применять не update, а yield return null в разных карутинах? будет ли прирост если объединить в одну?
@timurmingulov1535
@timurmingulov1535 Год назад
Сомнительное решение на самом деле. Доп-наследование, а прирост не такой уж и существенный, а функция апдейт используется довольно редко. Может стоит поискать какое-то более производительное решение, раз уж прям нужно отрисовать тучу чего-либо? Например, партикли или шейдера.
@alexwinston3635
@alexwinston3635 3 года назад
Где ты этому научился?
@NightTrainCode
@NightTrainCode 3 года назад
Самоучка + спасибо Пиксаю за конкретно этот способ
@davityeghoyan9957
@davityeghoyan9957 3 года назад
можно сразу ESC
@NightTrainCode
@NightTrainCode 3 года назад
Ролик про ECS уже есть на канале 😎
@samvelnorekyan2397
@samvelnorekyan2397 2 года назад
А можем с Start() тоже так делать?
@polandpolandpoland6622
@polandpolandpoland6622 2 года назад
Можно, только зачем? Ты же не будешь среди геймплея дёргать 40 тысяч стартов из-за которых появятся статтеры, а в начале сцены один кадр длиной даже 200 мс никакой погоды не сделает
@Anton-ny6tx
@Anton-ny6tx 3 года назад
Сп*зжено с канала Пиксая без указания ссылок на первоисточник? Круто! Респект!
@NightTrainCode
@NightTrainCode 3 года назад
Его видоса и канала в настоящее время я найти не могу, а ценная информация должна быть доступна всем 🔥
@grimseal
@grimseal 3 года назад
@@NightTrainCode он их скрыл из общего списка видосов, т.к. переориентировал канал на свою игу, но их все еще можно найти если зайти к нему в плейлисты. ru-vid.complaylists
@NightTrainCode
@NightTrainCode 3 года назад
@@grimseal Опа, нифига ты сыщик) 🔥
@red4ss
@red4ss 3 года назад
Где взял модельки для своей игры?
@NightTrainCode
@NightTrainCode 3 года назад
В ролике про Light Probes я об этом рассказывал)
@NightTrainCode
@NightTrainCode 3 года назад
А персонажа и оружие сам делал
@ИмяФамилия-у9щ2п
@ИмяФамилия-у9щ2п 2 года назад
Ну чет честно говоря слабо. Было 29fps стало 36fps. Это даже не в два раза. Я понимаю если было б 30 fps стало 700. Тогда бы да.
@NightTrainCode
@NightTrainCode 2 года назад
29 и 36 фпс - это уже огромная разница. Особенно если проект коммерческий Один прием оптимизации вряд-ли решил проблему, нужно комплексное решение
@Game_max88
@Game_max88 Год назад
Я не могу повесить скрипт
@IIIllllllllll
@IIIllllllllll 3 года назад
*ТВОЮ М@ТЬ, ЧТО У ВАС ЗДЕСЬ ПРОИСХОДИТ..А?*
@Tarpopo
@Tarpopo 3 года назад
еее, пиксай, к сожалению уже скрыл кучу уроков у себя на канале
@Star-j6b6e
@Star-j6b6e 2 года назад
Бред полнейший, закрытая реализация Update именно так и устроено, одним событием вызывается все. Кешировать Update накера надо? Чтобы использовать позже? Прошлые кадры для отображение куба разве для этого :((( не проще ли сделать спрайт и отображать 1000-раз быстрее.
@NezertorcheaT
@NezertorcheaT Год назад
что, как?
@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?)
@Wk3611
@Wk3611 10 месяцев назад
У меня только 20 фпс отнялось)
@coolplayerivan
@coolplayerivan Год назад
еще бы накинуть систему джобей и норм
@mihanikgames3304
@mihanikgames3304 3 года назад
шо? выигрыш 3мс или 3 фпс? хрень какая то...
@NightTrainCode
@NightTrainCode 3 года назад
На канале есть видео про NightCache, обновленная система. Там есть детальное сравнение, где выигрыш по производительности - 25%
@Александр-с6з5к
@Александр-с6з5к 3 месяца назад
@@NightTrainCode Я похоже слепой, не могу найти видео по NightCache, можете дать ссылку?
@Veyron104
@Veyron104 Год назад
мде, нормально же всё было, зачем маты в видосе? У некоторых дети ходят по комнате...
@NightTrainCode
@NightTrainCode Год назад
На ютубе к такому нужно быть готовым (и это моё первое видео) и для детей есть отдельный раздел на RU-vid
@Veyron104
@Veyron104 Год назад
@@NightTrainCode я понимаю что канал не для детей в плане контента, но они могут быть рядом когда я смотрю видосы, но это первый видос с матом на этом канале) надеюсь на "культурные" ролики в дальнейшем)
@NightTrainCode
@NightTrainCode Год назад
@@Veyron104 Это мой первый и единственный ролик с матом)
@Veyron104
@Veyron104 Год назад
@@NightTrainCode эт называется фиаско) как я так открыл ролик из подписок и попал на единственный ролик с матом на канале)))
@NightTrainCode
@NightTrainCode Год назад
@@Veyron104 Пхахах, закон подлости 😹
@chmo123
@chmo123 4 месяца назад
И какой смысл? Мне надо из 30 сделать 100 Нахуя мне 3 фпс? Делать гораздо сложнее А смысла почти нет А чё делать с Fixed Update? У меня на нем вообще вся игра работает
@ivankramarenko
@ivankramarenko Год назад
рекомендую, данный способ оптимизаций, ну оч полезный, если вы с росеи, канешн, норм людям бог дал мозг
@EndMan
@EndMan Год назад
Типо русские не имеют мозга? Вы ксенофоб?
@ivankramarenko
@ivankramarenko Год назад
@@EndMan нуууу.. я люблю людей, но не тех кто причиняют другим вред на прямую или косвенно, а этот контент вреден, как и практика синглтона в большой системе
@_mirai
@_mirai Год назад
​@@ivankramarenkoиспользование одного апдейта удобно хотя бы потому, что можно отключить все апдейты из одного места, тем самым поставив игру на паузу, не трогая тайм скейл. Плюс можно отключать апдейт самому себе, когда он не нужен, а потом снова включать. Так что один апдейт это скорее хорошая практика, чем наоборот. Кстати, а где ты в этом видео сингелтон увидел?)
@vg-vovagatova289
@vg-vovagatova289 Год назад
У меня очень сильно грузит процесс: semaphore.waitforsignal У меня игра для пк, как мне исправить это? Потому что-то больше 30%+
@NightTrainCode
@NightTrainCode Год назад
Это нормально. Насколько помню, это процессор ждёт видеокарту, когда он подготовил кадры (вроде бы когда подготових их больше, чем видеокарта может отрисовать), а она их отрисовывает.
Далее
NAH UH
00:17
Просмотров 2,4 млн
РЕАЛЬНЫЙ масштаб Майнкрафта!
12:40
Optimizing a Unity game, Part 1. Batching
4:16
Просмотров 81 тыс.
NAH UH
00:17
Просмотров 2,4 млн