ソースコードを読むというより、ビルド関連をいろいろいじっていた。
画像はプロジェクトをパッケージングした際に出力されるゲームのディレクトリ構造となる。
CppProjectというのはプロジェクトの名前。
これ以降の話は、いろいろいじってみての推測になる。
おそらくUE4でパッケージングされたEXEファイルの内容物とは、ベースとなるエンジン部分のEXEファイル(UE4Game.exe)に、追加したCPPファイルなどから作ったDLLなどをリンクして作られてるんじゃないかと。
ちなみに UE4Game.exe のコピー元は、Program Files\Unreal Engine\4.4\Engine\Binaries\Win64 の中に入っている。
アセットなんかは、画像にあるPAKSフォルダ内にある.PAKファイルに圧縮されて入れられているものと思われる。
これが正しいとしたら、これってUnityとそれほど変わらない仕組みだよね。
確かUnityでパッケージした実行ファイルもシーンを圧縮したファイルと、Unityのランタイムで出来ていたように思う。
まあ、ゲームエンジンなんだから、このへんの考え方は共通なのかな。
ただ、UE4の場合は追加したコードがスクリプトじゃなくてCPPファイルなので、コンパイルしてDLL化してリンクする(予想、本当のところは知らない)という一手間が加わるのではないかと。
なんで、こういう話をしているかというと、ひとつの問題が発端となっている。
実はソースコードからビルドしたエディタ上で、プロジェクトをパッケージングしても失敗してしまうのである。
インストーラで入れたUE4エディタからパッケージングしたらうまく行くのに、ソースコードからビルドしたエディタからだとうまく行かない。
エラーログを読んでみると、自分でビルドした方にはUE4Game.exeが存在しなかったのだ。
ネットで調べてみると、ビルドオプションを変更する必要があった。
通常のエディターのビルドは、下記の構成になっている。
これを「Development Editor」から、「Development」に変更してビルドしてくださいね、と。
やってみると、確かに UnrealEngine\Engine\Binaries\Win64 配下にそれまで無かった UE4Game.exe が作られているではないか。
さらに、ビルドが終了してデバッグ実行してみると、事態は新展開を見せた。
(実は細かいビルドエラーが出たんだけど欲しい部分のビルドは成功したので無視)
ビルド構成を「Development Editor」から、「Development」に変更すると、デバッグ起動したときに起動されるのはエディタのほうではなく、パッケージングしたゲームのほうだったのである。
で、そのときに実行されているのが、この「UE4Game.exe」なのだ。
この「UE4Game.exe」と、コマンドライン引数に与えたプロジェクトのパス、この二つの情報からパッケージングしたゲームが起動される、ということはつまり、上で述べた「UE4でパッケージングされたEXEファイルの内容物とは、ベースとなるエンジン部分のEXEファイル(UE4Game.exe)に、追加したCPPファイルなどから作ったDLLなどをリンクして作られてる」ということなのではないか、という推論が生まれたのでした。
そうそう、あと、ものすごく初歩的なことなんだけれども、UE4のマニュアルけっこう日本語化進んでるのな。
次回からはちゃんとこっちのマニュアルのほうも読んで行こうと思う。