Development Build のエラーログ時コンソール出力は OnGUI を呼ぶと復活する

Unity 罠シリーズ第二弾。

Unity は Development Build で例外が発生したり Debug.LogError を呼んだりなどすることで、エラーログ出力があると自動的に Development Console が出現しログを表示してくれます。

using System;
using UnityEngine;

public class MyException : MonoBehaviour
{

    private void Awake()
    {
        throw new Exception("ランタイムエラー!!");
    }
}

これは原則として無効にできません。出したくないならリリースビルドするべき(そもそもエラー出ないように直せ)というスタンスだと思われます。(正論)

ただ、ダメなんですが、本当はダメなんですが、コンソールがすでに出ている状態であれば Debug.developerConsoleVisible に false を代入することで非表示にすることができます。

using UnityEngine;

public class DeveloperConsoleTest : MonoBehaviour
{
    private void Start()
    {
        Debug.developerConsoleVisible = false;
    }
}

さて、ここに一つ落とし穴があります。

OnGUI を(どのスクリプトからかに関わらず)使うと、Development Console が復活し、また表示されるようになります。
例えば、以下のような中身のない OnGUI を呼ぶスクリプトを作成し、

using UnityEngine;

public class MyOnGui : MonoBehaviour
{
    private void OnGUI() { }
}

それを貼り付けてスクリプトのチェックを外して無効にしたうえで、1 秒後に有効にする以下のようなコードを追加して実行してみると 1 秒後に Development Console が再出現します。
ログの中身も維持されていますね。

using System.Collections;
using UnityEngine;

public class DeveloperConsoleTest : MonoBehaviour
{
    [SerializeField]
    private MyOnGui _myOnGui = null;


    private IEnumerator Start()
    {
        Debug.developerConsoleVisible = false;

        yield return new WaitForSeconds(1);

        _myOnGui.enabled = true;
    }
}

やっぱりエラーはちゃんと直そうね!!!!!!!!(自戒)

コメント

タイトルとURLをコピーしました