UE4のエンジン複数のバージョンを運用している場合に、C++コードを含むUE4プロジェクトをアーティストなどに配布するときに、プロジェクトとエンジンがちゃんと関連付けされてないと、違うバージョンのエディタが起動してしまったり、ビルド済みのはずなのにコードをビルドしようとしてしまうことがあります。
ていうか、そういう状況になったので、ざっと調査しました。
プロジェクトに関連付いてるエンジンは.uprojectファイルのEngineAssociationのIDで選択されるみたいです。
この辺はヒストリアさんのブログにありました。
[UE4] エンジンをコードからビルドした場合のバージョン表記
この記事にもある「.uprojectを右クリックしてエンジンを選ぶ」という機能ですが、これが有効になっていないPCがあったりします。詳しく検証してないですが、おそらくEpic Game Launcherなどからインストールせずに直に社内リポジトリなどからUE4を持ってきた場合に有効になっていないんじゃないかと思います。
では、どうやって有効にするかというと、
Engine/Binaries/Win64/UnrealVersionSelector-Win64-Shipping.exe
を実行すれば良いのだと思います。
これを実行して、.uprojcetファイルを右クリックすると無事
といったメニューが出てきます。
ここでSwitch Unreal Engine Versionを選んで、そのプロジェクトで実行したいエンジンを選択します。
これで.uprojectファイルをダブルクリックすると希望するUE4のエディターが起動しますが、プロジェクトのバイナリがそのエンジンでビルドされたものでない場合は、プロジェクトコードのビルドが発生します。これをどこで見ているかというと、
UE4 エンジンの Engine/Binaries/Win64/UE4Editor.versionのBuildId
プロジェクトのBinaries/Win64/UE4Editor.modulesのBuildId
このふたつが一致していれば、そのエンジンでビルドされたプロジェクトということで、プロジェクトコードのビルドは実行されません。
{
"MajorVersion": 4,
"MinorVersion": 19,
"PatchVersion": 0,
"Changelist": 0,
"CompatibleChangelist": 0,
"IsLicenseeVersion": 0,
"IsPromotedBuild": 1,
"BranchName": "",
"BuildId": "xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx",
}
{
"BuildId": "xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx",
"Modules":
{
"hoge": "UE4Editor-hoge.dll"
}
}
Engine/Binaries/Win64/UE4Editor.modlues
にも同じBuildIdがありますが、エンジン起動時の照合はUE4Editor.versionの方で行っています。
(4.19での話なので、将来的に変更されるかもしれません)
ということで、エンジンとプロジェクトの関連付けの話でした。