您可以使用 C# 脚本一段代码,允许您创建自己的组件,触发游戏事件,随着时间的推移修改组件属性并以任何您喜欢的方式响应用户输入。 了解更多
请参阅 词汇表 在运行时更改 URP 资源的一些属性。 这可以帮助您微调在硬件与项目中任何质量级别不完全匹配的设备上的性能。
注意:要使用 C# 脚本更改 URP 资源的属性,该属性必须具有
set
方法。 有关这些属性的更多信息,请参阅 通用渲染管线资源 API。
以下示例使用 更改质量级别 部分中的 QualityControls 脚本和 QualityController 对象,并扩展了功能以定位活动 URP 资源并更改其某些属性以适合硬件的性能级别。
打开 QualityControls 脚本。
在脚本顶部添加 using UnityEngine.Rendering
和 using UnityEngine.Rendering.Universal
。
如下所示,在 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
}
}
如下所示,使用 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;
}
}
在 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;
}
}
}
在 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 资源属性,并结合更改质量级别来微调项目的性能,使其适应不同的系统,而无需为每个目标硬件配置创建质量级别。