Как сделать ограничение фпс в юнити

Обновлено: 02.07.2024

Делаю новый прожект, ставлю туда куб, лампочку, куб скриптую чтобы крутился - всё.

Билди хоть на андроид, хоть на комп, хоть так запускай - фпс так-то ровный, но периодически (в основном раз в секунду, иногда как-то бессистемно) происходит какой-то микро-фриз. Этот микрофриз при любом фпс ломает восприятие, потому что уже всё не плавно. И в 3.5.7, и в 4.3.4 - всё одно. У меня бесплатный, но на форумах юнити даже люди с Про о том же пишут. На компе оно ещё терпимо, так как працесар всё ж мощный, рывок не сильно заметен, но на андроиде, хоть и тегра3, уже бесит (а там и сеть выключал, и режим отладки, все программы другие закрывал).

И как люди с этим живут? Это как-то решается или это такая милая особенность?

скорее всего сборщик мусора просыпается. если так, то не лечится.

Так чё собирать?
Во-первых, спецом не использую Ц-решотку, всё в ихнем яваскрипте (не знаю правда, как там мусор собирается вообще).
Во-вторых, в приведённом примере с кубом ничего нового не объявляется в процессе.

А сам же движок у них типо в Ц-плюс-плюсе, там же всё должно быть так волшебно и эффективно?

ну хер его знает, что там собирать - какие-нить внутренние штуки движка, ибо пустой билд 10-15 Мб на айфон/андроид весит. вообще, я юнити не уважаю, может поклонники лучше объяснят.

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

yaapelsinko
Это действительно возможно сборщик мусора,но слишком быстрая частота. Либо ты выжираешь память очень быстро и он вынужден постоянно делать Full GC, что намекает что ты неправильно создаешь объекты, либо тут что-то другое. Без профайлера не понять.

Iskander
> Приятно слышать объяснения специалиста.
я просто так выражаюсь в свободной форме, свою мысль донес. давай теперь в твоем мусоре покопаемся:

>Это действительно возможно
специалист.

>ты неправильно создаешь объекты,
ТС делает чистый проект с крутящимся кубом (скорее всего создает в редакторе). как это можно сделать неправильно?
специалист.

>либо тут что-то другое
специалист.

очков спецЫалиста набрано 3 из 3. приятно?

yaapelsinko
> куб скриптую чтобы крутился - всё.
стоит показать скрипт.

Я конечно не программист. но вы пробовали отключать Vsync? или наоборот включать в обе позиции. вот сколько работаю в Юнити как левелщик - ну вот жопой чую что он там очень странный, не такой как все :))

BingoBongo
> как это можно сделать неправильно?
Откуда я знаю? Я ведь код не видел, поэтому и весь мой пост сплошные предположения. Я же не такой крутой спец как ты, чтобы не видя кода автора и не зная что там собирать делать категоричные заявления.

Как крутишь куб то? Открой профайлер и посмотри, там цветным по серому все будет нарисовано.

Разве профайлер в бесплатной версии есть?

yaapelsinko
Поидее это нормальная ситуация. Скорее всего это драйвер.
Сколько фпс у тебя?

BingoBongo
ну хер его знает, что там собирать - какие-нить внутренние штуки движка, ибо пустой билд 10-15 Мб на айфон/андроид весит. вообще, я юнити не уважаю, может поклонники лучше объяснят.

Ты просто не умеешь его готовить. Если использовать известные оптимизации и техники, можно получать качественный билд.
Ну и надо понимать что первые 10 мб билда это как бы плеер, а не ресурсы. дальше размер будет расти медленнее.

kardinal
> Ты просто не умеешь его готовить. Если использовать известные оптимизации и
> техники, можно получать качественный билд.
> Ну и надо понимать что первые 10 мб билда это как бы плеер, а не ресурсы.
> дальше размер будет расти медленнее.
да мне пофиг что там весит 10 Мб, это нефига ненормально! и я с твоих слов понял, что не лечится. тот же скачек фпс у ТС (кстате, у меня в проектах похожая херня, только не так часто) - это недостаток оптимизации?

кстать, у меня предложение - через личку обменяться ссылками на проекты на юнити (ты мне свои, я тебе свои), которые лежат в открытом доступе в сторах.

