関連ブログ
- [UE5]チャージショットで弾のバリエーションを増やそう! 2024.10.09UE
- [UE5]PaperZDでプレイヤーキャラを実装してみる(3/3) 2024.10.02UE
- [UE5]PaperZDでプレイヤーキャラを実装してみる(2/3) 2024.09.25UE
CATEGORY
2023.12.27UE5UE/ Debug
執筆バージョン: Unreal Engine 5.2
|
こんにちは! とりわけプロジェクト後半になると、こんなことを考える機会が増えてきます
「Shipping パッケージだけで起きるバグがあるな~ Shipping でもログを出したいな~」
Shipping パッケージでログをだすには、こちらの記事にもあるように ○○.Target.cs で以下のような記述をすることで実現できます。
1 2 3 4 5 6 7 8 9 10 11 |
public class MyProjectTarget : TargetRules { public MyProjectTarget( TargetInfo Target) : base(Target) { // (中略) // Shipping でログ出力する bUseLoggingInShipping = true; } } |
ところで、この Shipping ログ出力処理。 最終的にリリースされるパッケージには含めたくありません。
じゃあ、バージョン管理ソフトのリポジトリには、こんな風にコメントアウトした状態でコミットして…
1 2 3 4 5 6 7 8 9 10 11 |
public class MyProjectTarget : TargetRules { public MyProjectTarget( TargetInfo Target) : base(Target) { // (中略) // Shipping でログ出力する //bUseLoggingInShipping = true; } } |
ローカル環境ではコメントアウトを書き戻して作業するか。
ローカルだけだから!コミットしなければセーフだから!
→ しばし試行錯誤
→ ローカルでファイル書き換えてることを忘れる
→ バージョン管理ソフトで他のファイルに紛れてうっかりコミット!
→ 誰も気づかずそのままリリース
…ああ、そんな事故は起こしたくないものです。自分で書いてて胃が痛くなってきました。
というわけでこれを「パッケージビルド時のコマンドライン引数」で切り替えられるようにしましょう!
○○.Target.cs で、パッケージビルド時のコマンドライン引数を取得するには、Target.Arguments を利用します。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 |
public class MyProjectTarget : TargetRules { public MyProjectTarget( TargetInfo Target) : base(Target) { // (中略) // "-UseLoggingInShipping" というコマンドライン引数があるか調べる。 if (null != Target.Arguments && Target.Arguments.HasOption("-UseLoggingInShipping")) { // Shipping でログ出力する bUseLoggingInShipping = true; } } } |
ここのコードは、パッケージビルドのいくつかのプロセスで呼び出されます。
Target.Arguments が存在しないプロセスからも呼び出されますので、エラー回避のため null チェックを忘れずに。
さて、それでは、パッケージビルドのコマンドライン引数で、”-UseLoggingInShipping” を指定してみましょう。
○○.Target.cs で受け取るコマンドライン引数は、”-UBTArgs=” で指定します。
1 |
RunUAT.bat BuildCookRun -project=MyProject.uproject -target=MyProject -clientconfig=Shipping -build -compile (中略) -UBTArgs="-UseLoggingInShipping" |
Shipping パッケージの場合、ログファイルはデフォルトでは以下の場所に作られます:
1 |
C:\Users\(ユーザー名)\AppData\Local\(プロジェクト名)\Saved\Logs |
エクスプローラなどで開くときは、%localappdata% を使うとラクチンです:
1 |
%localappdata%\(プロジェクト名)\Saved\Logs |
ところで、”bUseLoggingInShipping” という名前ではありますが、 Shipping 版だけではなく
「Test 版でログを出力を有効にする」場合も bUseLoggingInShipping を true にすることで実現できます。
例えば、最適化調査のため「ログあり UnrealInsights 調査用 Test 版パッケージ」を作る時は
UnrealInsights で見られる情報を増やすためbUseLoggingInShipping を有効化したり
define マクロ “FORCE_USE_STATS” を 1 にしたりします。
FORCE_USE_STATS についても bUseLoggingInShipping と同様にコマンドラインオプションを用意して
○○.Target.cs 内で分岐することもできますが、 define マクロはシンプルにコマンドライン引数から指定することが可能です:
1 |
RunUAT.bat BuildCookRun -project=MyProject.uproject -target=MyProject -clientconfig=Test -build -compile (中略) -UBTArgs="-UseLoggingInShipping -Define:FORCE_USE_STATS=1" |
Jenkins でパッケージ作成する場合にも、コマンドライン引数であれば安全かつ切り替えやすいかと思います。 是非ご活用ください!