アンリアる! C++入門編 ~対話形式で学ぶUnreal Engine~
BOOTHでUnreal Engine C++入門書を販売していますUnreal Engine上でC++を使って開発するために必要となる基礎知識を一冊の本にまとめた本です。 対話形式によるわかりやすい説明を目指しました。無料の試し読みも可能ですので、ぜひ読んでみてください!
Dockerを使ってUnreal Engineのコンテナイメージを利用する

Unreal Engineは公式でコンテナイメージを提供しています。
Dockerを利用することでコンテナイメージからコンテナを構築でき、独立した環境でUnreal Engineの環境を構築できます。
本記事ではUnreal Engineのコンテナイメージを利用する利点と、プロジェクトやプラグインをビルドする方法について説明します。

Unreal Engine公式で提供されるコンテナイメージ

Unreal Engineのコンテナイメージは、Epic GamesのGitHub Organizationページで提供しています。
GitHub Organizationページから [Packages] > [unreal-engine] へ移動することで、提供されているコンテナイメージ一覧を参照できます。
なおコンテナイメージを取得するためには、Unreal Engineのソースコードにアクセスする権限が必要です。
ドキュメント を参照し、アクセス権限を事前に得ておきましょう。

Unreal Engineコンテナイメージ

提供されているコンテナイメージは、執筆時点でUnreal Engineのバージョンが「4.27」と「5.0」の2つです。
タグ名に「slim」と付いているものは、最適化によりコンテナイメージを削減したものです。
最適化前のコンテナイメージはイメージサイズが非常に大きいため、最適化されたコンテナイメージを利用することをおすすめします。

コンテナを利用するメリット

コンテナを利用するメリットは、ホスト側の環境と分離してUnreal Engineの環境を構築できることです。
またコンテナ同士は独立した環境でかつコンテナをイメージとして保存できるため、独自に変更した環境をほかのシステムに容易に移行できます。
例えば、Unreal Engineに独自のサードパーティ製のライブラリを導入する場合、環境を移行するときにサードパーティ製のライブラリも一緒に移行する必要があります。
コンテナ内で作業して作業が完了した段階でコンテナイメージ化しておけば、コンテナイメージを別の環境に持っていくだけで移行できます。

このようなコンテナの特徴を踏まると、例えば次のような目的でコンテナを利用できます。

  • ホスト側の環境と分離された環境でUnreal Engine利用し、環境依存による問題を解消
  • 複数ユーザ間での開発環境共有
  • 継続的なテストやビルド(CI/CD)の実現

本記事では、コンテナ内でUnreal Engineのプロジェクトやプラグインをビルドする方法について説明します。
そのほかの用途に関しては、別の記事で紹介しようと思います。

コンテナの起動方法

コンテナの構築に必要なコンテナイメージを取得する方法を説明します。
コンテナイメージを取得する方法はいろいろありますが、本記事では Docker と呼ばれるソフトウェアを利用します。

Docker

WindowsでDockerを利用するためには、Dockerの公式ページ からインストーラをダウンロードしてインストールします。
インストール後にDocker Desktopを起動すれば、Windows上でDockerが利用可能になります。

WindowsでのDockerのインストールについては、公式のドキュメント を参考にしてください。

コンテナイメージの取得コマンドを得る

Epic GamesのGitHub Organizationページから [Packages] > [unreal-engine] を選択します。
今回はタグが dev-slim-5.0.0 のコンテナイメージを取得するため、[dev-slim-5.0.0] をクリックします。
コンテナイメージを取得するためのコマンドが表示されるため、コピーします。

コンテナイメージ(dev-slim-5.0.0)

コンテナイメージを取得する

Windowsでコンテナイメージを取得するには、コマンドプロンプトを開いて先ほど取得したコマンドを実行します。
ただしコンテナイメージの取得は、Unreal Engineのソースコードへアクセスする権限が必要なため、docker login コマンドを使ってログインする必要があります。
このときにユーザとパスワードを聞かれるので、GitHubアカウントのユーザ名とパスワード(または read:package 権限を持つトークン)を入力します。

docker login ghcr.io

ログインに成功したら、Unreal Engineのコンテナイメージを取得できるようになります。
タグが dev-slim-5.0.0 のコンテナイメージを取得する場合は、次のコマンドを実行します。

docker pull ghcr.io/epicgames/unreal-engine:dev-slim-5.0.0

コンテナイメージが取得できたことを確認するためには、コマンド docker images を実行します。
正しくコンテナイメージが取得できていれば、コマンドの実行結果に取得したイメージが表示されるはずです。

$ docker images
REPOSITORY                           TAG                   IMAGE ID       CREATED         SIZE
ghcr.io/epicgames/unreal-engine      dev-slim-5.0.0        a9edd4a7beb3   2 weeks ago     35.7GB

コンテナを起動する

コンテナイメージを使ってコンテナを起動します。
コンテナを起動するためには、次のコマンドを実行します。

docker run -it ghcr.io/epicgames/unreal-engine:dev-slim-5.0.0 /bin/bash

コマンドを実行するとコンテナ環境に入ることができます。
コンテナ環境はLinuxであるため、Linuxの基本的なコマンドが実行できます。
試しに ls コマンドを実行すると、コンテナ環境に入った状態のディレクトリに配置されているファイルやディレクトリの一覧が表示されます。
初期状態では、Unreal Engineが配置されたディレクトリ Engine のみが表示されています。

$ ls
Engine

コンテナ内でのプロジェクトビルド

コンテナ内でUnreal Engineのプロジェクトをビルドする方法を説明します。
コンテナ環境でUnreal Engineのプロジェクトをビルドするために、AutomationTool を利用します。
プロジェクトをビルドするためには、コマンド RunUAT.sh のサブコマンド BuildCookRun を実行します。
ここで .uproject ファイルは /path/to/SampleProject.uproject に配置され、ビルド生成物は /tmp/Packaged に配置することとします。

/home/ue4/UnrealEngine/Engine/Build/BatchFiles/RunUAT.sh BuildCookRun \
    -utf8output \
    -platform=Linux \
    -clientconfig=Shipping \
    -serverconfig=Shipping \
    -project=/path/to/SampleProject.uproject \
    -noP4 \
    -nodebuginfo \
    -allmaps \
    -cook \
    -build \
    -stage \
    -prereqs \
    -pak \
    -archive \
    -archivedirectory=/tmp/Packaged

コマンドを実行しエラーが発生しなければ、次のようなログが出力されます。

...
BUILD SUCCESSFUL
AutomationTool executed for 0h 6m 4s
AutomationTool exiting with ExitCode=0 (Success)

コンテナ内でのプラグインビルド

続いて、コンテナ内でUnreal Engineのプラグインをビルドする方法を説明します。
Unreal Engineのプラグインのビルドも同様に、Automation Toolを利用します。
プラグインをビルドするためには、コマンド RunUAT.sh のサブコマンド BuildPlugin を使用します。
.uplugin ファイルは /path/to/SamplePlugin.uplugin に配置され、ビルド生成物は /tmp/Packaged に配置することとします。

/home/ue4/UnrealEngine/Engine/Build/BatchFiles/RunUAT.sh BuildPlugin \
    -Plugin=/path/to/SamplePlugin.uplugin \
    -Package=/tmp \
    -Rocket

コマンドを実行しエラーが発生しなければ、次のようなログが出力されます。

...
BUILD SUCCESSFUL
AutomationTool executed for 0h 0m 22s
AutomationTool exiting with ExitCode=0 (Success)

参考情報