и еще аргумент - посмотри Hearthstone от близардов. он даже на 3м айпаде иногда люто лагает. думаешь, не сумели приготовить?

Это весь код, который есть в проекте. Даже не в ц-решотке, как видно.

ФПС много, а как их может быть мало при такой сложной сцене. Я, однако, ограничиваю (точнее - не меняю ограничения) через настройки качества, дабы была вертикальная синхронизация. Ввиду того, что метод абдейт вызывается на каждом кадре и только от частоты кадров зависит, игры с шагом времени тут тоже ничего не меняют.

Профилера у меня нет, вот ещё, отдам я 3 штуки баксов за движок, который плавно вращать куб не может.

Очень распространенной проблемой новичков в разработке игр на движке Unity является плохая оптимизация, вследствие чего высокие системные требования, низкий FPS, высокий нагрев устройства и прочие неприятные последствия. Давайте рассмотрим 3 основные ошибки оптимизации, которые могут снижать FPS в разы.

1. FOREACH вместо FOR

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


2. Злоупотребление IEnumerator'ами

Такой функцией, как IEnumerator для отсчета времени пользоваться не стоит в тех случаях, когда время ожидания очень мало. Например, нельзя использовать их для движения или других подобных механик игры. Идеяльное применение - показ рекламы раз в X секунд, например раз в 3 минуты. Очень сильно влияет на производительность.


3. Частый вызов GetComponent () и подобных ему методов

Данная команда невероятно сильно нагружает процессор, из-за чего ее ни в коем случае нельзя использовать в методе Update. Если вы заметили у себя эту ошибку, срочно устраните ее и, возможно, FPS увеличится в разы.

Обложка: Методы оптимизации при разработке в Unity 3D

Использование Performance Profiler

Первое место, куда нужно смотреть, когда хочется улучшить производительность — это Unity Profiler. Эта функциональность доступна в Unity Pro и позволяет анализировать проблемные места. Профайлер — бесценный инструмент. С его помощью можно определить, где возникают проблемы с частотой кадров. Для его использования запустите игру на мобильном устройстве и профайлер на PC. Когда вы запускаете игру, профайлер начинает загружать данные о производительности.

Чтобы использовать профайлер на мобильных устройствах, сделайте билд в Developer mode. Из документации Unity:

Чтобы иметь возможность подключиться к плееру, плеер должен быть запущен с помощью опции Development Build, которая находится в диалоговом окне Build Settings.

Здесь также можно отметить флажок для автоматического соединения редактора и плеера. Профайлер показывает график использования CPU во время игры. Просто подключите мобильное устройство к машине для разработки и проходите игру. Профайлер покажет все проблемы в режиме реального времени. Он разбивает активности на Rendering, Scripts, Physics, GarbageCollector, VSync и другие. В мобильных играх часто бывают проблемы с рендерингом. Иногда скачки производительности возникают в скриптах при загрузке сцены, но в этом нет ничего необычного. Некоторые скачки связаны с физикой.

Физика и искусственный интеллект

Я опишу несколько основных идей оптимизации кода физики и перейду к графике.

Static batching

Это фича Unity, которая экономит много циклов CPU. Каждый раз, когда объект рендерится, происходит Draw Call — команда для CPU или GPU о том, что объект должен отрендериться. Unity запускает несколько вызовов отрисовки и накладывает их друг на друга, это и формирует сцену. Однако каждый Draw Call требует ресурсов CPU, поэтому мы хотим минимизировать их количество.

Тут и стоит использовать Batching. Он нужен для того, чтобы не делать лишние Draw Calls. Batching бывает двух видов: статический и динамический. Статический дает лучшую производительность, поэтому мы всегда стараемся использовать его.

Чтобы эффективно применять Static Batching, используйте как можно меньше различных материалов. Для этого скомбинируйте все материалы в одну большую текстуру. Последний шаг — добавить Lightmap к сцене. Поскольку мы практически не используем память для текстуры объектов, можно сделать довольно подробную Lightmap, и проблем с памятью не возникнет.

Для использования Static Batching поставьте флажок Static в свойствах объекта. Его можно использовать только для объектов, которые не перемещаются, не вращаются и не масштабируются в сцене.

Dynamic Batching

