この記事でのバージョン
Unity 2018.4.8f1
はじめに
今回はタイトル通り今回はSceneView上でのイベントを取得する方法のご紹介です!
なお、エディタを再生していても、いなくても取得出来ます。
Event.currentとSceneView.onSceneGUIDelegate
クリックなど、操作した時のイベントはEvent.currentで取得出来ます。
(発生したイベントの種類はEvent.current.typeで判別可能)
ただし、そのEvent.currentを参照するタイミングが重要で
SceneView上のイベントを取得したい時はSceneView.onSceneGUIDelegateを使います。
using UnityEditor; using UnityEngine; [ExecuteInEditMode]//ExecuteInEditModeを付ける事でOnEnableが再生していなくても実行されるようになる public class NewBehaviourScript : MonoBehaviour { private void OnEnable() { //シーンビュー上のイベントを取得するため、メソッドを登録 SceneView.onSceneGUIDelegate += OnOccurredEventOnSceneView; } //シーンビュー上でイベントが発生した private void OnOccurredEventOnSceneView(SceneView scene){ //発生したイベントの種類をログで表示 Debug.Log(Event.current.type); } }
ちなみにEditorApplication.updateを使うとEvent.currentは常にnullですし、
using UnityEditor; using UnityEngine; [ExecuteInEditMode]//ExecuteInEditModeを付ける事でOnEnableが再生していなくても実行されるようになる public class NewBehaviourScript : MonoBehaviour { private void OnEnable() { EditorApplication.update += Update; } private void Update() { var currentEvent = Event.current; if (currentEvent == null) { Debug.Log("Update : null"); return; } Debug.Log($"Update : {currentEvent.type}"); } }
OnDrawGizmosを使っても一部のイベントしか取得できません。
using UnityEngine; [ExecuteInEditMode]//ExecuteInEditModeを付ける事でOnDrawGizmosが再生していなくても実行されるようになる public class NewBehaviourScript : MonoBehaviour { private void OnDrawGizmos() { Debug.Log("OnDrawGizmos"); var currentEvent = Event.current; if (currentEvent == null) { return; } Debug.Log($"OnDrawGizmos : {currentEvent.type}"); } }