Unity 获取Game窗口分辨率
方式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的Type
Assembly 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);//打印大小
}