从Unity2017开始引入了ADF(Assembly Definition File)的内部接口调用方式,这种方式可以避免利用反射方式调用Unity内部方法,简单快捷
首先我们要在指定一个文件夹内创建ADF文件,并引用程序集
我们这里调用的是Editor的方法,所以要引用一个Editor的程序集,这里引入了
Unity.InternalAPIEditorBridge.024
其他的要视情况而定.
编写调用方法,和正常书写方式一样
注意:这个脚本要和ADF文件放置在一起,且,内部方法无法被外部访问,需要通过方法包装给外部访问
using Codice.Client.Common;
using UnityEditor;
public static class CustomGameViewUtils
{
static GameViewSizeGroup gameViewSizeGroup;
static CustomGameViewUtils()
{
gameViewSizeGroup = GameViewSizes.instance.GetGroup(GameViewSizeGroupType.Android);
}
/// <summary>
/// 创建自定义分辨率
/// </summary>
/// <param name="width"></param>
/// <param name="height"></param>
/// <param name="text"></param>
/// <param name="sizeType"></param>
public static void AddCustomSize(int width, int height, string text)
{
GameViewSizeType sizeType = GameViewSizeType.FixedResolution;
var gameViewSize = new GameViewSize(sizeType, width, height, text);
gameViewSizeGroup.AddCustomSize(gameViewSize);
}
/// <summary>
/// 移除所有自定义分辨率
/// </summary>
/// <param name="index"></param>
public static void RemoveAllCustomSize()
{
for (int i = 0; i < gameViewSizeGroup.GetCustomCount(); i++)
{
gameViewSizeGroup.RemoveCustomSize(i);
}
}
/// <summary>
/// 移除新自定义分辨率
/// </summary>
/// <param name="name"></param>
public static void RemoveCustomSize(string name)
{
for (int i = 0; i < gameViewSizeGroup.GetTotalCount(); i++)
{
if (gameViewSizeGroup.GetGameViewSize(i).baseText == name)
{
gameViewSizeGroup.RemoveCustomSize(i);
}
}
}
/// <summary>
/// 设置分辨率
/// </summary>
/// <param name="index"></param>
public static void SetSize(string name)
{
GameView gvWnd = EditorWindow.GetWindow<GameView>();
for (int i = 0; i < gameViewSizeGroup.GetTotalCount(); i++)
{
GameViewSize gameViewSize = gameViewSizeGroup.GetGameViewSize(i);
if (gameViewSize.baseText == name)
{
gvWnd.SizeSelectionCallback(i, null);
}
}
}
}