# onPreCull

> Delegate that you can use to execute custom code before a Camera culls the scene.

## Definition

* **Type:** Field
* **Namespace:** [UnityEngine](/engine/6000.7/script-reference/unityengine.md)
* **Assembly:** UnityEngine.CoreModule

```csharp
public static Camera.CameraCallback onPreCull
```

### Remarks

In the Built-in Render Pipeline, Unity calls `onPreCull` before performing the culling operation that determines what a Camera can see. To execute custom code at this point, create callbacks that match the signature of [Camera.CameraCallback](/engine/6000.7/script-reference/unityengine/camera/cameracallback.md), and add them to this delegate. For example, you could change a Camera's settings to affect what the Camera sees.

For similar functionality that applies only to a single Camera and requires your script to be on the same GameObject, see [MonoBehaviour.OnPreCull()](/engine/6000.7/script-reference/unityengine/monobehaviour/onprecull.md).

If you're using a Scriptable Render Pipeline, for example the Universal Render Pipeline, use [RenderPipelineManager](/engine/6000.7/script-reference/unityengine/rendering/renderpipelinemanager.md) instead.

```csharp
using UnityEngine;

public class CameraCallbackExample : MonoBehaviour
{
    // Add your callback to the delegate's invocation list
    void Start()
    {
        Camera.onPreCull += OnPreCullCallback;
    }

    // Unity calls the methods in this delegate's invocation list before rendering any camera
    void OnPreCullCallback(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.onPreCull -= OnPreCullCallback;
    }
}
```

Additional Resources: [Camera.CameraCallback](/engine/6000.7/script-reference/unityengine/camera/cameracallback.md), [Camera.onPreRender](/engine/6000.7/script-reference/unityengine/camera/onprerender-1.md), [Camera.onPostRender](/engine/6000.7/script-reference/unityengine/camera/onpostrender-1.md), [MonoBehaviour.OnPreCull()](/engine/6000.7/script-reference/unityengine/monobehaviour/onprecull.md), [CommandBuffer](/engine/6000.7/script-reference/unityengine/rendering/commandbuffer.md), [Extending the Built-in Render Pipeline using CommandBuffers](/engine/6000.7/manual/render-pipelines/built-in-render-pipeline/graphics-command-buffers/buffers.md).
