Version: 6000.3
语言: 中文
在运行时更改活动的URP资产
使用 URP Config 包配置设置

在运行时更改 URP 资产设置

你可以在运行时使用C#更改URP资产的某些属性脚本一段代码,允许您创建自己的组件、触发游戏事件、随时间修改组件属性以及以您喜欢的任何方式响应用户输入。更多信息
请参阅术语表
.这有助于微调硬件与项目中任何质量级别不完全匹配的设备上的性能。

注意:要使用 C# 脚本更改 URP 资产的属性,该属性必须具有set方法。有关这些属性的更多信息,请参阅通用渲染管线资产API

以下示例使用 更改质量级别(Change Quality Level) 分段中的 QualityControls 脚本和 QualityController 对象,并扩展了定位活动URP资产的功能,并更改其某些属性以适应硬件的性能级别。

  1. 打开 QualityControls 脚本。

  2. 在脚本顶部添加using UnityEngine.Renderingusing UnityEngine.Rendering.Universal.

  3. 添加名称为ChangeAssetProperties和类型voidQualityControls类,如下所示。

    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. 检索活动渲染管线获取场景内容并将其显示在屏幕上的一系列作。Unity 允许您从预构建的渲染管线中进行选择,或编写自己的渲染管线。更多信息
    请参阅术语表
    资产GraphicsSettings.currentRenderPipeline如下图所示。

    注意:您必须使用as关键字将渲染管线资产转换为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语句来设置 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资产
使用 URP Config 包配置设置