Unity 6.3
0 онлайн 95 гостей 3 в системе
Вход
Конвейеры отображения Шаг 70 из 129

Изменение параметров ассета URP во время выполнения

Вы можете изменить некоторые свойства ассета URP во время выполнения с помощью скриптов C#. Это может помочь настроить производительность на устройствах с оборудованием, которое не идеально соответствует любому из уровней качества в вашем проекте.

Примечание: Чтобы изменить свойство URP ассет с C# скрипт, свойство должно иметь set метод. Для получения дополнительной информации об этих свойствах см. Universal Render Pipeline ассеты API.

В следующем примере используются скрипт QualityControls и объект QualityController из раздела Изменить уровень качества, а также расширена функциональность для поиска активного ассета URP и изменения некоторых его свойств в соответствии с уровнем производительности оборудования.

  1. Откройте скрипт QualityControls.

  2. В начале скрипта добавьте using UnityEngine.Rendering и using UnityEngine.Rendering.Universal.

  3. Добавить метод с именем 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
        }
    }
    
  4. Получите активный ресурс 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;
        }
    }
    
  5. Добавьте инструкцию 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;
            }
        }
    }
    
  6. Добавить вызов метода 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 в сочетании с изменением уровней качества для точной настройки производительности вашего проекта для различных систем без необходимости создания уровня качества для каждой целевой конфигурации оборудования.