#1. はじめに
この記事ではビルドプロセスをデバッグする方法について記載しています。というのも、ビルドやパッケージはEngineが動作するプロセスとは別のUATを利用して行うため、デバッグするためには一工夫が必要になってくるためです。ビルドプロセスについての基本的な内容については、[UE4] ビルドプロセスの流れで説明されているので、こちらと併せて読むと理解が捗るかと思います。
[検証バージョン:4.25.3]
#2. デバッグの手順
この手順は予めUnrealVSがインストールされている前提となります。
##① Engineのソリューションを開く
ダウンロードしてフルリビルドしたエンジンソースを準備し、ソリューションを起動します。
##② スタートアッププロジェクトの設定
UATから実行するビルドプロセスをステップ実行したいのでAutomation Toolをスタートアップに設定しておきます。
##③ コマンドラインにビルド用の引数を設定
ここにUATを実行するコマンドを設定しておきます。
コマンドはProjectLauncherやEditorで実行する際のコマンドをコピペしておくと便利ですが、参考までに以下のテンプレートを使用してビルド、クック、ステージング、パッケージまでを実行することができます。
BuildCookRun -project=[.uproject] -platform=Win64 -configuration=Development -build -cook -pak -stage
プロジェクトには以下のように.uprojectまでのフルパスを指定しておきます。
BuildCookRun -project=D:/Samples/Games/ShooterGame/ShooterGame.uproject -platform=Win64 -configuration=Development -build -cook -pak -stage
例えばクックだけを実行したい場合は"-cook"だけを指定しておきます。
BuildCookRun -project=[.uproject] -platform=Win64 -configuration=Development -cook
コマンドの組み合わせによってはエラーとなるケースもあるので注意してください。
**組み合わせサンプル例**
Buildのみ実行
BuildCookRun -project=[.uproject] -platform=Win64 -configuration=Development -build
Cookのみ実行
BuildCookRun -project=[.uproject] -platform=Win64 -configuration=Development -cook
Stageを実行
Stageを実行したい場合は、Cook(ByTheBook)と併せて実行する必要があります。
フルでCookすると時間が掛かることもあるので、特定のマップのみを指定する方法や、シンプルなプロジェクトで検証するにとどめておく方が効率的です。
BuildCookRun -project=[.uproject] -platform=Win64 -configuration=Development -cook -stage
Packageを実行
Packageを実行したい場合は、Cook(ByTheBook)、Stageと併せて実行する必要があります。
-packageではなく-pakで指定する必要がある点にては要注意です。
BuildCookRun -project=[.uproject] -platform=Win64 -configuration=Development -cook -stage -pak
##④ ブレークポイントを設定
チェックしたい箇所の処理にブレークを設定しておきます。
どの処理がどこにあるかは[UE4] ビルドプロセスの流れにおおよそ記載されています。
以下のブレークポイントは.pakファイルを生成する最初の段階です。
##⑤ プロジェクトの実行
プロジェクトを実行(Start、F5)します。
初回は以下のようなポップアップが表示されますが、Continue Debuggingを選択して進めます。
正しくコマンドを入力していたらコマンドプロンプトを開いてビルドプロセスを実行していることが確認できます。
エラーとなる場合は必ずログに出るので確認しましょう。
1点注意点としては、ブレーク可能なソースはAutomationToolに限定されます。また、もしAutomationTool側のソースの書き換えを行う必要がある場合は、ソースの変更後にAutomationToolのプロジェクトをビルドすることを忘れないようにしましょう。
#4. まとめ
UAT側をデバック実行すること自体はあまりないかもしれませんが、例えばクック時に特定のアセットでエラーとなる、パッケージの処理を改造したい時にステップ実行で確認したい、ログを仕込むのつらい、といったケースなどではこの方法が役に立つかもしれません。特にビルドプロセス自体はプロジェクトの規模によっては多くの時間を費やすところかと思いますので、できるだけ早く多くのイテレーションを回すことができるよう、様々なことを知識として持っておくだけでも有利になります。以下の記事も非常にデバッグで役に立つことがるので併せて紹介しておきたいと思います。
[UE4]クック処理にブレークを張りたい場合Commandletを使う
AutomationToolではなくCommandletのソースをデバッグしたい場合はこちら。
[UE4] 1ファイル(と関連しているアセット)だけをクックする
Cookの範囲を限定したい場合はこの方法が有用です。