您可以使用此委托在 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; } }