このリポジトリは、Unreal Engine5 で開発したゲームを箱庭と連携して実行できるようにするためのプラグイン機能開発リポジトリです。
サポート状況は以下のとおりです。
- MacOS(AppleSilicon)
- MacOS(Intel)
- Windows
- Ubuntu
アーキテクチャ構成は下図のとおりです。
Unreal Engineで作成されたゲームアプリケーションを 箱庭プラグイン
に接続することで、箱庭シミュレーション環境上で連携動作できるようになります。
本リポジトリの開発範囲は、Unreal Engine 箱庭プラグイン
です。
その他の箱庭モジュールについては、以下を参照ください。
ここでは、Unreal Engine箱庭プラグインを利用するために必要なインストール手順を説明します。
以下の手順でインストールしてください。
- リンク先の手順の
hakoniwa-core-cpp-client
は不要です。 - 本リポジトリーをクローンすると、直下に
hakoniwa-core-cpp-client
が配置されていますので、そちらからインストールを進めてください。
- Unreal Engine箱庭プラグインを利用した開発環境の起動
まず、下図の起動
ボタンを押して、起動してください。
成功すると、プロジェクトブラウザが起動します。
画面右下にある 開く
ボタンを押して、クローンしたリポジトリの場所を参照します(下図)。
hakoniwa_plugin
を選択して、hakoniwa_plugin.uproject
を Open
してください。
成功すると、Unreal Engineエディタが起動します。
起動直後は、レベルが選択されていませんので、メニューの ファイル
-> レベルを開く
を選択し、下図の Hakoniwa
をクリックしてください。
成功すると、試作中のレベルが表示されます。
エディタの画面右下に、コンパイルボタンがありますので、クリックしてコンパイルします。
成功すると、キキっという音と共に、コンパイル成功メッセージが出力されます。
シミュレーションを実行するには、最初に箱庭コンダクタを起動しておく必要があります。
Unreal Engine 側のシミュレーションボタンは、下図のようになっていることを確認してください。
なっていない場合は、右にあるボタンをクリックして、シミュレート
を選択すると切り替わります。
この状態で、シミュレーション開始ボタンをクリックします。
成功すると、以下のメッセージが出力されます。
LogTemp: Loaded HakoAsset
LogTemp: InitializeAsset() Enter
LogTemp: hako_asset_register() success.
LogTemp: InitializeAsset() Exit
PIE: サーバーにログインしました
次に、箱庭コマンドで、箱庭としてのシミュレーションを開始します。
hako-cmd start
成功すると、以下のメッセージが出力されます。
PIE: PIE合計開始時間 0.163 秒。
LogTemp: my_on_initialize() success.
LogTemp: Warning: my_on_manual_timing_control() enter
また、Unreal Engineエディタは下図のようになり、シミュレーションが始まります。
シミュレーションを停止するには、上手の赤いボタンをクリックし、箱庭コンダクタを停止してください。
なお、Unreal Engineの出力メッセージとしては、以下のものが出力されます。
LogTemp: Warning: EndPlay
LogTemp: Warning: FinalizeAsset() Enter
LogTemp: Warning: HakoAssetTask: Stop() start.
LogTemp: Warning: my_on_manual_timing_control() exit
LogTemp: hako_asset_start() success.
LogTemp: Warning: HakoAssetTask: Stop() exit.
LogTemp: HakoAssetModule FinalizeAsset() Exit
箱庭プラグインは、以下の3つのクラスで構成されています。
- HakoActorRoot
- HakoAssetModule
- HakoAssetTask
HakoActorRoot の役割は、Unreal Engineと箱庭を繋げるための入り口になります。
具体的には、Unreal Engineからのシミュレーションイベントを以下の関数で受け取ります。
- BeginPlay()
- シミュレーション開始イベントを補足して、箱庭のシミュレーションを開始させます。
- TickComponent()
- シミュレーション実行中の定期イベントを補足して、箱庭のシミュレーションを実行させます。
- この際、箱庭のシミュレーション時間の同期を行います。
- シミュレーション時間の同期で、箱庭時間が遅い場合は、シミュレーションの処理は行わないようにします。
- なお、Unreal Engineでは、Unityのような FixedUpdate()イベント(物理エンジンと連動したコールバック関数)が存在しないため、フレームレートでの駆動としています。
- EndPlay()
- シミュレーションの停止イベントを補足して、箱庭のシミュレーションを停止させます。
内部実装はこちら。
HakoAssetModule の役割は、箱庭アセットAPIをUnreal Engine側に提供することです。
内部実装はこちら。
HakoAssetTask の役割は、箱庭のシミュレーション時間同期をすることです。
内部実装はこちら。
全体的な処理フローは下図のとおり。
本リポジトリは、まだ試作中のものです。
今後、正式対応に向けてより利用しやすい機能セットにしていく予定です。