Описание
Делегат, который можно использовать для выполнения пользовательского кода до того, как Camera отобразит сцену.
Во встроенном конвейере рендеринга Unity вызывает этот onPreRender
до того, как любая камера начнет рендеринг. Чтобы выполнить пользовательский код на этом этапе, создайте обратные вызовы, соответствующие сигнатуре CameraCallback, и добавьте их к этому делегату.
Сведения об аналогичных функциях, применимых только к одной камере и требующих, чтобы ваш скрипт находился на том же игровом объекте, см. в разделе MonoBehaviour.OnPreRender. Аналогичные функции конвейера рендеринга с поддержкой сценариев см. в разделе RenderPipelineManager.
Unity вызывает onPreRender
после того, как камера выполнит операцию отбраковки. Это означает, что если вы вносите изменения, влияющие на то, что видит камера, изменения вступят в силу со следующего кадра. Чтобы изменить то, что камера видит в текущем кадре, используйте Camera.onPreCull.
Когда Unity вызывает onPreRender
, цель рендеринга камеры и текстуры глубины еще не настроены. Если вам нужен доступ к ним, вы можете выполнить код позже в цикле рендеринга, используя 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;
}
}
Смотрите так же: CameraCallback, Camera.onPreCull, Camera.onPostRender, MonoBehaviour.OnPreRender, CommandBuffer, Extending the Built-in Render Pipeline using CommandBuffers.