- Home /
EditorWindow.focusedWindow.SendEvent crashes Unity.
void OnDrawGizmosSelected(){
var e = new Event { keyCode = KeyCode.RightArrow, type = EventType.keyDown };
EditorWindow.focusedWindow.SendEvent(e);
}
This code crashes my Unity client. I wish to simulate a right arrow press on a the hierarchy window.
Answer by Bunny83 · Mar 18, 2015 at 04:03 AM
OnDrawGizmosSelected is always called when the sceneview is updated. Since every time OnDrawGizmosSelected is called you send a manual event to the GUI system you probably caused that in response to that event OnDrawGizmosSelected is called again. So you probably have an infinite recursion.
What's the point of this actually? OnDrawGizmosSelected is not just called once when you select a gizmo, but it's called to actually draw the gizmo only when the gameobject is selected.
OnDrawGizmosSelected is a callback that is bound to the sceneview. You can also select objects in the sceneview so "EditorWindow.focusedWindow" wouldn't be the hierarchy window. I guess you just want to "autoexpand" the object when it's selected? Sending "RightArrow" isn't a good solution in general since it'S possible that a parent object has been selected (in which case OnDrawGizmosSelected is also called).
If you want to expand the selected item, it's better to dig into that directly and change the expanded state directly. Those things are actually quite hidden in the editor code so you have to figure it out yourself.
Actually I've removed some code for simplicity's sake. I check if this is the actual object selected, change the Selection.activegameobject to 2 parents up, then select the Hierarchy window and send the right arrow event to collapse, then reselect the previously selected window.
Your answer
Follow this Question
Related Questions
Sending a "Rename" CommandEvent to the Hiearchy window, almost there... 3 Answers
Is it possible to render a UnityAction field in a custom editor window? 0 Answers
How can I hide function in Animation Event Window? 0 Answers
EditorWindow not properly drawing 1 Answer
Detect Enter Key Event with GUILayout.TextField Focused 1 Answer