0

我想在播放时通过 C# 脚本打开/关闭此面板。这可能吗?尚未为此找到任何编辑器 API 函数。

Unity3D中的统计面板

4

2 回答 2

3

你可以通过反射来做到这一点。修改了我很久以前提出的类似答案。下面是一个工作集/获取统计功能。使用Unity 5.4.0f1测试。我放置了 Unity 版本,以便人们在它停止工作时不会抱怨。如果他们重命名任何变量,Unity 的更新可以随时打破这一点。

  • GameView= 用于表示编辑器中 Unity GameView 选项卡的类。
  • GetMainGameViewGameView = 返回当前实例的静态函数。
  • m_Stats= 一个布尔变量,用于确定是否应显示统计信息。

代码:

//Show/Hide stats
void showStats(bool enableStats)
{
    Assembly asm = Assembly.GetAssembly(typeof(Editor));
    Type type = asm.GetType("UnityEditor.GameView");
    if (type != null)
    {
        MethodInfo gameViewFunction = type.GetMethod("GetMainGameView", BindingFlags.Static |
            BindingFlags.NonPublic);

        object gameViewInstance = gameViewFunction.Invoke(null, null);


        FieldInfo getFieldInfo = type.GetField("m_Stats", BindingFlags.Instance |
                                               BindingFlags.NonPublic | BindingFlags.Public);

        getFieldInfo.SetValue(gameViewInstance, enableStats);
    }
}

//Returns true if stats is enabled
bool statsIsEnabled()
{
    Assembly asm = Assembly.GetAssembly(typeof(Editor));
    Type type = asm.GetType("UnityEditor.GameView");
    if (type != null)
    {
        MethodInfo gameViewFunction = type.GetMethod("GetMainGameView", BindingFlags.Static |
            BindingFlags.NonPublic);

        object gameViewInstance = gameViewFunction.Invoke(null, null);


        FieldInfo getFieldInfo = type.GetField("m_Stats", BindingFlags.Instance |
                                               BindingFlags.NonPublic | BindingFlags.Public);

        return (bool)getFieldInfo.GetValue(gameViewInstance);
    }
    return false;
}

用法

//Show stats
showStats(true);

//Hide stats
showStats(false);

//Read stats
bool stats = statsIsEnabled();
于 2016-10-25T08:07:29.723 回答
2

不,这是不可能的,除非你是一个顽固的黑客。GameView 是一个内部类,编辑器脚本无法访问。但是,嘿,总是有一个很好的反思的选择。这个问题将使您走上正轨: http ://answers.unity3d.com/questions/179775/game-window-size-from-editor-window-in-editor-mode.html

于 2016-10-24T14:32:23.513 回答