Наверное, я только что нашел фактический ответ в OnPostRender
OnPostRender
вызывается после того, как камера рендерит все свои объекты. Если вы хотите что-то сделать после рендеринга всех камер и графического интерфейса, используйте WaitForEndOfFrame
сопрограмму.
Таким образом (кроме того, что я думал, и ExecutionOrder делает его похожим на звук) все методы в блоке рендеринга (кроме OnGUI
и OnDrawGizmos
) вызываются на для каждой камеры основа, а также обратите внимание, что
OnPostRender : эта функция вызывается только в том случае, если скрипт подключен к камере и включен.
или
OnRenderImage : Это сообщение отправляется всем сценариям, прикрепленным к камере.
Его целью является Постобработка (я только понял, как они работают, глядя на примеры.), Поэтому на самом деле принимает 2 аргумента !
OnRenderImage(RenderTexture src, RenderTexture dest)
, так что вы можете переписать выходную текстуру (dest
) с некоторыми эффектами рендеринга после получения ввода (src
), как в их примере
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
, который вызывается all GameObjects (MonoBehaviour
s), а не только Camera
. Снова, пока я не увидел пример, я действительно не понимал, что он делает (или чем он отличается от 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
, с другой стороны, вызывается после того, как все камеры закончили рендеринг и везде не только в Camera
GameObject.
Дождется окончания кадра после всех камер и графического интерфейса пользователя , непосредственно перед отображением кадра на экране.
Так что я бы сказал Нет, вы не можете / не должны заменять WaitForEndOfFrame
с помощью OnRenderImage
!