版本: Unity 6 (6000.0)
语言英语
  • C#

Camera.onPreRender

建议更改

成功!

感谢您帮助我们提高 Unity 文档的质量。虽然我们无法接受所有提交,但我们确实阅读用户提出的每项建议并根据需要进行更新。

关闭

提交失败

由于某些原因,您的建议更改无法提交。请<a>稍后再试</a>。感谢您抽出时间帮助我们提高 Unity 文档的质量。

关闭

取消

切换到手册
public static Camera.CameraCallback onPreRender;

描述

您可以使用此委托在 Camera 渲染场景之前执行自定义代码。

在内置渲染管线中,Unity 会在任何 Camera 开始渲染之前调用此 onPreRender。要在此处执行自定义代码,请创建与 CameraCallback 签名匹配的回调,并将它们添加到此委托中。

对于仅适用于单个 Camera 且需要您的脚本位于同一个 GameObject 上的类似功能,请参阅 MonoBehaviour.OnPreRender.

如果您使用的是可脚本化渲染管线(例如通用渲染管线),请使用 RenderPipelineManager

Unity 会在 Camera 执行其剔除操作后调用 onPreRender。这意味着,如果您进行影响 Camera 所见内容的更改,该更改将从下一帧开始生效。要对当前帧中的 Camera 所见内容进行更改,请使用 Camera.onPreCull.

当 Unity 调用 onPreRender 时,Camera 的渲染目标和深度纹理尚未设置。如果您需要访问它们,可以使用 CommandBuffer 在渲染循环中的稍后时间执行代码。

using UnityEngine;

public class CameraCallbackExample : MonoBehaviour { // Add your callback to the delegate's invocation list void Start() { Camera.onPreRender += OnPreRenderCallback; }

// Unity calls the methods in this delegate's invocation list before rendering any camera void OnPreRenderCallback(Camera cam) { Debug.Log("Camera callback: Camera name is " + cam.name);

// Unity calls this for every active Camera. // If you're only interested in a particular Camera, // check whether the Camera is the one you're interested in if (cam == Camera.main) { // Put your custom code here } }

// Remove your callback from the delegate's invocation list void OnDestroy() { Camera.onPreRender -= OnPreRenderCallback; } }