BLOGブログ

2015.06.25UE4UE/ C++

[UE4] エンジンをコードからビルドした場合のバージョン表記

かな~りニッチな話題です。

 

UE4は、最初に公開された4.0から、現在最新の4.8まで、1つのPC上に同時にインストールし、それぞれ独立して使用することが出来ます。

普段、UE4のプロジェクトを開く際に、プロジェクトブラウザであればサムネイル上にバージョン番号が表示されますし、.uprojectをダブルクリックすると、適切にプロジェクトを作成したバージョンのエンジンで開くことが出来ます。

これが適切に判断出来るのは、.uprojectファイル内に、このプロジェクトがどのエンジンバージョンで作成されているかが記述されているためです。

 

.uprojectファイルをテキストエディタで開いてみると、 下記のような記述が見つかります。

“EngineAssociation”: “4.8”,

最初にこの記述が読み取られ、適切なバージョンのエンジンでプロジェクトが開かれるわけです。

 

通常、エンジンのバージョンは “4.7” とか “4.8” とかで表記されます。

では、GitHubからソースコードを入手し、(中身を改造し、)自分でビルドしたエンジンを使用すると、コレはどういう扱いになるのでしょうか?

 

試しにプロジェクトを作成してみると、下記のような記述になっています。

“EngineAssociation”: “{E5D4DAF0-4F26-2F22-E7A4-D383235AD7C4}”,

これは、全く同じコードからビルドしても、別のPCであれば変わってしまいますし、同一環境であっても規則性の不明な文字列となっています。

 

この状態で.uprojectをダブルクリックすると、適切に自分でビルドしたエンジンからプロジェクトが開かれます。

また、.uprojectを右クリックして「Switch Unreal Engine version…」を選択すると、プルダウンの中に自分でビルドしたエンジンのパスが並んでいます。

また、自分でビルドしたエンジンから新規プロジェクトを作成すると、”EngineAssociation”の値は、全く同じ文字列になります。

文字列の規則性は分かりませんが、どうやら、ビルドしたエンジンのディレクトリと1対1で紐付いているようです。

 

これが、複数人で共同作業するプロジェクトでは問題になります。

.uprojectファイルが個々人で異なる内容になり、間違えてコミットしてしまうと衝突してしまいます。

しかし、.uprojectファイルを共有しないワケにもいきません。

 

実はこの文字列とエンジンディレクトリとの紐付けは、Windowsのレジストリ上に保存されています。

レジストリエディタから、

HKEY_CURRENT_USER / Software / Epic Games / Unreal Engine / Builds

を見てみると、下記のように謎の文字列とエンジンディレクトリがペアになっているのが分かります。

エンジンの初回起動時に、そのパスがまだ登録されていなければ、ランダムな文字列を作成して登録します。

以降は、レジストリに登録された値に基づいてエンジンディレクトリを検索します。

 

初回起動時にこの文字列を生成しているのは、DesktopPlatformWindows.cpp内の FDesktopPlatformWindows::RegisterEngineInstallation() という関数です。

 

つまり、予め決めたパスをレジストリに登録しておくか、エンジンコードを修正するかして、EngineAssociation の値を固定することが出来れば、.uprojectファイルの衝突を避けてカスタマイズしたエンジンを共有することが可能になります。

ちょっと正しい手段かどうか確信は無いのですが。。。