【Unity】クラス型の変数をDebug.Logで出力したい場合

■開発環境

  • MacOS Monterey (12.1) Unity (2021.3.2f1)
  • はじめに

    Unityでログを出すにはDebug.Logは皆さんわかってると思いますが、Debug.Logintfloatとプリミティブなデータ型を表示は正常ですがクラス型だとうまくいきません。

    今回はクラス型変数Debug.Logで出力する方法について共有します。

    ダメな例

    まずはダメな例を見てみましょう。普通にクラス型変数をDebug.Logにぶっこみます

    public class Hoge
    {
        public int val = 0;
    }
    var hoge = new Hoge();
    Debug.Log(hoge);
    
    // >> Hoge
    

    これだとただクラス名が表示されちゃいます。

    ToStringをオーバーライドしよう

    全てのクラスはToString()をオーバーライドすることができます。

    ToString()の中で各変数に対して出力するコードを書けばいいのです。

    public class Hoge
    {
        public int val = 0;
    
        public override string ToString()
        {
            return $"[Hoge]val={val}";
        }
    }
    

    難点としては変数が増えたり減ったりするたびにコードを書き換えないといけないので少し手間ですが。。