Изменение параметров ассета URP во время выполнения
Вы можете изменить некоторые свойства ассета URP во время выполнения с помощью скриптов C#. Это может помочь настроить производительность на устройствах с оборудованием, которое не идеально соответствует любому из уровней качества в вашем проекте.
Примечание: Чтобы изменить свойство URP ассет с C# скрипт, свойство должно иметь
setметод. Для получения дополнительной информации об этих свойствах см. Universal Render Pipeline ассеты API.
В следующем примере используются скрипт QualityControls и объект QualityController из раздела Изменить уровень качества, а также расширена функциональность для поиска активного ассета URP и изменения некоторых его свойств в соответствии с уровнем производительности оборудования.
Откройте скрипт QualityControls.
В начале скрипта добавьте
using UnityEngine.Renderingиusing UnityEngine.Rendering.Universal.-
Добавить метод с именем
ChangeAssetPropertiesи типаvoidк Генеральной АссамблееQualityControlsкласс, как показано ниже.using System.Collections; using System.Collections.Generic; using UnityEngine; using UnityEngine.Rendering; using UnityEngine.Rendering.Universal; public class QualityController : MonoBehaviour { void Start() { // Select the appropriate Quality Level first SwitchQualityLevel(); } private void SwitchQualityLevel() { // Code from previous example } private void ChangeAssetProperties() { // New code is added to this method } } -
Получите активный ресурс Render Pipeline с помощью
GraphicsSettings.currentRenderPipeline, как показано ниже.Примечание: Вы должны использовать
asключевое слово, чтобы бросить Render Pipeline ассеты какUniversalRenderPipelineAssetтип для правильной работы скрипта.using System.Collections; using System.Collections.Generic; using UnityEngine; using UnityEngine.Rendering; using UnityEngine.Rendering.Universal; public class QualityController : MonoBehaviour { void Start() { // Select the appropriate Quality Level first SwitchQualityLevel(); } private void SwitchQualityLevel() { // Code from previous example } private void ChangeAssetProperties() { // Locate the current URP asset UniversalRenderPipelineAsset data = GraphicsSettings.currentRenderPipeline as UniversalRenderPipelineAsset; // Do nothing if Unity can't locate the URP asset if (!data) return; } } -
Добавьте инструкцию
switchв метод ChangeAssetProperties, чтобы установить значение свойств ассета URP.using System.Collections; using System.Collections.Generic; using UnityEngine; using UnityEngine.Rendering; using UnityEngine.Rendering.Universal; public class QualityController : MonoBehaviour { void Start() { // Select the appropriate Quality Level first SwitchQualityLevel(); } private void SwitchQualityLevel() { // Code from previous example } private void ChangeAssetProperties() { // Locate the current URP asset UniversalRenderPipelineAsset data = GraphicsSettings.currentRenderPipeline as UniversalRenderPipelineAsset; // Do nothing if Unity can't locate the URP asset if (!data) return; // Change URP asset settings based on the size of the device's graphics memory switch (SystemInfo.graphicsMemorySize) { case <= 1024: data.renderScale = 0.7f; data.shadowDistance = 50.0f; break; case <= 3072: data.renderScale = 0.9f; data.shadowDistance = 150.0f; break; default: data.renderScale = 0.7f; data.shadowDistance = 25.0f; break; } } } -
Добавить вызов метода
ChangeAssetPropertiesв методеStart. Это гарантирует, что ассет URP изменяется только при первой загрузке сцены.using System.Collections; using System.Collections.Generic; using UnityEngine; using UnityEngine.Rendering; using UnityEngine.Rendering.Universal; public class QualityController : MonoBehaviour { void Start() { // Select the appropriate Quality Level first SwitchQualityLevel(); // Fine tune performance with specific URP asset properties ChangeAssetProperties(); } private void SwitchQualityLevel() { // Code from previous example } private void ChangeAssetProperties() { // Locate the current URP asset UniversalRenderPipelineAsset data = GraphicsSettings.currentRenderPipeline as UniversalRenderPipelineAsset; // Do nothing if Unity can't locate the URP asset if (!data) return; // Change URP asset settings based on the size of the device's graphics memory switch (SystemInfo.graphicsMemorySize) { case <= 1024: data.renderScale = 0.7f; data.shadowDistance = 50.0f; break; case <= 3072: data.renderScale = 0.9f; data.shadowDistance = 150.0f; break; default: data.renderScale = 0.7f; data.shadowDistance = 25.0f; break; } } }
Теперь, когда эта сцена загружается, Unity обнаруживает общую графическую память системы и устанавливает свойства ассета URP соответствующим образом.
Вы можете использовать этот метод изменения определенных свойств ассета URP в сочетании с изменением уровней качества для точной настройки производительности вашего проекта для различных систем без необходимости создания уровня качества для каждой целевой конфигурации оборудования.