# OnPreRender()

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

## Definition

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

```csharp
public void OnPreRender()
```

### Remarks

In the Built-in Render Pipeline, Unity calls `OnPreRender` on MonoBehaviours that are attached to the same GameObject as an enabled [Camera](/engine/6000.7/script-reference/unityengine/camera.md) component, just before that Camera renders the scene. Use `OnPreRender` to execute your own code at this point in the render loop; for example, you could change visual settings to affect the scene while a given Camera is rendering. `OnPreRender` 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.onPreRender](/engine/6000.7/script-reference/unityengine/camera/onprerender-1.md). **Note**: `OnPreRender` 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.7/script-reference/unityengine/rendering/renderpipelinemanager.md). Unity calls `OnPreRender` after the Camera performs its culling operation. This means that if you make a change that affects what the Camera sees, the change will take effect from the next frame. To make a change to what the Camera sees in the current frame, use [MonoBehaviour.OnPreCull()](/engine/6000.7/script-reference/unityengine/monobehaviour/onprecull.md). When Unity calls `OnPreRender`, the Camera's render target and depth textures are not yet set up. If you need to access these, you can execute code later in the render loop using a [CommandBuffer](/engine/6000.7/script-reference/unityengine/rendering/commandbuffer.md).

```csharp
// This script lets you enable/disable fog per camera.
// by enabling or disabling the script in the title of the Inspector
// you can turn fog on or off per camera.

using UnityEngine;
using System.Collections;

public class ExampleClass : MonoBehaviour
{
    private bool revertFogState = false;

    void OnPreRender()
    {
        revertFogState = RenderSettings.fog;
        RenderSettings.fog = enabled;
    }

    void OnPostRender()
    {
        RenderSettings.fog = revertFogState;
    }
}
```

Additional Resources: [Camera.onPreRender](/engine/6000.7/script-reference/unityengine/camera/onprerender-1.md), [MonoBehaviour.OnPreCull()](/engine/6000.7/script-reference/unityengine/monobehaviour/onprecull.md), [MonoBehaviour.OnPostRender()](/engine/6000.7/script-reference/unityengine/monobehaviour/onpostrender.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).
