docs.unity3d.com
    显示 / 隐藏目录

    使用 beginCameraRendering 事件

    本页的示例将展示如何使用 beginCameraRendering 事件来运行自定义方法。

    beginCameraRendering 事件概述

    Unity 在每一帧中渲染每个活动摄像机之前会引发一个 beginCameraRendering 事件。如果摄像机处于非活动状态(例如,如果摄像机游戏对象上的 Camera 组件复选框被清除),Unity 不会引发此摄像机的 beginCameraRendering 事件。

    当您订阅此事件的方法时,您可以在 Unity 渲染摄像机之前执行自定义逻辑。自定义逻辑的示例包括渲染额外的摄像机以渲染纹理,并将这些纹理用于平面反射或监控摄像机视图等效果。

    RenderPipelineManager 类中的其他事件提供了更多自定义 URP 的方法。您也可以将本文所述的原则应用于这些事件。

    beginCameraRendering 事件示例

    此示例演示如何订阅 beginCameraRendering 事件的方法。 要按照此示例中的步骤进行操作,请使用__通用项目模板__创建一个新的 Unity 项目。

    1. 在场景中,创建一个立方体。将这个立方体命名为“Example Cube”。
    2. 在项目中,创建一个 C# 脚本。将这个脚本命名为 URPCallbackExample。
    3. 将以下代码复制并粘贴到这个脚本中。

      using UnityEngine;
      using UnityEngine.Rendering;
      
      public class URPCallbackExample : MonoBehaviour
      {
          // Unity 在启用该组件时会自动调用这一方法
          private void OnEnable()
          {
              // 添加 WriteLogMessage 作为 RenderPipelineManager.beginCameraRendering 事件的委托
              RenderPipelineManager.beginCameraRendering += WriteLogMessage;
          }
      
          // Unity 在禁用该组件时会自动调用这一方法
          private void OnDisable()
          {
              // 移除作为 RenderPipelineManager.beginCameraRendering 事件的委托的 WriteLogMessage
              RenderPipelineManager.beginCameraRendering -= WriteLogMessage;
          }
      
          // 当这一方法是 RenderPipeline.beginCameraRendering 事件的委托时,Unity 每次引发 beginCameraRendering 事件时都会调用这一方法
          void WriteLogMessage(ScriptableRenderContext context, Camera camera)
          {
              // 将文本写入控制台
              Debug.Log($"Beginning rendering the camera: {camera.name}");
          }
      }
      

      注意:当您订阅某个事件时,您的处理程序方法(在此例中为 WriteLogMessage)必须接受事件委托中定义的参数。在此示例中,事件委托是 RenderPipeline.BeginCameraRendering,它需要以下参数:<ScriptableRenderContext, Camera>。

    4. 将 URPCallbackExample 脚本附加到 Example Cube。

    5. 选择 Play。每次 Unity 引发 beginCameraRendering 事件时,Unity 都会在 Console 窗口中打印来自脚本的消息。

      Unity 在控制台中打印日志消息。

    6. 要调用 OnDisable() 方法:在运行模式下,选择 Example Cube,并清除脚本组件标题旁边的复选框。Unity 会从 RenderPipelineManager.beginCameraRendering 事件中取消订阅 WriteLogMessage,并停止在 Console 窗口中打印消息。

      停用脚本组件。清除脚本组件标题旁边的复选框。

    返回到顶部
    Copyright © 2023 Unity Technologies — 商标和使用条款
    • 法律条款
    • 隐私政策
    • Cookie
    • 不要出售或分享我的个人信息
    • Your Privacy Choices (Cookie Settings)