Изменение активного ассета URP во время выполнения
Unity имеет несколько предустановленных уровней Настроек Качества, и вы можете добавить еще больше в свой проект. Для того, чтобы приспособиться к различным спецификациям оборудования, вы можете переключаться между этими уровнями и связанным с ними ассетом URP из скриптов C#. Следующие примеры показывают, как использовать API для изменения уровней настроек Качества и активного ассета URP, и как изменить конкретные настройки в ассете URP во время выполнения.
Примечание: менять настройки Quality и настройки ассета URP во время выполнения следует только там, где производительность некритична, — например, на экранах загрузки или в статичных меню. Дело в том, что такие изменения вызывают временное, но заметное падение производительности.
Изменить активный ресурс URP
Каждый уровень качества использует ассет URP для управления многими специфическими графическими настройками. Вы можете назначить различные ассеты URP каждому уровню качества и переключаться между ними во время выполнения.
Настройка параметров качества Project
Чтобы использовать настройки качества для переключения между ресурсами URP, убедитесь, что уровни качества вашего проекта настроены на использование различных ресурсов URP. Образцовая сцена URP 3D имеет эту конфигурацию по умолчанию.
-
Создайте URP ресурс для каждого уровня качества. Для этого щелкните правой кнопкой мыши в окне Project и выберите Создать > Рендирование > URP Ресурс (с универсальным рендерером).
Примечание: Настоящие инструкции действуют также для URP ассетов, использующих 2D Рендлер.
Настройте и дайте имена новым ассетам URP по мере необходимости.
Откройте раздел Качество в Настройках Project (Изменить > Project Настройки > Качество).
Назначьте каждому URP ассету уровень качества. Для этого выберите уровень качества из списка Уровни, затем перейдите к Рендеринг > Render Pipeline Ассет и выберите URP ассет, который вы создали для этого уровня качества. Выполните это для каждого уровня качества.
Уровни качества вашего проекта теперь готовы к использованию для переключения между ассетами URP во время выполнения.
Изменить уровень качества
Вы можете изменить уровень качества, используемый Unity во время выполнения, с помощью QualitySettings API. При настройке уровней качества, как показано выше, это позволяет вам переключаться между URP ассетами, а также между предварительными настройками качества.
В следующем простом примере скрипт C# использует общую графическую память системы для определения соответствующего уровня качества без ввода данных пользователем при открытии созданного проекта.
Создайте новый скрипт C# с именем QualityControls.
-
Откройте скрипт QualityControls и добавьте
SwitchQualityLevelметод кQualityControlsclass.using System.Collections; using System.Collections.Generic; using UnityEngine; public class QualityControls : MonoBehaviour { void Start() { } private void SwitchQualityLevel() { } } -
Добавьте инструкцию
switchв методSwitchQualityLevel, чтобы выбрать уровень качества с помощью методаQualitySettings.SetQualityLevel(), как показано ниже.Примечание: Каждый уровень качества имеет индекс, который соответствует позиции уровня в списке в разделе Качество окна Настройки Project. Уровень качества в верхней части списка имеет индекс 0. Этот индекс подсчитывает только те уровни качества, которые вы указали как включенные для целевой платформы любой построенной версии вашего проекта.
using System.Collections; using System.Collections.Generic; using UnityEngine; public class QualityControls : MonoBehaviour { void Start() { } private void SwitchQualityLevel() { // Select Quality settings level (URP asset) based on the size of the device's graphics memory switch (SystemInfo.graphicsMemorySize) { case <= 2048: QualitySettings.SetQualityLevel(1); break; case <= 4096: QualitySettings.SetQualityLevel(2); break; default: QualitySettings.SetQualityLevel(0); break; } } } -
Добавить вызов метода
SwitchQualityLevelв методеStart. Это гарантирует, что уровень качества изменяется только при первой загрузке сцены.using System.Collections; using System.Collections.Generic; using UnityEngine; public class QualityControls : MonoBehaviour { void Start() { SwitchQualityLevel(); } private void SwitchQualityLevel() { // Select Quality settings level (URP asset) based on the size of the device's graphics memory switch (SystemInfo.graphicsMemorySize) { case <= 2048: QualitySettings.SetQualityLevel(1); break; case <= 4096: QualitySettings.SetQualityLevel(2); break; default: QualitySettings.SetQualityLevel(0); break; } } } Откройте первую сцену, которую ваш созданный проект загружает при запуске.
Создайте пустой GameObject и назовите его QualityController. Для этого щелкните правой кнопкой мыши в окне Hierarchy и выберите Create Empty.
Откройте объект QualityController в Inspector.
Добавьте скрипт QualityControls к QualityController в качестве компонента.
Теперь, когда эта сцена загружается, Unity запускает метод SwitchQualityLevel в скрипте QualityControls, который обнаруживает общую графическую память системы и устанавливает уровень качества. Уровень качества устанавливает ассет URP как активный ассет Render Pipeline.
Вы можете создать более сложные системы и последовательности проверок для определения уровня качества, но основополагающий процесс остается прежним. Когда проект запускается, запускается скрипт, который использует QualitySettings.SetQualityLevel для выбора уровня качества и через него выбирает ассет URP для проекта, который будет использоваться во время выполнения.