【Unity】string.Joinで配列の中身をDebug.Logで出力する方法

MacOS Monterey (12.1) Unity (2021.3.2f1)

はじめに

何も考えずにDebug.Log(配列)でログを出すとうまくいきません。

例えば以下のように配列を直接Debug.Logで出力しようとしたとします。

string[] ary = new string[] { "すぱいく", "ほわいと", "りんだ", "てんしん" };
Debug.Log(ary);

これをコンソールで確認すると中身ではなく配列のデータ型名が表示されます。

求めているのは配列の各要素の中身ですよね? この中身をデバッグログで出力する方法を共有したいと思います。

string.Joinを使おう

第1引数には 区切る時に使う文字を指定します。 ,(カンマ) や\r(改行文字)などを使うのが一般的ですね。

第2引数には 配列変数を指定します。

上記を踏まえて先ほどのコードを直します。

string[] ary = new string[] { "すぱいく", "ほわいと", "りんだ", "てんしん" };
Debug.Log(string.Join(",",ary));

そしてこれを実行すると・・・

いい感じに表示されました!

2次元配列にはSystem.LinqのCastを使おう

string.Joinでも2次元配列だとうまくいきません。

string[,] ary2 = new string[,]
{
            {"1","すぱいく" }, {"2","ほわいと" }, {"3","りんだ" }, {"4","てんしん" }
};
Debug.Log(string.Join(",", ary2.Cast<string>()));

2次元配列には System.LinqのCast を使うと1次元配列に変換できます。これなら正しくログが表示されます。

using System.Linq;

~~~~~~~省略~~~~~~~~

string[,] ary2 = new string[,]
{
            {"1","すぱいく" }, {"2","ほわいと" }, {"3","りんだ" }, {"4","てんしん" }
};
Debug.Log(string.Join(",", ary2.Cast<string>()));