コガネブログ

平日更新を目標に Unity や C#、Visual Studio、ReSharper などのゲーム開発アレコレを書いていきます

【Unity】Console ウィンドウの Collapse や Clear on Play などのオン・オフをスクリプトから変更する方法

ソースコード

using System;
using System.Reflection;
using UnityEditor;

public static class ConsoleWindowUtils
{
    public enum ConsoleFlags
    {
        Collapse        = 1 << 0,
        ClearOnPlay     = 1 << 1,
        ErrorPause      = 1 << 2,
        Verbose         = 1 << 3,
        StopForAssert   = 1 << 4,
        StopForError    = 1 << 5,
        Autoscroll      = 1 << 6,
        LogLevelLog     = 1 << 7,
        LogLevelWarning = 1 << 8,
        LogLevelError   = 1 << 9,
        ShowTimestamp   = 1 << 10,
        ClearOnBuild    = 1 << 11,
    }
}

public static class LogEntriesUtils
{
    private const BindingFlags BINDING_ATTR = BindingFlags.Static | BindingFlags.Public;

    private static readonly Assembly   m_assembly = typeof( AssetDatabase ).Assembly;
    private static readonly Type       m_type     = m_assembly.GetType( "UnityEditor.LogEntries" );
    private static readonly MethodInfo m_info     = m_type.GetMethod( "SetConsoleFlag", BINDING_ATTR );

    public static void SetConsoleFlag( ConsoleWindowUtils.ConsoleFlags bit, bool value )
    {
        m_info.Invoke( null, new object[] { ( int )bit, value } );
    }
}

使用例

using UnityEditor;

public static class Example
{
    [MenuItem( "Tools/Hoge" )]
    private static void Hoge()
    {
        // Collapse を変更
        LogEntriesUtils.SetConsoleFlag( ConsoleWindowUtils.ConsoleFlags.Collapse, true );

        // Clear on Play を変更
        LogEntriesUtils.SetConsoleFlag( ConsoleWindowUtils.ConsoleFlags.ClearOnPlay, true );

        // Error Pause を変更
        LogEntriesUtils.SetConsoleFlag( ConsoleWindowUtils.ConsoleFlags.ErrorPause, true );

        // Debug.Log の表示を変更
        LogEntriesUtils.SetConsoleFlag( ConsoleWindowUtils.ConsoleFlags.LogLevelLog, true );
        
        // Debug.LogWarning の表示を変更
        LogEntriesUtils.SetConsoleFlag( ConsoleWindowUtils.ConsoleFlags.LogLevelWarning, true );
        
        // Debug.LogError の表示を変更
        LogEntriesUtils.SetConsoleFlag( ConsoleWindowUtils.ConsoleFlags.LogLevelError, true );

        // Show Timestamp
        LogEntriesUtils.SetConsoleFlag( ConsoleWindowUtils.ConsoleFlags.ShowTimestamp, true );
    }
}