This document is about: QUANTUM 3
SWITCH TO

Overview

地圖是 Quantum 資產,代表預先製作的實體原型集合、靜態碰撞體幾何體和參考的導航網格資產。

Quantum 地圖相當於 Unity 中的場景,包含用於確定性模擬的遊戲內容。

它們與 Unity 場景一一對應,通常在編輯時從中烘焙而來。這些場景可能包含視圖遊戲對象(EntityViews),這些對象可以在運行時與 Quantum 模擬實體相關聯。

地圖API

Quantum 會話開始時的初始地圖必須通過RuntimeConfig.Map設置。

例如,在系統更新方法中在運行時設置新地圖:

C#

public override void Update(Frame frame) {
    // only change the map during verified frames
    if (frame.IsVerified) {
        // nextMap is of type AssetRef<Quantum.Map>
        frame.Map = frame.FindAsset(nextMap);
    }
}

加載初始地圖和更改地圖時,會在所有系統上調用ISignalOnMapChanged信號。

C#

public void OnMapChanged(Frame frame, AssetRef<Map> previousMap) {
    // new map is frame.Map
}

地圖實體

Map Entities是一系列 Quantum 實體原型,在EntityPrototypeSystem加載地圖時創建和配置。

例如,在地图烘焙期間,Unity 場景中的所有實體原型腳本都會轉換為引用的地圖Map Entities

實體原型可以選擇性地具有實體視圖腳本,這些腳本將在運行時由QuantumEntityViewUpdater使用MapEntityLink組件鏈接到實體。

實體原型系統

這個內置系統處理Map Entities的生命週期。當地圖加載或更改時,系統會對SignalOnMapChanged做出反應,並執行以下任務:

  • 刪除所有具有MapEntityLink組件的實體,這表明它們是由先前的地圖創建的。
  • 從加載的新地圖的實體原型(地圖實體)創建新的 Quantum 實體。
  • 向以此方式創建的每個實體添加一個MapEntityLink組件,該組件保存它所源自的實體原型的數組索引。

地圖實體鏈接

這個內置組件被添加到每個從Map Entity原型創建的實體上。組件上的Index字段引用它所源自的地圖上原型的數組索引。

QuantumEntityViewUpdater使用此信息通過遊戲對象列表MapEntityReferences識別相關聯的實體視圖,該列表的順序與Map Entities相同。

靜態碰撞體

靜態碰撞體是 2D 和 3D 物理碰撞體,在地圖的生命周期內不會移動,並保存在地圖的StaticColliders2DStaticColliders3D集合中。

與動態碰撞體相比,靜態碰撞體具有顯著的性能優勢。有關更多信息,請參閱靜態物理碰撞體

用戶資產

可以選擇將任何 Quantum 資產與地圖相關聯,並按如下方式加載:

C#

public override void OnInit(Frame frame) {
  if (frame.TryFindAsset(frame.Map.UserAsset.Id, out FooAsset mapAsset)) { }
}

物理設置

有關更多信息,請參閱物理地圖設置

導航網格設置

為地圖生成導航網格時需要這些設置。網格大小會影響導航系統搜索相鄰三角形的性能。這是大小和性能之間的權衡。切換 Quantum 導航網格 gizmos 的導航網格區域和導航網格網格,使單元可見。

Grid Size X - x 維度上的網格單元數。
Grid Size Y - z 維度上的網格單元數。
Grid Node Size - 每個網格單元的 Unity 單位數,必須是 2 的倍數。

有關更多信息,請參閱導航工作流程

NavMeshLinks是為此地圖創建的最終導航網格資產集合,將在地圖加載時加載。

Regions是導航網格的一部分,其中預定義的區域可以在運行時打開或關閉。有關更多信息,請參閱導航工作流程

Quantum 3.1的計劃

對於未來的 Quantum 版本,計劃添加更多功能以支持更多地圖特性:

  • 疊加地圖加載
  • 目前,動態地圖系統如果添加或刪除了碰撞體,需要重新初始化物理系統。這對性能來說並不理想。計劃是優化這個過程,使物理系統不需要重新初始化。
Back to top