版本:Unity 6 (6000.0)
语言:英语
在运行时更改活动 URP 资源
使用 URP 配置包配置设置

在运行时更改 URP 资源设置

您可以使用 C# 脚本一段代码,允许您创建自己的组件,触发游戏事件,随着时间的推移修改组件属性并以任何您喜欢的方式响应用户输入。 了解更多
请参阅 词汇表
在运行时更改 URP 资源的一些属性。 这可以帮助您微调在硬件与项目中任何质量级别不完全匹配的设备上的性能。

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

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

  1. 打开 QualityControls 脚本。

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

  3. 如下所示,在 QualityControls 类中添加一个名为 ChangeAssetProperties 的方法,类型为 void

    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. 如下所示,使用 GraphicsSettings.currentRenderPipeline 获取活动 渲染管线一系列操作,将场景内容显示在屏幕上。 Unity 允许您从预构建的渲染管线中选择,或编写您自己的渲染管线。 了解更多
    请参阅 词汇表
    资源。

    注意:您必须使用 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. 在 ChangeAssetProperties 方法中添加一个 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. Start 方法中添加对 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();
    
            // 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 资源
使用 URP 配置包配置设置