エンジンアーキテクチャ
エンジンは、シーン独立性とサービス指向という原則を念頭に置いて設計されています。
シーン独立性
Unityの設計ではシーンの使用とプレハブの組み合わせが推奨されていますが、ビジュアルノベルを開発する場合にはあまり実用的ではありません。Naninovelのシステムは、MonoBehaviour に直接バインドされていないか、永続的な ルート GameObject にアタッチされています。
環境に応じて、次のルートオブジェクトが使用されます。
- ランタイム(ビルドおよびエディターのプレイモード)用の
Naninovel<Runtime> - エディター(プレイモード外)用の
Naninovel<Editor>
必要なすべてのゲームオブジェクトは、RuntimeInitializeOnLoadMethod メソッドを介して、アプリケーションの起動時(プレイモードに入った直後、またはビルドの実行直後)に自動的かつ非同期に実行されるエンジンの初期化時に作成されます。初期化の流れをカスタマイズするには、手動初期化ガイド を参照してください。
注意
シーンに依存しない設計がプロジェクトに合わない場合は、エンジン構成メニューの Scene Independent オプションを無効にしてください。その場合、すべてのNaninovel関連オブジェクトはアクティブなUnityシーンの一部になり、シーンがアンロードされると破棄されます。
サービス指向
エンジンの機能のほとんどは、エンジンサービスを介して実装されています。エンジンサービスは、シナリオスクリプトの実行、アクターの管理、ゲーム状態のセーブとロードなどの特定の処理を担当する IEngineService インターフェースの実装です。
エンジンシステムとやり取りする必要がある場合は、通常、エンジンサービスを使用します。静的メソッド Engine.GetService<TService>() を使用してサービスへの参照を取得できます。ここで、TService は必要なサービスのインターフェース型です。たとえば、IScriptPlayer サービスを取得するには次のようにします。
var player = Engine.GetService<IScriptPlayer>();
player.MainTrack.Stop();現在利用可能なすべてのエンジンサービスのリストと、それらをオーバーライドしたりカスタムサービスを追加したりする方法については、エンジンサービスガイド を参照してください。
ハイレベルコンセプト
次のUML図は、エンジンアーキテクチャの概要を示しています。図内のクラスとインターフェースは、すべて Naninovel 名前空間に属します。たとえば、Engine クラスを参照するには、Naninovel.Engine と記述するか、名前空間をインポート します。