UE4 のビルドツール UnrealBuildTool はビルドファイルの定義に *.Target.cs や *.Build.cs を使います。それとは別に、デフォルトパラメータを定義できる BuildConfiguration.xml があります。
・UE4 Programming Guide / BuildTools / UnrealBuildTool / Build Configuration
例えば次の内容で BuildConfiguration.xml を作り、Documents のフォルダ "Unreal Engine\UnrealBuildTool" に入れておくと UnityBuild を無効化することができます。
※ UnityBuild を off にするとビルドが極端に遅くなるのでお勧めしません。
BuildConfiguration.xml のチェックが行われている場所は以下の 4 つです。
この順番で読み込まれるため、下の方が優先順位が高くなります。
(3), (4) はすべてのエンジンに対して有効になります。UE4 のバージョンによって設定項目に若干違いがあるので、複数のエンジンを併用している場合は注意が必要です。エンジンによってエラーが出る場合は (2) のようにエンジン毎のフォルダに入れておいた方が良いかもしれません。
たとえば ProcessorCountMultiplier は UE4 4.20 までは BuildConfiguration に含まれていました。4.21 では無くなっており、代わりに Executor 毎の個別パラメータを使うようになっています。
UE4 4.20 の場合
↓
UE4 4.21 の場合
ParallelExecutor は 4.21 で新しく追加されたものです。以前の LocalExecutor も残っていますが、分散ビルドを使わない場合 4.21 以降はデフォルトが ParallelExecutor になります。
LocalExecutor の場合、4 core 8 thread の CPU ではデフォルトでビルドに 4 thread 使います。ProcessorCountMultiplier を 2.0 にすると 8 thread 全部使うようになります。8 core 16 thread の CPU ではなぜかデフォルトで 12 thread、ProcessorCountMultiplier を 2.0 にすると 16 thread になります。計算が合わないように見えるのは、5 core 以上で計算式が変わるからです。
4.21 から追加された ParallelExecutor では特に ProcessorCountMultiplier を設定しなくても、最初からハードウエアと一致する 8 thread や 16 thread でビルドが行われています。まとめると下記の通り。
つまり以前の LocalExecutor の場合、ProcessorCountMultiplier = 2.0 は効率を上げるために有効でしたが、ParallelExecutor では本来の倍のスレッドが走ってしまいます。古い設定を継承するとスレッド数が過剰になるため BuildConfiguration から削除されたのかもしれません。ちなみに ParallelExecutor は下記の設定で無効化できます。
このように UnrealBuildTool には様々な設定があります。オプションの種類は下記のファイルを見るとわかります。
このファイルを見ると UE4 4.22 からは cpp のオプションが増えている事がわかります。下記のような設定もできるようになりました。
関連エントリ
・UE4 UnrealBuildTool VisualStudio の選択を行う
・UE4 UnrealBuildTool *.Build.cs のコードを共有する
・UE4 Programming Guide / BuildTools / UnrealBuildTool / Build Configuration
例えば次の内容で BuildConfiguration.xml を作り、Documents のフォルダ "Unreal Engine\UnrealBuildTool" に入れておくと UnityBuild を無効化することができます。
<?xml version="1.0" encoding="utf-8"?>
<Configuration xmlns="https://www.unrealengine.com/BuildConfiguration">
<BuildConfiguration>
<bUseUnityBuild>false</bUseUnityBuild>
</BuildConfiguration>
</Configuration>
<Configuration xmlns="https://www.unrealengine.com/BuildConfiguration">
<BuildConfiguration>
<bUseUnityBuild>false</bUseUnityBuild>
</BuildConfiguration>
</Configuration>
※ UnityBuild を off にするとビルドが極端に遅くなるのでお勧めしません。
BuildConfiguration.xml のチェックが行われている場所は以下の 4 つです。
(1) Engine\Programs\NotForLicensees\UnrealBuildTool\BuildConfiguration.xml (2) Engine\Saved\UnrealBuildTool\BuildConfiguration.xml (3) C:\Users\<USERNAME>\AppData\Roaming\Unreal Engine\UnrealBuildTool\BuildConfiguration.xml (4) C:\Users\<USERNAME>\Documents\Unreal Engine\UnrealBuildTool\BuildConfiguration.xml
この順番で読み込まれるため、下の方が優先順位が高くなります。
(3), (4) はすべてのエンジンに対して有効になります。UE4 のバージョンによって設定項目に若干違いがあるので、複数のエンジンを併用している場合は注意が必要です。エンジンによってエラーが出る場合は (2) のようにエンジン毎のフォルダに入れておいた方が良いかもしれません。
たとえば ProcessorCountMultiplier は UE4 4.20 までは BuildConfiguration に含まれていました。4.21 では無くなっており、代わりに Executor 毎の個別パラメータを使うようになっています。
UE4 4.20 の場合
<?xml version="1.0" encoding="utf-8"?>
<Configuration xmlns="https://www.unrealengine.com/BuildConfiguration">
<BuildConfiguration>
<ProcessorCountMultiplier>2.0</ProcessorCountMultiplier>
</BuildConfiguration>
</Configuration>
<Configuration xmlns="https://www.unrealengine.com/BuildConfiguration">
<BuildConfiguration>
<ProcessorCountMultiplier>2.0</ProcessorCountMultiplier>
</BuildConfiguration>
</Configuration>
↓
UE4 4.21 の場合
<?xml version="1.0" encoding="utf-8"?>
<Configuration xmlns="https://www.unrealengine.com/BuildConfiguration">
<LocalExecutor>
<ProcessorCountMultiplier>2.0</ProcessorCountMultiplier>
</LocalExecutor>
<ParallelExecutor>
<ProcessorCountMultiplier>1.0</ProcessorCountMultiplier>
</ParallelExecutor>
</Configuration>
<Configuration xmlns="https://www.unrealengine.com/BuildConfiguration">
<LocalExecutor>
<ProcessorCountMultiplier>2.0</ProcessorCountMultiplier>
</LocalExecutor>
<ParallelExecutor>
<ProcessorCountMultiplier>1.0</ProcessorCountMultiplier>
</ParallelExecutor>
</Configuration>
ParallelExecutor は 4.21 で新しく追加されたものです。以前の LocalExecutor も残っていますが、分散ビルドを使わない場合 4.21 以降はデフォルトが ParallelExecutor になります。
LocalExecutor の場合、4 core 8 thread の CPU ではデフォルトでビルドに 4 thread 使います。ProcessorCountMultiplier を 2.0 にすると 8 thread 全部使うようになります。8 core 16 thread の CPU ではなぜかデフォルトで 12 thread、ProcessorCountMultiplier を 2.0 にすると 16 thread になります。計算が合わないように見えるのは、5 core 以上で計算式が変わるからです。
// UBT LocalExecutor の計算式
if( ProcessorCountMultiplier == 1.0 ){
if( Core数 > 4 ){
ビルドに使う thread 数 = ( Core数 + Thread数 ) / 2;
}else{
ビルドに使う thread 数 = Core数;
}
}else{
ビルドに使う thread 数 = Core数 * ProcessorCountMultiplier;
}
if( ProcessorCountMultiplier == 1.0 ){
if( Core数 > 4 ){
ビルドに使う thread 数 = ( Core数 + Thread数 ) / 2;
}else{
ビルドに使う thread 数 = Core数;
}
}else{
ビルドに使う thread 数 = Core数 * ProcessorCountMultiplier;
}
4.21 から追加された ParallelExecutor では特に ProcessorCountMultiplier を設定しなくても、最初からハードウエアと一致する 8 thread や 16 thread でビルドが行われています。まとめると下記の通り。
Executor | LocalExecutor | ParallelExecutor | ||
---|---|---|---|---|
Multiplier | 1.0 | 2.0 | 1.0 | 2.0 |
Skylake i7-6700K ( 4C8T ) | 4 | 8 | 8 | 16 |
CoffeeLake i7-8700K ( 6C12T ) | 9 | 12 | 12 | 24 |
Ryzen 7 1800X ( 8C16T ) | 12 | 16 | 16 | 32 |
つまり以前の LocalExecutor の場合、ProcessorCountMultiplier = 2.0 は効率を上げるために有効でしたが、ParallelExecutor では本来の倍のスレッドが走ってしまいます。古い設定を継承するとスレッド数が過剰になるため BuildConfiguration から削除されたのかもしれません。ちなみに ParallelExecutor は下記の設定で無効化できます。
<?xml version="1.0" encoding="utf-8"?>
<Configuration xmlns="https://www.unrealengine.com/BuildConfiguration">
<BuildConfiguration>
<bAllowParallelExecutor>false</bAllowParallelExecutor>
</BuildConfiguration>
</Configuration>
<Configuration xmlns="https://www.unrealengine.com/BuildConfiguration">
<BuildConfiguration>
<bAllowParallelExecutor>false</bAllowParallelExecutor>
</BuildConfiguration>
</Configuration>
このように UnrealBuildTool には様々な設定があります。オプションの種類は下記のファイルを見るとわかります。
Engine\Saved\UnrealBuildTool\BuildConfiguration.Schema.xsd
このファイルを見ると UE4 4.22 からは cpp のオプションが増えている事がわかります。下記のような設定もできるようになりました。
<?xml version="1.0" encoding="utf-8"?>
<Configuration xmlns="https://www.unrealengine.com/BuildConfiguration">
<BuildConfiguration>
<CppStandard>Cpp14</CppStandard>
</BuildConfiguration>
</Configuration>
<Configuration xmlns="https://www.unrealengine.com/BuildConfiguration">
<BuildConfiguration>
<CppStandard>Cpp14</CppStandard>
</BuildConfiguration>
</Configuration>
関連エントリ
・UE4 UnrealBuildTool VisualStudio の選択を行う
・UE4 UnrealBuildTool *.Build.cs のコードを共有する
2019/04/09
UE4 UnrealBuildTool VisualStudio の選択を行う
UE4 で C++ プロジェクトを作ると VisualStudio 用のプロジェクトファイル *.vcxproj や *.sln も自動的に作られます。ただしこれらのファイルは UE4 のビルドシステムにとっては必ずしも必要ではなく、IDE を使うための中間ファイルとみなされています。そのため IDE プロジェクトファイルは Git や Perforce には登録されず、必要になったタイミングで作り直します。
VisualStudio プロジェクトファイルを作るには *.uproject ファイルの関連付けを利用するのが最も簡単です。*.uproject ファイルの上で右クリックして "Generate Visual Studio Project files" を選択します。
このとき呼ばれているツールは UnrealVersionSelector.exe です。内部で UnrealBuildTool を呼び出しているのですが、UnrealVersionSelector 経由だとあまり細かいオプション指定ができないようです。
オプション指定を行う場合は、直接 UnrealBuildTool を呼び出すか、またはソースコード版 Engine の GeneratedProjectFiles.bat を使うことができます。
●任意の VisualStudio のバージョンを指定して Project File を作る
UnrealBuildTool や GeneratedProjectFiles.bat を使うと、使用する VisualStudio のバージョンを指定することができます。*.uproject への関連付けも不要ですし、複数のバージョンの VisualStudio をインストールしている場合に便利です。
例えば UE4 4.21 で VisualStudio 2015 を使う場合下記のように "-2015" オプションを指定します。
*.uproject ファイルはフルパスで指定する必要があるので注意。
GitHub のソースコード版を使っている場合は GeneratedProjectFiles.bat を使って同じことができます。
同様に -2017 や -2019 (4.22 以降) もあります。↓ 4.22 で 2019 を使う場合の例。
ソースコード版エンジンそのものをビルドする場合は GeneratedProjectFiles.bat に -2017 や -2019 などのオプションをつけるだけで OK です。
●プロジェクトファイルの Platform 数を制限する
プロジェクトファイルを作るときに、-platforms オプションを与えておくと不要な Platform を除外してくれます。例えば Win64 と Android だけ含めたい場合は "-platforms=Win64+Android" になります。プロジェクトファイルが小さくなるので、VisualStudio での読み込みが若干速くなります。
●ビルド時に直接コンパイラのバージョンを指定する
UE4 のビルドは UnrealBuildTool が行います。IDE も UnrealBuildTool を呼び出しているだけなので、直接ビルドすることもできます。この場合も -2015 や -2017 等のオプション指定ができます。
最初の引数 "MyProject421Editor" は、ビルド対象の *.Target.cs を意味しています。"MyProject421Editor" は MyProject421Editor.Target.cs を選択します。Editor なしでビルドしたい場合は MyProject421 です。
4.21 と 4.22 では若干引数が変わっているので、直接 UnrealBuildTool.exe を呼び出すよりは Build.bat や Rebuild.bat を使った方がおそらく安全でしょう。
どのようなコマンドライン引数でビルドが行われているのか VisualStudio のプロパティからも確認できるので、うまくビルドできない場合は確認してみることをおすすめします。
関連エントリ
・UE4 UnrealBuildTool *.Build.cs のコードを共有する
VisualStudio プロジェクトファイルを作るには *.uproject ファイルの関連付けを利用するのが最も簡単です。*.uproject ファイルの上で右クリックして "Generate Visual Studio Project files" を選択します。
このとき呼ばれているツールは UnrealVersionSelector.exe です。内部で UnrealBuildTool を呼び出しているのですが、UnrealVersionSelector 経由だとあまり細かいオプション指定ができないようです。
オプション指定を行う場合は、直接 UnrealBuildTool を呼び出すか、またはソースコード版 Engine の GeneratedProjectFiles.bat を使うことができます。
●任意の VisualStudio のバージョンを指定して Project File を作る
UnrealBuildTool や GeneratedProjectFiles.bat を使うと、使用する VisualStudio のバージョンを指定することができます。*.uproject への関連付けも不要ですし、複数のバージョンの VisualStudio をインストールしている場合に便利です。
例えば UE4 4.21 で VisualStudio 2015 を使う場合下記のように "-2015" オプションを指定します。
set ENGINE_PATH=c:\Program Files\Epic Games\UE_4.21
"%ENGINE_PATH%\Engine\Binaries\DotNET\UnrealBuildTool.exe" -projectfiles -project=c:/ue/MyProject421/MyProject421.uproject -game -engine -progress -2015
"%ENGINE_PATH%\Engine\Binaries\DotNET\UnrealBuildTool.exe" -projectfiles -project=c:/ue/MyProject421/MyProject421.uproject -game -engine -progress -2015
*.uproject ファイルはフルパスで指定する必要があるので注意。
GitHub のソースコード版を使っている場合は GeneratedProjectFiles.bat を使って同じことができます。
set ENGINE_PATH=c:\ue\4.21.0
%ENGINE_PATH%\GeneratedProjectFiles.bat -project=c:/ue/MyProject421/MyProject421.uproject -game -engine -progress -2015
%ENGINE_PATH%\GeneratedProjectFiles.bat -project=c:/ue/MyProject421/MyProject421.uproject -game -engine -progress -2015
同様に -2017 や -2019 (4.22 以降) もあります。↓ 4.22 で 2019 を使う場合の例。
c:\ue\4.22.0\Engine\GeneratedProjectFiles.bat -project=c:/ue/MyProject422/MyProject422.uproject -game -engine -progress -2019
ソースコード版エンジンそのものをビルドする場合は GeneratedProjectFiles.bat に -2017 や -2019 などのオプションをつけるだけで OK です。
c:\ue\4.22.0\GeneratedProjectFiles.bat -2019
●プロジェクトファイルの Platform 数を制限する
プロジェクトファイルを作るときに、-platforms オプションを与えておくと不要な Platform を除外してくれます。例えば Win64 と Android だけ含めたい場合は "-platforms=Win64+Android" になります。プロジェクトファイルが小さくなるので、VisualStudio での読み込みが若干速くなります。
set ENGINE_PATH=c:\ue\4.21.0
%ENGINE_PATH%\Engine\Binaries\DotNET\UnrealBuildTool.exe -projectfiles -project=c:/ue/MyProject421/MyProject421.uproject -game -engine -progress -2015 -platforms=Win64
%ENGINE_PATH%\Engine\Binaries\DotNET\UnrealBuildTool.exe -projectfiles -project=c:/ue/MyProject421/MyProject421.uproject -game -engine -progress -2015 -platforms=Win64
●ビルド時に直接コンパイラのバージョンを指定する
UE4 のビルドは UnrealBuildTool が行います。IDE も UnrealBuildTool を呼び出しているだけなので、直接ビルドすることもできます。この場合も -2015 や -2017 等のオプション指定ができます。
set ENGINE_PATH=c:\ue\4.21.0
%ENGINE_PATH%\Engine\Build\BatchFiles\Build.bat MyProject421Editor Win64 Development -project=c:/ue/MyProject421/MyProject421.uproject -2015
%ENGINE_PATH%\Engine\Build\BatchFiles\Build.bat MyProject421Editor Win64 Development -project=c:/ue/MyProject421/MyProject421.uproject -2015
最初の引数 "MyProject421Editor" は、ビルド対象の *.Target.cs を意味しています。"MyProject421Editor" は MyProject421Editor.Target.cs を選択します。Editor なしでビルドしたい場合は MyProject421 です。
4.21 と 4.22 では若干引数が変わっているので、直接 UnrealBuildTool.exe を呼び出すよりは Build.bat や Rebuild.bat を使った方がおそらく安全でしょう。
どのようなコマンドライン引数でビルドが行われているのか VisualStudio のプロパティからも確認できるので、うまくビルドできない場合は確認してみることをおすすめします。
関連エントリ
・UE4 UnrealBuildTool *.Build.cs のコードを共有する