0

再生中にC#スクリプトでこのパネルのオン/オフを切り替えたいです。これは可能ですか?このためのエディター API 関数は見つかりませんでした。

Unity3D の統計パネル

4

2 に答える 2

3

あなたは反射でそれを行うことができます。私がずっと前に行った同様の回答を修正しました。以下は、作業セット/統計取得関数です。Unity 5.4.0f1でテスト済み。Unity版は動かなくなっても文句を言わないようにしています。Unity の更新プログラムは、変数の名前を変更すると、いつでもこれを破ることができます

  • GameView= Editor で 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 に答える