Unity 的质量设置有多个预设级别,您也可以为项目添加更多级别。为了适应不同的硬件规格,可以在这些级别和 C# 脚本中关联的 URP 资源之间进行切换。以下示例展示了如何使用 API 更改质量设置级别和活动 URP 资源,以及如何在运行时更改 URP 资源中的特定设置。
注意:您应该仅在运行时且在性能不重要的位置(例如在加载屏幕期间或在静态菜单上)更改质量设置和 URP 资源设置。这是因为这些更改会造成暂时但重大的性能影响。
每个质量级别都使用 URP 资源来控制许多特定的图形设置。您可以将不同的 URP 资源分配给每个质量级别,并在运行时在它们之间进行切换。
要使用质量设置在 URP 资源之间切换,请确保将项目的质量级别配置为使用不同的 URP 资源。URP 3D Sample 场景默认具有此配置。
为每个质量级别创建 URP 资源。为此,请在项目窗口中右键单击并选择创建 (Create) > 渲染 (Rendering) > URP 资源(带有通用渲染器)(URP Asset (with Universal Renderer))。
注意:这些说明也适用于使用 2D 渲染器的 URP 资源。
根据需要配置并命名新的 URP 资源。
打开项目设置中的质量部分(编辑 (Edit) > 项目设置 (Project Settings) > 质量 (Quality))。
为每个 URP 资源分配一个质量级别。为此,请从级别列表中选择质量级别,然后转到渲染 (Rendering) > 渲染管线资源 (Render Pipeline Asset) 并选择为此质量级别创建的 URP 资源。为每个质量级别执行此操作。
您项目的质量级别现在已准备好用于在运行时在 URP 资源之间进行更改。
您可以通过 QualitySettings API 更改 Unity 在运行时使用的质量级别。通过如前所示的质量级别设置,您可以在 URP 资源和质量设置预设之间进行切换。
在以下简单示例中,C# 脚本使用了系统的总图形内存来确定适当的质量级别,而无需用户在打开构建的项目时提供任何输入。
创建一个名为 QualityControls 的新 C# 脚本。
打开 QualityControls 脚本并将 SwitchQualityLevel 方法添加到 QualityControls 类。
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public class QualityControls : MonoBehaviour
{
void Start()
{
}
private void SwitchQualityLevel()
{
}
}
在 SwitchQualityLevel 方法中添加 switch 语句,以通过 QualitySettings.SetQualityLevel() 方法选择质量级别,如下所示。
注意:每个质量级别都有一个索引,该索引与该级别在项目设置 (Project Settings) 窗口的质量 (Quality) 部分下列表中的位置匹配。列表顶部的质量级别指数为 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;
}
}
}
在 Start 方法中添加对 SwitchQualityLevel 方法的调用。这样可以确保质量级别仅会在场景首次加载时更改。
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;
}
}
}
打开您构建的项目在启动时加载的第一个场景。
创建一个空游戏对象并将其命名为 QualityController。在层级视图 (Hierarchy) 窗口中右键单击,然后选择创建空游戏对象 (Create Empty)。
在检视面板中打开 QualityController 对象。
将 QualityControls 脚本作为组件添加到 QualityController。
现在,当该场景加载时,Unity 会运行 QualityControls 脚本中的 SwitchQualityLevel 方法,该方法会检测系统的总图形内存并设置质量级别。质量级别将 URP 资源设置为活动渲染管线资源。
您可以创建更复杂的系统和检查序列来确定要使用的质量级别,但基本过程保持不变。在项目启动时,运行使用了 QualitySettings.SetQualityLevel 的脚本来选择质量级别,并通过该级别选择项目在运行时使用的 URP 资源。