Does anyone know how to query the position of the Project View in screen space coordinates? Or any EditorWindow outside that EditorWindow without creating it?
Also, is there a way to get the mouse position (in screen space coordinates) in the editor? As far as I’m aware of, the Event.current.mousePosition
is already adjusted to the local window space.
Yes, it is possible to query the position of the Project or Hierarchy view. Thanks to Tenebrous’s UnityEditorEnhancements (http://hg.tenebrous.co.uk/unityeditorenhancements/wiki/Home) I found a way:
public static EditorWindow GetWindowByName( string pName )
{
UnityEngine.Object[] objectList = Resources.FindObjectsOfTypeAll( typeof( EditorWindow ) );
foreach( UnityEngine.Object obj in objectList )
{
if( obj.GetType().ToString() == pName )
return ( (EditorWindow)obj );
}
return ( null );
}
private static EditorWindow _projectWindow = null;
public static EditorWindow ProjectWindow
{
get
{
_projectWindow = _projectWindow ?? GetWindowByName("UnityEditor.ProjectWindow") ?? GetWindowByName("UnityEditor.ObjectBrowser") ?? GetWindowByName("UnityEditor.ProjectBrowser");
return ( _projectWindow );
}
}
private static EditorWindow _hierarchyWindow = null;
public static EditorWindow HierarchyWindow
{
get
{
_hierarchyWindow = _hierarchyWindow ?? GetWindowByName( "UnityEditor.HierarchyWindow" );
return ( _hierarchyWindow );
}
}
Rect positionOnScreen = ProjectWindow.position;
(All of the code is taken from the mentioned extension. I didn’t write any of it.)
The types queried by name are not from public API, so the maintenance of such a code could be a little tricky. But it should work for all Unity versions released so far, and then the list can be updated if a type gets renamed in the future.