ゴールへの道しるべもない、自身の方角すら定まっていない、そんな状態で広大な砂漠の中を彷徨っている。
限りがある水と食糧を携行して、この砂漠のどこかにあるオアシスを求めて旅をしている。
というのはひとつの暗喩だ。
アンリアルエンジン4の膨大なソースコードを前にして、途方にくれているのである。
前回から、一週間近くあいてしまったので、まずは前回のおさらいから。
IDE(Visual Studio 2013)からは、エディターとエディターで作成したゲームのどちらかを選んでデバッグ実行が出来る。
プロジェクト設定のコマンド引数に、起動したいUE4プロジェクト(.uproject)のパスを設定する。
起動構成を「Developer Editor」にすればエディターがビルドされ実行される。
起動構成を「Developer」にすれば作成したゲームがビルドされ実行される。
というところまでやったんだった。
今回からは、おそらく相対的にコード量が少ないであろうゲームエンジン側のソース(つまり作成したゲーム)から、ステップ実行してソースを追っかけていこうと思う。
ゲームエンジンの構造や仕組みがわかれば、エディター側のソースを読む助けにもなろう、と。
Windows向けビルドのプログラムのエントリポイントは LaunchWindows.cpp になる。
UnrealEngine\Engine\Source\Runtime\Launch\Private\Windows\LaunchWindows.cpp
この中の WinMain 関数から始まって、ウィンドウズアプリケーションの決まりごとを色々やって、Launch.cpp の GuadedMain() を呼び出してゲームを開始している。
UnrealEngine\Engine\Source\Runtime\Launch\Private\Launch.cpp
ゲームのウィンドウを閉じると、この GuadedMain() から制御が返ってきて、いろいろ後始末してプロセス終了となる。
ちょっと思ったんだけれども、このエントリポイントって普通にウィンドウズアプリケーションを作るときの WinMain 関数だよな。
俺は考えた。
もしかしてだけど、ここから呼び出される関数と依存関係にある関数をひたすらコピペしてでっかいCPPファイルを作れば、純粋なゲームロジックだけを抽出できるんじゃないの?
実際はエンジン用に最適化されたアセットデータとか、DLLのリンクとか、マクロとか、いろいろ壁はあるんだろうけどね。