関連ブログ
- [UE4][UE5]開発環境の容量を少しでも減らす 2024.08.14UE
- [UE5] PushModel型のReplicationを使い、ネットワーク最適化を図る 2024.05.29UE
- [UE5]マテリアルでメッシュをスケールする方法 2024.01.17UE
CATEGORY
2015.04.02UE4UE/ C++
改訂バージョン: Unreal Engine 4.19 |
UE4でプロジェクトを作成するとプロジェクトフォルダのトップに作成される「.uproject」ファイルですが、このファイルの中に何が書かれているか、皆さんご存知でしょうか?
今回は、このuprojectファイルの中身を覗いてみたいと思います。
uprojectファイルはjson形式のテキストファイルです。
適当なテキストエディタで開くと、中身を確認することが出来ます。
早速、1つ適当なプロジェクトを作って、中身を覗いてみます。
1 2 3 4 5 6 |
{ "FileVersion": 3, "EngineAssociation": "4.7", "Category": "", "Description": "" } |
デフォルトではこのような形になっています。
“FileVersion”は、uprojectファイル自体のファイルフォーマットのバージョンです。過去に1と2があったのでしょうか…
“EngineAssociation”は、使用しているエンジンのバージョンです。複数バージョンのUE4がインストールされている場合、プロジェクトを開くエンジンは、ココから選択されているようです。
“Category”と”Description”は、そのままカテゴリ名と説明文なのですが、ドコで使われるのでしょうか?現在のバージョンでは、プロジェクトブラウザでも表示されている形跡が見つからないので、使われていないのかもしれません。
これだけだと情報量が少なめですが、他にもいくつかuprojectファイルに格納される情報があります。
例えば、プロジェクトにC++コードを含むと、下記のようになります。
1 2 3 4 5 6 7 8 9 10 11 12 13 |
{ "FileVersion": 3, "EngineAssociation": "4.7", "Category": "", "Description": "", "Modules": [ { "Name": "MyProject", "Type": "Runtime", "LoadingPhase": "Default" } ] } |
自作のC++コードからビルドされるモジュール名が追加されました。
起動時にロードする、デフォルト以外のモジュールが”Modules”に列挙されるようです。
エンジンを、ランチャーからインストールするバージョンではなく、ソースコードからビルドしたバージョンに切り替えてみます。
1 2 3 4 5 6 |
{ "FileVersion": 3, "EngineAssociation": "{8037B647-42F3-0FD1-EA98-F88744D67BA7}", "Category": "", "Description": "" } |
“EngineAssociation”が謎の文字列になりました。
これは、エンジンのソースコードプロジェクトのディレクトリパスから生成されたハッシュ値のようです。
※↑ウソでした。ゴメンナサイ。これについては、また別の機会で書いてみたいと思います。
いくつかのプラグインをアンロードしてみます。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 |
{ "FileVersion": 3, "EngineAssociation": "4.7", "Category": "", "Description": "", "Plugins": [ { "Name": "CableComponent", "Enabled": false }, { "Name": "CustomMeshComponent", "Enabled": false } ] } |
もし間違えて必須プラグインをアンロードしてしまい、プロジェクトを開けなくなってしまった!という場合には、慌てずuprojectファイルを開いて、該当箇所を削除すれば設定を戻すことが出来ます。プラグインのロード状況も、デフォルトとの差を上書きする形で保存されているようです。
じゃあ他にどんな設定を記述出来るの?ということになるかと思いますので、ココでネタバレです。
uprojectファイルに記述された設定項目は、ソースコード上では FProjectDescriptor という構造体にロードされているようです。
公式ドキュメントのFProjectDescriptorのリファレンスを見てみると、Variablesの項目にuprojectファイル上と同名のメンバについての説明が書かれています。
C++コード上では、
IProjectManager::Get().GetCurrentProject()
という方法でアクセス出来るみたいです。
普段のゲーム開発では、直接触れることは少ないかもしれませんが、中身を把握しておくことでいざという時のトラブル対策がスムーズになります。
たま~にでも、UnrealEngineを構成する細かな要素について調べてみるのも面白いかもしれません。