gpt4 book ai didi

unity-game-engine - WaitForEndOfFrame 和 OnRenderImage 一样吗?

转载 作者:行者123 更新时间:2023-12-02 03:18:42 28 4
gpt4 key购买 nike

在Unity中,是WaitForEndOfFrame

void Update() 
{
StartCoroutine(_c());
}

IEnumerator _c()
{
yield return new WaitForEndOfFrame();
BuildTexturesForExample();
}

OnRenderImage相同吗?

void OnRenderImage() 
{
BuildTexturesForExample();
}

(不用说,这两个调用中的最小/无用的统一 doco 没有帮助。)

如果不是,OnRenderImage 之后直到调用 WaitForEndOfFrame 之前会做什么?

有人有比较使用这两者的经验吗?

安全更换??????

您能否始终安全地使用 OnRenderImage 替换 WaitForEndOfFrame 模式?1

这是怎么回事?


1(当然,gizmos/ongui 是无关紧要的。)

最佳答案

我想我刚刚在 OnPostRender 中找到了实际答案

OnPostRender is called after the camera renders all its objects. If you want to do something after all cameras and GUI is rendered, use WaitForEndOfFrame coroutine.

因此(除了我的想法和ExecutionOrder使它看起来/听起来像)渲染 block 中的​​所有方法(除了OnGUIOnDrawGizmos)都被调用每个相机基础,还要注意

OnPostRender: This function is called only if the script is attached to the camera and is enabled.

OnRenderImage: This message is sent to all scripts attached to the camera.

其目的是Post-Processing (我只是通过查看示例才了解它们是如何工作的。),因此它实际上需要 2 个参数!

OnRenderImage(RenderTexture src, RenderTexture dest)

因此您可以在接收输入 (src) 后使用一些渲染效果覆盖输出纹理 (dest),如示例所示

Material material;

private void OnRenderImage(RenderTexture source, RenderTexture destination)
{
// Copy the source Render Texture to the destination,
// applying the material along the way.
Graphics.Blit(source, destination, material);
}

还有例如OnRenderObject它在所有游戏对象(MonoBehaviour)上调用,而不仅仅是相机。再次强调,直到我看到这个示例,我才真正理解它的作用(或者它与 OnRenderImage 的不同之处)。但这里的例子有帮助:

void OnRenderObject()
{
// Render different meshes for the object depending on whether
// the main camera or minimap camera is viewing.
if (Camera.current.name == "MiniMapcam")
{
Graphics.DrawMeshNow(miniMapMesh, transform.position, transform.rotation);
}
else
{
Graphics.DrawMeshNow(mainMesh, transform.position, transform.rotation);
}
}

奖励:我终于明白了 Camera.current 的真正用途! :D


WaitForEndOfFrame另一方面,在所有摄像机完成渲染之后调用,并且不仅在摄像机游戏对象上的任何地方调用。

Waits until the end of the frame after all cameras and GUI is rendered, just before displaying the frame on screen.


所以我想说不,你可以/不应该使用OnRenderImage替换WaitForEndOfFrame!

关于unity-game-engine - WaitForEndOfFrame 和 OnRenderImage 一样吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55455963/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com