OnSceneGUI(SceneView)
Callback raised when the Scene view calls OnGUI.
Read time 1 minuteLast updated 10 days ago
Definition
- Type: Method
- Namespace: UnityEditor.Actions
- Assembly: UnityEditor.CoreModule
public virtual void OnSceneGUI(SceneView sceneView)
Parameters
The Scene view that is called in.
Actions.EditorAction.OnSceneGUIRemarks
Use this method to implement any handles or interactive code. This is equivalent in functionality to EditorTool.OnToolGUI.
Examples
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); } }}