環境
Windows10
Unity 5.5.* Pro
やりたかったこと
PCのスタンドアローン向けにビルドしたゲームのエラー/例外のログ(テキストファイル)を保存したい。
ログの設定
デフォルトだと Debug.Log が全てログファイルに記録されてしまうため、
以下の設定を変更する。
(Edit > Project Settings > Player > Other Settings > Logging)
しかし、これだとエディター上で確認中も表示されなくなってしまうため、
ビルドのスクリプトを作成し、ビルド時に以下のコードを実行するように追加する。
PlayerSettings.SetStackTraceLogType(LogType.Error, StackTraceLogType.ScriptOnly);
PlayerSettings.SetStackTraceLogType(LogType.Assert, StackTraceLogType.None);
PlayerSettings.SetStackTraceLogType(LogType.Warning, StackTraceLogType.None);
PlayerSettings.SetStackTraceLogType(LogType.Log, StackTraceLogType.None);
PlayerSettings.SetStackTraceLogType(LogType.Exception, StackTraceLogType.ScriptOnly);
さらに、ゲーム起動時に以下のコードを追加する。
LogType.Error を指定すると、エラーだけでなく例外もログファイルに記録される。
#if UNITY_EDITOR || DEVELOPMENT_BUILD
#else
// フィルターをかけてエラーと例外以外ログに記録しない。
Debug.logger.filterLogType = LogType.Error;
#endif
このあたりを参考にさせていただきました。(ちょっと古いけど)
コマンドラインからUnityのビルドを走らせる。 -基礎編-
コマンドラインからUnityのビルドを走らせる。 -ステップアップ編-
【Unity】Unity 5.3 新機能メモ
ログファイルの出力
ゲーム起動時に「-logFile」のオプションを指定すればよい。
ファイルが上書きされていってしまうので、1日ずつ別のファイルにするように今日の日付をファイル名に含めた。
・・・が、うまくいかなかった。
set unity_log_file=log_%date:~0,4%-%date:~5,2%-%date:~8,2%.txt
start \B \WAIT game.exe -logFile D:\log\%unity_log_file%
ゲームをバッチファイルから起動したところ、なぜかカレントディレクトリにログが出力された。
色々やってみたところ、「unity_log_file」の環境変数が -logFile よりも優先されるらしい。
unity_log_file を ulogfile のように名前を変更したらうまくいった。
set ulogfile=log_%date:~0,4%-%date:~5,2%-%date:~8,2%.txt
start \B \WAIT game.exe -logFile D:\log\%ulogfile%