エディタから.exeへ:初めてのスタンドアロンビルド
ゲームコードをエディタから分離し、1つのプロジェクトを動かす小さなランタイムと、エディタのビルドボタンを用意。あえてまだアセットパイプラインは作りません。
10月末まで、Hydroのゲームはエディタの中でしか動きませんでした。リリースできないエンジンは技術デモです。次のステップは、誰でも動かせるゲーム、1つのフォルダと1つの.exeでした。
ステップ1:ゲームコードをエディタから出す
ゲームのスクリプトはエディタのプロジェクトの中にありました。それを独立したライブラリGameに移しました。エディタと新しいランタイムはどちらもGameとHydroをリンクし、起動時に同じ生成済みリフレクションデータを登録します。同じスクリプトを動かすので、両者がずれることはありません。
ステップ2:一つのことだけをするランタイム
Runtimeプロジェクトは、1つのプロジェクトファイルを開き、レンダラー設定を適用し、開始シーンを読み込んで実行します。開発中はコマンドラインでプロジェクトを渡し、パッケージでは.exeの隣にある同じ名前のプロジェクトファイルだけを探します。パッケージしたゲームは自分のフォルダで動き、F11でフルスクリーンを切り替え、スクリプトからゲームを終了できます。エディタでは同じ呼び出しがプレイモードを止めるだけです。
ビルドは2種類です。テスト用にログ付きのコンソールを残すReleaseと、コンソールのない普通のウィンドウアプリのDistです。
ステップ3:ビルドボタン
Package.batはランタイムとそれがリンクするものだけをビルドするので、エディタは開いたままで構いません。そしてBuilds/<Project>/に、.exe、シェーダーコンパイラのDLL、エンジンのシェーダー、プロジェクトとそのアセット、ビルド情報ファイルを用意します。エディタではFile › Build…がプロジェクトとシーンを保存し、出力をリアルタイムで表示しながらスクリプトを実行し、完了後に「実行」と「フォルダを開く」を提示します。
あえてアセットパイプラインではない
ビルドは、ランタイムがすでに読んでいるファイルをコピーするだけです。クッキングもパッキングも圧縮もありません。これは意図的です。推測ではなく、実際のビルドの計測をもとにアセットパイプラインを設計したいからです。それまで守るルールは一つ。コードはアセットにパスではなく、アセットマネージャー経由のハンドルでアクセスすること。そうすれば、後からゲームコードに触れずに、個別のファイルをパックしたファイルに置き換えられます。
残っている課題
- CIでのパッケージ化。プッシュごとに遊べるビルドができるように。
- Visual StudioのないPCでのテスト。Microsoft Visual C++ 再頒布可能パッケージが必要です。