此页面包含有关如何获取、设置和配置 Unity 当前正在使用的渲染管线一系列操作,用于获取场景内容并在屏幕上显示。Unity 允许您从预构建的渲染管线中选择,或编写自己的渲染管线。 更多信息
请参阅 词汇表的信息。Unity 当前正在使用的渲染管线称为活动渲染管线。
为了渲染内容,Unity 可以使用内置渲染管线或基于可脚本化渲染管线 (SRP) 的渲染管线,其中包括通用渲染管线 (URP) 和高清渲染管线 (HDRP)。
要指定 Unity 使用哪个可脚本化渲染管线,请使用渲染管线资源。渲染管线资源告诉 Unity 使用哪个 SRP 以及如何配置它。如果您未指定渲染管线资源,则 Unity 使用内置渲染管线。
您可以创建多个使用相同渲染管线但具有不同配置的渲染管线资源;例如,您可以为不同的硬件质量级别使用不同的渲染管线资源。有关渲染管线资源的常规介绍,请参阅可脚本化渲染管线简介。有关 URP 的渲染管线资源的信息,请参阅通用渲染管线资源,有关 HDRP 的渲染管线资源的信息,请参阅高清渲染管线资源。
在 Unity 编辑器中或运行时更改活动渲染管线后,Unity 会立即使用新的活动渲染管线来渲染内容。如果您在 Unity 编辑器中,这包括游戏视图、场景场景包含游戏环境和菜单。将每个唯一的场景文件视为一个唯一的关卡。在每个场景中,您放置环境、障碍物和装饰,本质上是分块设计和构建您的游戏。 更多信息
请参阅 词汇表视图以及项目面板和检视器一个 Unity 窗口,显示有关当前选定游戏对象、资源或项目设置的信息,允许您检查和编辑值。 更多信息
请参阅 词汇表中材质的预览。
更改活动渲染管线时,必须确保项目中的资源和代码与新的渲染管线兼容;否则,您可能会遇到错误或意外的视觉效果。
图形设置和质量设置中的设置都决定了活动渲染管线。在图形设置中,您可以配置 Unity 默认使用的渲染管线。在质量设置中,您可以为给定的质量级别覆盖默认渲染管线。
要获取或设置默认渲染管线,请使用图形设置 > 可脚本化渲染管线设置(或其等效 API,GraphicsSettings.defaultRenderPipeline)。要获取或设置覆盖给定质量级别的默认渲染管线的渲染管线,请使用质量设置 > 渲染管线(或其等效 API,QualitySettings.renderPipeline)。
Unity 如下确定活动渲染管线
要在编辑器UI(用户界面) 允许用户与您的应用程序交互。Unity 目前支持三种 UI 系统。 更多信息
请参阅 词汇表中获取活动渲染管线,您必须检查图形设置和质量设置窗口。有关如何使用这些值来确定活动渲染管线的信息,请参阅确定活动渲染管线。
要将活动渲染管线设置为内置渲染管线,请从图形设置和质量设置中移除任何渲染管线资源。
操作方法
要将活动渲染管线设置为基于 SRP 的渲染管线,请告诉 Unity 将哪个渲染管线资源用作默认活动渲染管线,以及可选地为每个质量级别使用哪些渲染管线资源。
操作方法
在 C#脚本一段代码,允许您创建自己的组件、触发游戏事件、随时间修改组件属性并以任何您喜欢的方式响应用户输入。 更多信息
请参阅 词汇表中,您可以获取和设置活动渲染管线,并在活动渲染管线更改时接收回调。您可以在 Unity 编辑器的编辑模式或播放模式下执行此操作,或者在应用程序的运行时执行此操作。
为此,请使用以下 API
以下示例代码演示了如何使用这些 API
using UnityEngine;
using UnityEngine.Rendering;
public class ActiveRenderPipelineExample : MonoBehaviour
{
// In the Inspector, assign a Render Pipeline Asset to each of these fields
public RenderPipelineAsset defaultRenderPipelineAsset;
public RenderPipelineAsset overrideRenderPipelineAsset;
void Start()
{
GraphicsSettings.defaultRenderPipeline = defaultRenderPipelineAsset;
QualitySettings.renderPipeline = overrideRenderPipelineAsset;
DisplayCurrentRenderPipeline();
}
void Update()
{
// When the user presses the left shift key, switch the default render pipeline
if (Input.GetKeyDown(KeyCode.LeftShift)) {
SwitchDefaultRenderPipeline();
DisplayCurrentRenderPipeline();
}
// When the user presses the right shift key, switch the override render pipeline
else if (Input.GetKeyDown(KeyCode.RightShift)) {
SwitchOverrideRenderPipeline();
DisplayCurrentRenderPipeline();
}
}
// Switch the default render pipeline between null,
// and the render pipeline defined in defaultRenderPipelineAsset
void SwitchDefaultRenderPipeline()
{
if (GraphicsSettings.defaultRenderPipeline == defaultRenderPipelineAsset)
{
GraphicsSettings.defaultRenderPipeline = null;
}
else
{
GraphicsSettings.defaultRenderPipeline = defaultRenderPipelineAsset;
}
}
// Switch the override render pipeline between null,
// and the render pipeline defined in overrideRenderPipelineAsset
void SwitchOverrideRenderPipeline()
{
if (QualitySettings.renderPipeline == overrideRenderPipelineAsset)
{
QualitySettings.renderPipeline = null;
}
else
{
QualitySettings.renderPipeline = overrideRenderPipelineAsset;
}
}
// Print the current render pipeline information to the console
void DisplayCurrentRenderPipeline()
{
// GraphicsSettings.defaultRenderPipeline determines the default render pipeline
// If it is null, the default is the Built-in Render Pipeline
if (GraphicsSettings.defaultRenderPipeline != null)
{
Debug.Log("The default render pipeline is defined by " + GraphicsSettings.defaultRenderPipeline.name);
}
else
{
Debug.Log("The default render pipeline is the Built-in Render Pipeline");
}
// QualitySettings.renderPipeline determines the override render pipeline for the current quality level
// If it is null, no override exists for the current quality level
if (QualitySettings.renderPipeline != null)
{
Debug.Log("The override render pipeline for the current quality level is defined by " + QualitySettings.renderPipeline.name);
}
else
{
Debug.Log("No override render pipeline exists for the current quality level");
}
// If an override render pipeline is defined, Unity uses that
// Otherwise, it falls back to the default value
if (QualitySettings.renderPipeline != null)
{
Debug.Log("The active render pipeline is the override render pipeline");
}
else
{
Debug.Log("The active render pipeline is the default render pipeline");
}
// To get a reference to the Render Pipeline Asset that defines the active render pipeline,
// without knowing if it is the default or an override, use GraphicsSettings.currentRenderPipeline
if (GraphicsSettings.currentRenderPipeline != null)
{
Debug.Log("The active render pipeline is defined by " +GraphicsSettings.currentRenderPipeline.name);
}
else
{
Debug.Log("The active render pipeline is the Built-in Render Pipeline");
}
}
}