Для не статических объектов можно использовать Dynamic Batching. Объекты с Dynamic Batching требуют определенные ресурсы на каждую вершину, поэтому он применяется только к мешам, содержащим менее 900 вершин. Наш шейдер использует Vertex Position, UV и Colors. Таким образом, у нас может быть до 300 вершин на объект.

Некоторые полезные советы из руководства Unity:

  • Динамический батчинг связан с дополнительной нагрузкой для каждой вершины, так что он применим только к мешам, в сумме содержащим менее 900 вершин.
  • Если ваш шейдер использует Vertex Position, Normal и единственный UV, то вы можете батчить до 300 вершин; тогда как если шейдер использует Vertex Position, Normal, UV0, UV1 и Tangent, то только 180 вершин.
  • Не масштабируйте. Объекты с масштабом (1,1,1) и (2,2,2) не будут батчиться.
  • Равномерно масштабированные объекты не будут батчиться с неравномерно масштабированными.
  • Использование различных материалов приведет к сбою батчинга.
  • Объекты с Lightmap имеют дополнительный (скрытый) параметр материала: смещение/масштаб в Lightmap, поэтому объекты с Lightmap не будут батчиться.

Заметьте: если у объекта есть анимация, но при этом есть часть, которая никогда не двигается, можно отметить эту часть как статическую, и она не будет мешать анимации.

Отображение и просмотр количества кадров FPS в Unity

Отображение и просмотр количества кадров FPS в Unity

FPS можно посмотреть 3 способами:

Просмотр игры во время тестирования разработки


Просмотрите его, как показано на рисунке ниже:

Положение в красном поле на рисунке соответствует отображению FPS.

Просмотр профилировщика во время разработки и тестирования

Как показано на рисунке ниже, его можно вызвать следующим способом. Просмотр профилировщика 。

На рисунке ниже показана тестовая среда выполнения проекта в Unity. Просмотр профилировщика . Значение FPS отображается в окне дисплея первой части ЦП, и оно более интуитивно понятное.

Отображение FPS после релиза

код показан ниже:


Просто повесьте код на любой объект в сцене проекта. После запуска или публикации данные FPS будут отображаться в красном поле, как показано на рисунке ниже.

Интеллектуальная рекомендация


Расширенные знания MySQL (четыре) - Объяснение

Предисловие: объяснение (план выполнения) с использованием ключевого слова объяснения может имитировать оптимизатор для выполнения операторов запроса SQL, чтобы знать, как MySQL обрабатывает оп.


Клавиатура IOS закрывает влияние на опыт работы

Для систем iOS всплывающая клавиатура по умолчанию не закрывает явную работу. Если основная функциональная кнопка страницы находится в нижней части страницы, то пользователю необходимо выключить клави.


Постоянная высокопроизводительная база данных Redis Alibaba Cloud NVM

задний план Как простая и эффективная база данных K / V с открытым исходным кодом, Redis может использоваться в различных сценариях, таких как кэширование памяти и постоянное хранение, для обслуживани.


docker (2) образ докера

оглавление Один рывок Два бега Механизм песочницы Три зеркала списка 3.1 Объем зеркала 3.2 Свисающее зеркало 3.3 Зеркальное отображение среднего слоя Четыре удаления зеркала 4.1 Без тегов и удалено 4.


Как добавить платную функцию чтения для веб-сайта WordPress

Вам также может понравиться

"Введение в ACM" Учебное пособие по базовому вводу и выводу системы обучения ACM Blue Bridge Cup

"Введение в ACM" Учебное пособие по базовому вводу и выводу системы обучения ACM Blue Bridge Cup Прежде чем познакомить вас с системой OJ на тренировочной площадке, позвольте мне сначала пре.

Android8.1 Camera2 слайд левый модуль, настройки слайд вправо

Android8.1 Camera2 слайд левый модуль, настройки слайд вправо 1. Измените GestureManager, скользящий класс управления жестами host/src/com/mediatek/camera/gesture/GestureManager.java Во-вторых, в Came.


Android humanoid client (v5.7.1) - выпадающий список новых вещей (список фильтров)


RobotFramework подключается к базе данных MySQL с помощью база данных

Во-первых, RobotFramework Connection MySQL База данных 1, установить базы данных пользователя, Pymysql Выполните: PIP Установить RobotFramework-databaseLibrary CMD Команда выполнения: PIP Установка Py.

Читайте также: