😽

Unity デバッグ 開発用ビルド

2024/03/20に公開

開発ビルドを有効にする

BuildSetting > Development Build を有効にする

Debug.Logはリリースビルドでも実行されるので

unity用シンボル

DEBUGはUnity固有シンボルではないので使わない方が良い

#if DEVELOPMENT_BUILD || UNITY_EDITOR
/*開発用ビルド時、エディタで実行したい処理*/
#endif

#if DEVELOPMENT_BUILD
/*開発用ビルド時のみ*/
#endif

#if UNITY_EDITOR
/*エディタのみ*/
#endif

unity用ではないシンボル

DEBUGはUnity固有シンボルではない

#if DEBUG
/*開発用ビルド時のみ実行したい処理*/
#endif

リリース時にDebug.Logを出力しないようにする

Debugクラスのメソッドはリリースビルドでも機能するので、そのままだと配布したアプリでもログが出力される
Unityの設定でログ出力を無効にできるがメソッドの呼び出しコストは残る

Conditional属性を付けて呼び出しそのものを無効にする方法

使えないケースがあり万能ではない
https://noracle.jp/unity-no-debug/

スクリプトの文字化け

https://noracle.jp/unity_script_encode_issue/

C#の文字列補間式

var sb = new StringBuilder();
sb.Append(name);
sb.Append("は");
sb.Append(price);
sb.Apeend("円です");
var message = sb.ToString();

var message = string.Format("{0}は{1}円です", name, price);
var message = $"{name}{price}円です";

//StringBuilderが良いが使える
var message = "";
message += name;
message += "は";
message += price;
message += "円です";

LISTをログに出す

//String
List<string> names = new List<string>(){"a", "b", "c"};
Debug.Log(string.Join(",", names));

//Int
List<int> nums = new List<int>(){1, 2, 3, 4, 5};
Debug.Log(string.Join(",", nums.Select(n => n.ToString())));    

partialクラスでファイル分割

Player.cs
public partial class Player : MonoBehaviour {
}
Player_Walk.cs
public partial class Player {
}

https://indie-du.com/entry/2016/05/11/080000
partialクラスがブレークポイントで止まらない?
https://noracle.jp/unity-partial-breakpoint-issue/

Discussion