概要
マップは、あらかじめ作成したエンティティプロトタイプ・静的コライダージオメトリ・ナビメッシュアセット参照などのコレクションを持つQuantumアセットです。
QuantumマップはUnityシーンと同等で、決定論的シミュレーションにおけるゲームプレイコンテンツを含みます。
QuantumマップとUnityシーンは1対1で結合し、通常はエディター上でベイクされます。シーンにビューゲームオブジェクト(EntityView)が含まれる場合、実行時にQuantumシミュレーションのエンティティと関連付けられます。
マップAPI
Quantumセッション開始時、RuntimeConfig.Mapに初期マップを設定することが必須です。
実行時のシステムの更新メソッドから新しいマップを設定する例は次の通りです。
C#
public override void Update(Frame frame) {
// 確定フレーム時のみマップを変更する
if (frame.IsVerified) {
// nextMapはAssetRef<Quantum.Map>型
frame.Map = frame.FindAsset(nextMap);
}
}
初期マップのロードやマップの変更によって、ISignalOnMapChangedシグナルがすべてのシステムで呼び出されます。
C#
public void OnMapChanged(Frame frame, AssetRef<Map> previousMap) {
// frame.Mapが新しいマップになっている
}
Map Entities
Map EntitiesはQuantumエンティティプロトタイプのリストで、マップがEntityPrototypeSystemでロードされた際に作成/設定されます。
例えばマップベイク中に、Unityシーン上のすべてのエンティティプロトタイプのスクリプトは、Map Entitiesの参照に変換されます。
エンティティプロトタイプは、オプションでエンティティビュースクリプトを持つことが可能で、実行時にMapEntityLinkコンポーネントを使用したQuantumEntityViewUpdaterによってエンティティにリンクされます。
Entity Prototype System
Map Entitiesのライフサイクルは、組み込みシステムによって処理されます。マップがロード/変更されると、システムではSignalOnMapChangedが呼び出され、次のタスクを実行します。
MapEntityLinkコンポーネントを持つ(変更前のマップで作成された)すべてのエンティティを削除する- ロードされた新しいマップのエンティティプロトタイプ(
Map Entities)から新しいQuantumエンティティを作成する - この方法で作成された各エンティティについて、作成元エンティティプロトタイプのインデックスを保存する
MapEntityLinkコンポーネントを追加する
Map Entity Link
Map Entityプロトタイプから作成された各エンティティには、この組み込みコンポーネントが追加されます。コンポーネントのIndexフィールドは、作成元のマップのプロトタイプの配列インデックスを参照します。
QuantumEntityViewUpdaterはこの情報と、Map Entitiesと同じ順序のゲームオブジェクトのリストMapEntityReferencesを使用して、関連するエンティティビューを識別します。
静的コライダー
静的コライダーは決して動かない2D/3D物理コライダーで、マップのStaticColliders2D/StaticColliders3Dに保存されます。
静的コライダーは動的コライダーに比べて、性能面ではかなり有利です。詳細は静的コライダーをご覧ください。
User Asset
オプションで、任意のQuantumアセットをマップに関連付けて、次のようにロードすることができます。
C#
public override void OnInit(Frame frame) {
if (frame.TryFindAsset(frame.Map.UserAsset.Id, out FooAsset mapAsset)) { }
}
Physics Settings
詳細は物理設定をご覧ください。
NavMesh Settings
これら設定は、ナビメッシュがマップに生成される際に必要になります。グリッドサイズは、ナビゲーションシステムが近傍トライアングルを検索するパフォーマンスに影響します。サイズとパフォーマンスはトレードオフの関係にあります。QuantumのNavMesh GizmosのNavMesh AreaやNavMesh Gridを切り替えることで、セルを表示することができます。
Grid Size X - X軸のグリッドセル数
Grid Size Y - Y軸のグリッドセル数
Grid Node Size - グリッドセルのサイズ(UnityのUnit単位)で、2の倍数である必要があります
詳細はナビメッシュのワークフローをご覧ください。
NavMeshLinksは、マップで作成されたナビメッシュアセットのコレクションで、マップロード時にあわせてロードされます。
Regionsはナビメッシュの一部で、実行時にオンオフを切り替えることができます。詳細はナビメッシュのリージョンをご覧ください。
Quantum 3.1の予定
Quantumの将来バージョンでは、より多くのマップ機能をサポートする追加機能が計画されています。
- Additiveなマップローディング
- 現在、コライダーが追加/削除されると、動的マップシステムは物理システムを再初期化する必要があり、パフォーマンス上の問題があります。物理システムを再初期化する必要がないように、このプロセスを最適化する予定です。