# OnPreCull()

> Event function that Unity calls before a Camera culls the scene.

## Definition

* **Type:** Method
* **Namespace:** [UnityEngine](/engine/6000.0/script-reference/unityengine.md)

```csharp
public void OnPreCull()
```

### Remarks

In the Built-in Render Pipeline, Unity calls `OnPreCull` on MonoBehaviours that are attached to the same GameObject as an enabled [Camera](/engine/6000.0/script-reference/unityengine/camera.md) component, just before that Camera performs the culling operation that determines what it can see. Use `OnPreCull` to execute your own code at this point in the render loop; for example, you can change the Camera's settings before performing the culling operation, to affect what the Camera sees. `OnPreCull` can be a coroutine. For similar functionality that does not require the script to be on the same GameObject as a Camera component, refer to [Camera.onPreCull](/engine/6000.0/script-reference/unityengine/camera/onprecull-1.md). **Note**: `OnPreCull` depends on the Built-in Render Pipeline and won't be called in projects using the Scriptable or Universal Render Pieplines. For similar functionality in the Scriptable Render Pipeline, refer to [RenderPipelineManager](/engine/6000.0/script-reference/unityengine/rendering/renderpipelinemanager.md).

### Examples

```csharp

// Attach this to the same GameObject as a Camera component.
// This script inverts the view of the Camera, so that everything rendered by it is flipped

using UnityEngine;
using System.Collections;

public class ExampleClass : MonoBehaviour
{
    Camera cam;

    void Start()
    {
        cam = GetComponent<Camera>();
    }

    void OnPreCull()
    {
        cam.ResetWorldToCameraMatrix();
        cam.ResetProjectionMatrix();
        cam.projectionMatrix = cam.projectionMatrix * Matrix4x4.Scale(new Vector3(1, -1, 1));
    }

    void OnPreRender()
    {
        GL.invertCulling = true;
    }

    void OnPostRender()
    {
        GL.invertCulling = false;
    }
}
```
