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

MonoBehaviour.OnRenderImage(RenderTexture,RenderTexture)

建议更改

成功!

感谢您帮助我们改进 Unity 文档的质量。尽管我们无法接受所有提交,但我们确实会阅读来自我们用户的每个建议更改,并在适用情况下进行更新。

关闭

提交失败

由于某些原因,您的建议更改无法提交。请在几分钟后<a>重试</a>。感谢您花时间帮助我们改进 Unity 文档的质量。

关闭

取消

切换至手册

参数

source 包含原图的 RenderTexture
destination 包含修改后图片的 RenderTexture

描述

相机 完成渲染后 Unity 调用的 事件函数,可让你修改相机的最终图片。

在内建渲染管线中,Unity 会在相机完成渲染后对连接到同个 GameObject 的 相机 组件(已启用状态)的 MonoBehaviours 调用 OnRenderImage。你可以使用 OnRenderImage 创建全屏后处理效果。这些效果的工作原理是:读取源图片中的像素,使用 Unity 着色器修改像素的外观,然后将结果渲染到目标图片中。你通常会使用 Graphics.Blit 来执行这些步骤。

如果同一相机上的多个脚本实现了 OnRenderImage,Unity 会按照它们在相机检视器窗口中出现的顺序从上往下调用它们。一个操作的 destination 是下一个操作的 source;在内部,Unity 会创建一个或多个临时渲染纹理来存储这些中间结果。

在 Android 设备上,为了避免条带化或在全屏效果中使用 Alpha 通道,请将 PlayerSettings.use32BitDisplayBuffer 设为 true

在可编程渲染管线中不支持 OnRenderImage。要在通用渲染管线 (URP) 中创建自定义全屏效果,请使用 ScriptableRenderPass API。要在高精度渲染管线 (HDRP) 中创建自定义全屏效果,请使用 全屏自定义 Pass

有关使用 Unity 的预构建后期处理效果的信息,请参见后期处理

using UnityEngine;

public class ExampleClass : MonoBehaviour { // A Material with the Unity shader you want to process the image with public Material mat;

void OnRenderImage(RenderTexture src, RenderTexture dest) { // Read pixels from the source RenderTexture, apply the material, copy the updated results to the destination RenderTexture Graphics.Blit(src, dest, mat); } }