方式1:调用api
直接调用:Handles.GetMainGameViewSize
方法2:反射
- 下载Unity源代码Github
查找GameView脚本:Editro/Mono/GameView/GameView.cs
GameView脚本是内部类,继承PlayModeView,命名空间是UnityEditor
PlayModeView继承EditorWindow - 查找Handles.cs脚本,Editor\Mono\Handles\Handles
Handles.GetMainGameViewSize的静态方法内部调用PlayModeView的GetMainPlayModeViewTargetSize方法
实现
using UnityEditor;
using System.Reflection;
if (GUILayout.Button("获取GameView Size"))
{Type type = typeof(EditorWindow);//无法直接获取 UnityEditor.GameView的TypeAssembly assembly = type.Assembly;//获取程序集type = assembly.GetType("UnityEditor.GameView");//获取gameview的类型var method = type.GetMethod("GetMainPlayModeViewTargetSize",//获取方法BindingFlags.Static | BindingFlags.NonPublic | BindingFlags.FlattenHierarchy);var gameWindow = EditorWindow.GetWindow(type);//获取窗口实例Vector2 size = (Vector2)method.Invoke(gameWindow, null);//调用方法Debug.Log(size);//打印大小
}