こんにちは!
プログラム開発課の若尾です。
10月といえば、新社会人になって半年になるような時期ですね。早いものです。
社会人生活にも慣れてきて、そろそろお世話になった人に贈り物を贈ろうかなと、考え始めたりしませんか。
どんなものであっても贈り物として包まれていると、貰った人は嬉しいと思いますよ!
そういえば、包むといえばゲーム開発においては”パッケージする”という工程が存在しますよね。
こういうイメージですね。あるいは
こういうイメージですよね!
というわけで、今回はUnrealEngine5(以降UE5と記述します)においてのパッケージ工程と
その過程でのデバッグ操作について紹介していきます。
今回検証したPC環境について下に記します。
- Windows 11
- UnrealEngine 5.3.2
- VisualStudio Professional 2022
- 12th Gen Intel(R) Core(TM) i7-12700 (20 CPUs), ~2.1GHz
- NVIDIA GeForce RTX 3070
UE5のパッケージは何をしているか
パッケージ自体は上述したイメージです。開発環境からゲームとして実行できるファイルにすることです。
今回はUE5からWindows版のパッケージを試していきます。
UE5のEditor画面から「プラットフォーム」→「Windows」→「プロジェクトをパッケージ化」をクリックすることでパッケージを行えます。
それではこのパッケージをUE5では大まかに下記の工程(順番)で行っています。
Build → Cook → Stage → Pak
それではこのパッケージをUE5では大まかに下記の工程(順番)で行っています。
- Build
ゲームに関するプログラムコードをすべてコンパイルしていきます。
- ゲームプロジェクトのブループリントやC++のコード
- ゲームエンジンのコード
- プラグイン
- モジュール
など、ゲームプレイに必要なコードをコンパイルしていく工程です。
ブループリントやC++のファイルを変更し、ゲームの内容変更確認をする際にもBuild(ビルド)という単語が使われているので
想像がつきやすいかと思います。
コンパイルはターゲットとなるプラットフォームによってコンパイラが異なります。
実はWindows版UE5EditorとWindows版ゲームパッケージはコンパイルの条件が異なるので、この工程でエラーが出る場合もあります。
マルチプラットフォームでの開発となる場合、ターゲットによって色々なエラーに遭遇することになるのでエラー文には注意しましょう!
- Cook
Cookと聞くと上図をイメージしませんでしたか?
実はイメージとほとんど離れていません
Cookでは、ゲーム内で使用されるアセット(モデル、テクスチャ、サウンドなどなど)をターゲットのプラットフォームに最適化して変換する工程です。
UE5では、アセットがエディタや外部ツールから作成インポート等されますが、実際の各プラットフォームのゲーム上ではそのまま使えないため、実行可能なフォーマットに変換されます。
UE5ではこのときに、圧縮化や最適化なども同時に行われます。
- Stage
StageではBuild,Cookして出来上がったゲームに必要なファイルを配置・整理する工程です。
まさに舞台を整えるイメージです。
例えばWindows下図のような形になります。
- Pak
PakではStageにて整理されたファイルを圧縮・暗号化して、1つのパッケージ(Pakファイル)にまとめる工程です。
Windowsでは、Stageと見た目がほとんど変わらないため想像しづらいですが
他のプラットフォームになると単一のファイルに圧縮及び暗号化されたファイルになります。
各プラットフォームでPak方式が異なりますが、UE5上では自動的に行ってくれます。
こうしてひとつのゲームとして送り届けられる訳ですね!
コマンドラインでの作成方法
UE5にはUnrealAutomationToolというツールが存在します。
これは、UE5で制作されたゲームを自動的にパッケージやテストする補助をするツールとなり
RunUAT.batという名前で格納されています。
このbatファイルを実行時に各種引数を与えて実行することで、パッケージ化ができます。
RunUAT.bat についての詳細は下記公式ドキュメントをご確認ください。
例えば、Windows版のパッケージをするコマンドラインは下記のようになります。
C:\InsUE\UE_5.3\Engine\Build\BatchFiles\RunUAT.bat BuildCookRun -project="C:\UnrealProjects\TestGame\TestGame.uproject" -platform=Win64 -clientconfig=Development -build -cook -stage -pak -archive -archivedirectory="C:\Outputs\"
先ほどのBuild,Cook,Stage,Pakという単語がこちらにも出てきましたね!
それでは上記で登場した引数を紹介していきます。
-project=""
: パッケージ化するプロジェクトのパスを指定します。-platform=Win64
: パッケージのターゲットプラットフォーム。Windows 64-bit向けならWin64を指定します。-clientconfig=Development
: ゲームパッケージのクライアントのビルド設定です。基本的にはリリース用はShipping
、開発用はDevelopment
となります。-build
: プロジェクトに関するコード等をビルドします。-cook
: プロジェクトにあるアセットのクック処理を行います。-stage
: ビルド後のファイルをステージングディレクトリにコピーします。-pak
: 最終的なPakファイルとして作成するようにします。-archive
: 最終的なビルドをアーカイブすることを指します。下記で指定する出力ディレクトリに対してコピーされます。-archivedirectory=""
: 上述した出力パッケージを保存するディレクトリを指定します。
例えば、Jenkinsなどの自動ビルドエージェントに上記コマンドラインのbatファイルを毎日実行するようにすれば
定期的に自動でパッケージが作成されるようになります。
Jenkinsについては弊社のjenkinsについてのブログを紹介しますので、ぜひご覧ください。
Stageからデプロイデバッグを行う
RunUAT.batから上述したStageビルドまでを行い
その状況下でVisualStudioからデバッグするということができます。さきほどのRUNUAT.batの引数を下記のように変えて実行します。
C:\InsUE\UE_5.3\Engine\Build\BatchFiles\RunUAT.bat BuildCookRun -project="C:\UnrealProjects\TestGame\TestGame.uproject" -platform=Win64 -clientconfig=Development -build -cook -stage -deploy -run
-pak,
-archive,
がなくなり-archivedirectory=""
-deploy,-run
が追加されました。
-deploy
: ゲームをビルド(Build,Cook,Stage)後にてターゲットプラットフォームにデプロイ(プラットフォーム上で起動できるようにする準備)する引数です。-run
: 上記にてデプロイされたゲームをそのプラットフォーム上で即時に実行する引数オプションです。
後述する方法で、VisualStudioからデプロイデバッグを行う場合、-run
は任意ですが、RunUATの完了が感知しやすいため
私は-runを入れて実行しています!
今回はWindows版にて試してみました。成功するとゲームが単独で起動するのが確認できます。
無事実行が確認出来たら、一度起動したゲームを閉じます。
それでは、ゲームのプロジェクトソリューションをVisualStudioにて開きます。
ソリューション構成と、ソリューションプラットフォームを確認します。
今回はWindowsを例としたので、プラットフォームはWin64となります。スタートアッププロジェクトがゲームのプロジェクトになっていることも確認します。
ポイントは、”○○○○ Editor” とEditorと名前がつく構成を選ばず”○○○○”となっているものを選択します。
例えば、下図のような”DebugGame”あるいは”Development”を選択します。
あとはいつものように、ビルド実行を行います。
うまくいくと…
VisualStudioでビルド実行ができます。
このとき、Editorではなく直接ゲームを起動できるのが確認できるかと思います。
もちろん、この状態でデバッグ操作ができます。
直接ゲームを起動、つまりデプロイデバッグのメリットは下記になります。
- スタンドアローン・本番のゲーム起動に近い環境でデバッグができる。
- 各プラットフォーム実機上でデバッグができる。
- Editorを介さずにゲームデバッグできるので素早く確認できる。
最後のEditorを介さずにゲームデバッグについてですが
実はWindowsなど一部のプラットフォームでは、VisualStudioのC++のファイルを変更して即時にデバッグすることが可能です。
そのため、アセットの変更ではなくC++などのソースコードのみの変更をデバッグしたい場合などは
より素早く確認できるためオススメです。
なぜ、ソースコードの反映が確認できるかというと、前回のStageの情報をデバッグ時に参照しているためです。
下図のようなイメージです。
ということで、パッケージ・デプロイそしてデプロイデバッグについてのおすすめでした。
RunUATについては他にも色々な機能があるので、試してみたいですね!
【免責事項】
本サイトでの情報を利用することによる損害等に対し、
株式会社ロジカルビートは一切の責任を負いません。