EditorWindow を取得して CenterOnMainWin を呼び出せば中心に持ってこられる
var window = GetWindow<SampleEdiorWindow>(); window.CenterOnMainWin();
public static class EditorWindowExtensions { public static void CenterOnMainWin(this EditorWindow self) { var main = GetEditorMainWindowPos(); var pos = self.position; var w = (main.width - pos.width) * 0.5f; var h = (main.height - pos.height) * 0.5f; pos.x = main.x + w; pos.y = main.y + h; self.position = pos; } private static Type[] GetAllDerivedTypes(this AppDomain aAppDomain, Type aType) { var result = new List<Type>(); var assemblies = aAppDomain.GetAssemblies(); foreach (var assembly in assemblies) { var types = assembly.GetTypes(); foreach (var type in types) if (type.IsSubclassOf(aType)) result.Add(type); } return result.ToArray(); } private static Rect GetEditorMainWindowPos() { var containerWinType = AppDomain.CurrentDomain .GetAllDerivedTypes(typeof(ScriptableObject)) .FirstOrDefault(t => t.Name == "ContainerWindow"); if (containerWinType == null) return Rect.zero; var showModeField = containerWinType.GetField("m_ShowMode", System.Reflection.BindingFlags.NonPublic | System.Reflection.BindingFlags.Instance); var positionProperty = containerWinType.GetProperty("position", System.Reflection.BindingFlags.Public | System.Reflection.BindingFlags.Instance); if (showModeField == null || positionProperty == null) return Rect.zero; var windows = Resources.FindObjectsOfTypeAll(containerWinType); foreach (var win in windows) { var showMode = (int) showModeField.GetValue(win); if (showMode == 4) // main window { var pos = (Rect) positionProperty.GetValue(win, null); return pos; } } return Rect.zero; } }