# OnSceneGUI(SceneView)

> Callback raised when the Scene view calls OnGUI.

## Definition

* **Type:** Method
* **Namespace:** [UnityEditor.Actions](/engine/6000.7/script-reference/unityeditor/actions.md)
* **Assembly:** UnityEditor.CoreModule

```csharp
public virtual void OnSceneGUI(SceneView sceneView)
```

### Parameters

**** (\[SceneView]\(/engine/6000.7/script-reference/unityeditor/sceneview)): The Scene view that `Actions.EditorAction.OnSceneGUI` is called in.

### Remarks

Use this method to implement any handles or interactive code. This is equivalent in functionality to [EditorTool.OnToolGUI](/engine/6000.7/script-reference/unityeditor/editortools/editortool/ontoolgui.md).

### Examples

```csharp
using System;
using UnityEditor;
using UnityEditor.Actions;
using UnityEditor.Overlays;
using UnityEngine;
using UnityEngine.UIElements;

public class EditorActionSampleOverlay : Overlay
{
    Vector3Field m_Field;

    public Action<Vector3> positionChanged;

    public void SetPosition(Vector3 position)
    {
        m_Field?.SetValueWithoutNotify(position);
    }

    public override VisualElement CreatePanelContent()
    {
        m_Field = new Vector3Field();
        m_Field.RegisterValueChangedCallback((evt) => positionChanged?.Invoke(evt.newValue));
        return m_Field;
    }
}

public class EditorActionSample : EditorAction
{
    [MenuItem("Test/Start Action Sample")]
    static void StartEditorActionSample()
    {
        Start(new EditorActionSample());
    }

    public Vector3 handlePosition = Vector3.zero;

    EditorActionSampleOverlay m_Overlay;

    public EditorActionSample()
    {
        // Create the overlay when the action is created
        m_Overlay = new EditorActionSampleOverlay();
        m_Overlay.SetPosition(handlePosition);
        m_Overlay.positionChanged += (value) => handlePosition = value;
        SceneView.AddOverlayToActiveView(m_Overlay);
        m_Overlay.displayed = true;
    }

    protected override void OnFinish(EditorActionResult result)
    {
        // Remove the overlay when the action is finished
        SceneView.RemoveOverlayFromActiveView(m_Overlay);

        Debug.Log($"Action Finished [{result}] with position: {handlePosition}");
    }

    public override void OnSceneGUI(SceneView sceneView)
    {
        EditorGUI.BeginChangeCheck();
        handlePosition = Handles.PositionHandle(handlePosition, Quaternion.identity);

        if (EditorGUI.EndChangeCheck())
        {
            m_Overlay.SetPosition(handlePosition);
        }
    }
}
```
