This document is about: QUANTUM 3
SWITCH TO

Release Notes

3.0.0

突破性變更

  • Quantum SDK現在是一個Unity套件。
  • 將PhotonDeterministic.dll重命名為Quantum.Deterministic.dll,將QuantumCore.dll重命名為Quantum.Engine.dll
  • 已將網路程式庫升級到Photon Realtime 5(請另外參閱Realtime更改日誌)。
  • 所有僅Unity的指令碼都被放在Quantum命名空間中,並被賦予了Quantum前綴(例如MapData -> QuantumMapData, EntityPrototype -> QuantumEntityPrototype)。
  • PhysicsCollider的2D和3D元件現在有一個名為Layer Source的欄位,用於定義層資訊的來源。這可能需要重新設定碰撞器層;
  • AssetBase類別不再起作用。
  • AssetObject現在從UnityEngine.ScriptableObject衍生而來。這意味著不再需要AssetBase包裝器,所有部分的AssetBase擴展都需要移動到AssetObject定義中。我們的網站上提供了在不遺失資料的情況下遷移資產資料的工具。
  • AssetObjects需要使用AssetObject.Create<T>T.Create創建。
  • 要新增新的資產清單(例如,使用Addressables),請用[QuantumGlobalScriptableObjectLoaderMethod]屬性標記一個方法。
  • IAssetSerializer介面已更改,它還處理RuntimePlayerRuntimeConfig序列化
  • 支援AssetObjects直接參照其他AssetObjects(不是透過AssetRef<T>),但預設的IAssetSerializer將不再完全序列化它。當使用任何非Unity運行程式或在DynamicDB中使用此類資產時,這應該是一個值得關注的問題。
  • 更一致的DynamicAssetDB行為-資產只能在經過驗證的幀期間新增和處置。此外,每當動態資產被處置時,都會調用AssetObject.Disposed。可以使用QuantumGameFlags.EnableLegacyDynamicDBMode遊戲標誌來恢復以前的行為
  • 除非使用QuantumGameFlags.EnableLegacyDynamicDBMode,否則DynamicAssetDB中的所有資產將在關閉模擬時被處置。
  • 移除了「獨立資產」/QPrefabs。它們已被完全替換為獨立的原型。應移除所有_data檔案。
  • 移除了對AssetBundles的內建支援。
  • 當發送到伺服器時,RuntimeConfigRuntimePlayer使用Json進行序列化。
  • $type屬性新增到Json-序列化的RuntimeConfigRuntimePlayer中,以便能夠在Unity之外反序列化檔案,請使用QuantumUnityJsonSerializer.SerializeConfig(Stream stream, IRuntimeConfig config)匯出RuntimePlayer和RuntimeConfig,或將"$type":"Quantum.RuntimeConfig, Quantum.Simulation""$type":"Quantum.RuntimePlayer, Quantum.Simulation"新增到相應的Json中。
  • 在自訂組件中實作的MapDataBakeCallbacks,必須透過將此[assembly: QuantumMapBakeAssembly]新增到指令碼中來讓人知道。
  • 更改了GameStarted回調的時間。現在,每個啟動的Quantum遊戲階段只調用它一次,且在等待快照時,將在快照到達後調用它,且isResync=真。
  • 事件中使用的集合現在由其相應的指標類型傳遞(例如list<T> -> QListPtr<T>)。曾是:Ptr
  • Frame.Heap不再是Heap*,而是對託管FrameHeap執行個體的參照,該執行個體共享相同的API並新增了分配追蹤功能。直接使用frame.Heap->可以替換為frame.Heap.
  • DSL中flags的預設支援類型現在是Int32(以前是Int64)
  • GameStarted回調中新增了isResync參數(當在遊戲重新同步後叫用回調時,例如在延遲加入後叫用回調時)。
  • 更改了QuantumNavMesh.ImportSettings.LinkErrorCorrection類型從boolfloat(表示一個距離)。
  • NavMeshRegionMask.HasValidRegions()現在為「MainArea」傳回true,使用HasValidNoneMainRegion只査詢非MainArea區域
  • AppSettings.RealtimeAppId已被AppSettings.QuantumAppId取代,Unity檢查器將在檢查PhotonServerSettings資產時自動交換它們。
  • 更改了重播檔案格式並將其重命名為QuantumReplayFile,標記舊名稱已過時。資產DB、RuntimeConfig和InputHistory現在都儲存在一個對Json友好的包裝器中,該包裝器可以繞過Unity Json工具儲存位元組序列的冗長方式,從而在Unity中儲存時大大減少重播檔案的大小,
  • Quantum3伺服器將自動封鎖所有非協定訊息和所有Photon Realtime玩家屬性。使用Photon儀表板解鎖它們,並將BlockNonProtocolMessagesBlockPlayerProperties設定為false
  • 已移除DeterministicGameMode.Spectating(使用Multiplay),因為預設下,所有線上Quantum模擬都是在觀眾模式下啟動的,直到新增了玩家。
  • 還可以查看其他參考檔案
    • 遷移指南:https://doc.photonengine.com/quantum/v3/getting-started/migration-guide
    • 新增內容:https://doc.photonengine.com/quantum/v3/getting-started/whats-new
    • Photon Realtime 5更改日誌(Assets\Photon\PhotonLibs\changes-library.txt, Assets\Photon\PhotonRealtime\Code\changes-realtime.txt)

新增內容

  • 新增了輸入差量壓縮。
  • 將Unity最低版本增加到2021 LTS。
  • 新的啟動線上協定,支援在運行時新增及移除玩家。
  • 為Photon Public Cloud新增了Quantum Webhooks。
  • 將最大玩家數增加到128。
  • 新增了對最多512個元件的支援(使用#pragma max_components 512來啟用)
  • 新增了已預測命令。
  • 新增了對膠囊形狀的支援。
  • 為實體新增了快照內插補點模式。
  • 新增了QuantumHud視窗,顯示進入資訊並安裝Quantum用戶指令碼、資產和演示。
  • 新增了一個新的圖形演示選單,可以與QuantumHub一起安裝,並包括對Unity 6的MPPM支援。
  • 新增了可以與QuantumHub一起安裝的Asteroid遊戲範例。
  • 新增了一個新的GUI來切換Quantum gizmos。
  • 新增了連線處理的非同步支援。
  • 新增了對既不是資源也不是可定址資產的支援。對這些資產的直接參照存儲在QuantumUnityDB中。
  • QuantumUnityDB.Get[Global]AssetGuids - 基於資產類型迭代GUID的能力。
  • 新增了對netstandard2.1的支援。
  • 新增了對Odin檢查器的全面支援。
  • 加強了Quantum Unity檢查器並新增了程式碼檔案資料夾。
  • 新增了Newtonsoft驅動的Json反序列化器,現在可以讀取[SerializeReferences](對非Unity平台使用Quantum.Json.dll依賴項)。
  • 新增了一種資料驅動的新增系統的管道(請參閱SystemsConfig.asset)。
  • 新增了AllowedLobbyProperties儀表板變數,以限制Photon對戰配對的大廳屬性使用。
  • 新增了Quantum.Log.dll依賴項,它引入了Quantum.LogType且遷移時可能與UnityEngine.LogType衝突。
  • 新增了Quantum調試dll切換,在Unity中在調試和發佈Quantum dll之間切換
  • 為Transform2D、Transform3D和QuantumEntityView新增了位置和旋轉傳送支援。
  • 將最大導航網格區域數增加到128。
  • 新增了Frame.PlayerConnectedCount
  • 新增了FrameThreadSafe.GetGlobal()擴展方法。
  • 新增了EntityViewComponent,這是一種向Quantum實體視圖新增視圖邏輯的快速方法。
  • 新增了實體視圖輪詢(將QuantumEntityViewPool新增到EntityViewUpdater遊戲物件中)
  • 新增了dotnet Quantum dll組建(請參閱QuantumDotnetBuildSettings資產)。
  • 新增了一個生成到非Unity模擬專案的dotnet控制台重播運行器應用程式專案。
  • 新增了一個工具,可以快速將Unity碰撞器轉換為Quantum碰撞器GameObject/Quantum/Convert Colliders
  • 新增了Quantum Unity指令碼範本。
  • 新增了DynamicMap核心類型,這是地圖作為動態資產的專門化,能在修改靜態碰撞器時觸發內部更新,並序列化運行階段網格資料。

更改

  • 將CodeGen工具統一到UnityEditor中使用的工具中。
  • 將QuantumRunner和SessionContainer統一到SessionRunner類別中,並將其移動到QuantumGame專案中。
  • 元件原型後綴已從_Prototype更改為Prototype
  • 元件原型包裝器前綴從EntityComponent更改為QPrototype(例如EntityComponentTransform2D -> QPrototypeTransform2D)。
  • Frame.Assets現在已經過時了。改為使用Frame.FindAsset<T>
  • AssetObjectConfigAttribute已過時,不再可用。
  • AssetObject不再局限於與Quantum模擬程式碼位於同一組件中。如果模擬程式碼需要存取這些資產,它可以使用基礎類別或介面。這允許AssetObjects以任何Unity特定的資料進行擴展。
  • AssetRefT生成的類型現在已經過時,請改用AssetRef<T>
  • asset T;以及import asset T;在.qtn檔案中不再需要。從AssetObject衍生的任何類型現在都已經是功能齊全的Quantum資產,可以與AssetRef<T>欄位一起使用。
  • AssetObject.Guid現在預設是確定性的,基於Unity的GUID和fileId。需要時可以覆寫(例如,對於從Quantum 2.1匯入的資產)-該等覆寫存儲在QuantumEditorSettings中。將AssetGuids確定性化可以將QuantumUnityDB加速一個量級。
  • UnityDB已被淘汰,AssetResourceContainer已被移除。QuantumUnityDB取代了兩者,並使用了更一致的方法命名。
  • 新預製件的原型資產被創建為獨立資產,後綴為EntityPrototype,副檔名為qprototype。這完全將模擬過程中的載入原型與其源預製件解耦,縮短了資產載入時間,避免了Unity作業系統的鎖死問題。
  • 位於資產搜尋路徑中的所有Quantum資產現在都標記為QuantumAsset標籤。
  • 將導航網格內嵌移動到Quantum Simulation專案,以確定性地內嵌部件(而不是Unity導航網格匯出)。
  • 移除了NavmeshAgentConfig的MovementType.DynamicBodyMovementType.CharacterController2D。改為選擇MovementType.Callback並在ISignalOnNavMeshMoveAgent回調期間執行移動。已移除的選項只適用於原型設計,並引發了很多問題。
  • 更改了QuantumNavMesh.BakeData和相關資料結構,僅使用固定點向量。
  • BakeNavMesh()中的非確定性程式碼(三角法計算)替換為固定點數學。
  • 將導航網格連結檢測和錯誤校正從BakeNavMesh()移動到ImportFromUnity()StartTriangleEndTriangle,現在設定在BakeData.Links上。
  • 導航網格的主區域現在有自己的有效導航網格區域(始終索引為0),可以打開/關閉,可以正確用於導航網格査詢,如LineOfSight()FindClosestTriangle()
  • BakeNavMesh簽名更改為僅使用相關資料類型。
  • 將訊號OnPlayerDataSet(PlayerRef player)替換為OnPlayerAdded(PlayerRef player, bool firstTime),其中firstTime表示這是首次指派此玩家..
  • 新增了OnPlayerRemoved(PlayerRef player)訊號。
  • GameStarted回調中新增了一個參數(isResync:真,當在遊戲重新同步後叫用回調時,例如在延遲加入後)。
  • 從程式碼解決方案中移除了ReleaseProfiler設置,並將其替換為StartParameters.GameFlags中的標誌,稱為QuantumGameFlags.EnableTaskProfiler
  • 移除了Quantum 2.1中不推薦使用的API。
  • 所有Quantum Unity單行為現在都衍生自QuantumMonoBehaviour
  • 所有Quantum Unity ScriptableObjects現在都衍生自QuantumScriptableObject
  • 狀態檢查器現在在選擇Runner時顯示所有相關設置。
  • 重構了Quantum Unity選單。
  • Navigation.Raycast2D()提供有關生成最近命中的邊界索引的資訊。
  • 減少了導航網格二進位資產大小,控制NavMesh.SerializeType下的序列化選項。預設下,中繼資料現在會在運行時重新計算,設定為NavMeshSerializeType.FullWithMetaData以停用它。
  • 現在必須透過定義QUANTUM_DRAW_SHAPES來選擇為開發組建繪製調試形狀(QuantumEditorSettings有一個快捷方式來切換它)。
  • Quantum運行階段日誌記錄現在可以透過EditorSettings中的LogLevel進行切換,預設值為WARN
  • 脈絡LayerInfo現在在FrameThreadSafe.Layers屬性中公開,類似於Frame.Layers
  • Quantum.TypeUtils現已過時

穩定版

組建1548(2024年8月20日)

  • 初始穩定版本

RC

組建1547(2024年8月15日)

新增內容

  • QuantumDebugRunner啟動序列中新增了一個unity事件回調
  • DynamicMap可以擴展現有的網格碰撞器
  • 在Quantum Hub主畫面上新增了LogLevel切換按鈕

改進

  • 2D和3D物理引擎不再整合將變換位置移出FP可用範圍的線性速度
  • 改為在調試中記錄一個警告,並重設速度

更改

  • 地圖TriangleMeshCellSize現在稱為SceneMeshCellSize,是一個FP值,而不是Int32

移除

  • 過時的QuantumEditorSettings.QuantumSolutionPath屬性,我們尚未決定是否以及如何引入像Quantum 2中那樣的分開解決方案工具

故障修復

  • 修復:移除網格碰撞器時更新已使用計數
  • 修復:將自由三角形標記為可序列化
  • 修復:對導航網格連結應用旋轉
  • 修復:2D中邊緣形狀碰撞的接觸點。它沒有被轉換為世界空間
  • 修復:重構MeshTriangleVerticesCcw以允許模擬內嵌
  • 修復:靜態框碰撞器旋轉偏移計算不正確
  • 修復:Unity 2022.1的指令碼編譯錯誤
  • 修復:在校驗和錯誤期間組織幀差異工作的問題
  • 修復:膠囊2D與邊緣平行時的碰撞

組建1543(2024年8月5日)

故障修復

  • 修復:Exception: MemoryIntegrity Check Failed: globals.PlayerConnectedCount overlaps previous field globals.PhysicsSettings on type Quantum.globals錯誤
  • 修復:完成il2cpp組建時,The type or namespace name 'IntPtr' could not be found錯誤

組建1542(2024年8月2日)

新增內容

  • 物理ShapeCastMinIterations設定為模擬設置
  • 將QoL方法新增到FrameTimer
  • 將XY切換新增到Hub
  • AddMeshCollider()包含pos和rot
  • 2D和3D的JointPrototype.Materialize額外負荷將接收錨點參照而不是PrototypeMaterializationContext
  • 支援DSL中的物理QueryOptions和CallbackFlags以及生成的原型

改進

  • 在投射原點時非常靠近碰撞器時的物理形狀投射準確度
  • FrameTimer輔助方法和屬性,以及對API檔案的改進

更改

  • CodeGen - 如果巢狀在input定義中的結構具有button欄位,則會引發錯誤。button欄位僅用於直接使用
  • 已將組件新增到QuantumDotnetProjectSettings.IncludePaths或標記為QuantumDotnetInclude者已新增為對已匯出專案的參照
  • [RangeEx]屬性支援FP屬性
  • 當移除元件T或銷毀Has<T>的實體時,在叫用元件移除訊號後而不是之前減少ComponentCount<T>
  • 將指令碼範本的編碼約定更改為更常見的C#風格
  • 更名PrototypeMaterializationContext.ComponentTypeIndexComponentTypeId
  • 地形碰撞器現在可以檢測取消生成三角形,記錄警告,並且不會將其內嵌到序列化網格中

故障修復

  • 修復:帶有DetectOverlapsAtCastOrigin選項的3D形狀投射査詢在3D網格命中時無法正常工作的問題
  • 修復:AsteroidsWaveSpawnerSystem
  • 修復:當QUANTUM_XY時,從Draw2DCapsuleShape中移除了半高
  • 修復:LineIntersectsAABB函數將AABB的Y尺寸設定為與X相同的值
  • 修復:使用Debug.Draw函數時膠囊和圓圈的大小。
  • 修復:元件篩選程式的問題導致忽略「任何」篩選規則,並使用「沒有」規則代替
  • 修復:在input中使用entity_ref導致「啟用了固定大小的輸入(大小:X),但我們得到的輸入大小為Y」錯誤
  • 修復:獨立專案中SimulationConfig中的警告
  • 修復:在input中使用聯合導致「啟用了固定大小的輸入(大小:X),但我們得到的輸入大小是Y」錯誤
  • 修復:物件與多個三角形碰撞時的穿透校正
  • 修復:QuantumGameFlags.EnableTaskProfiler標誌具有相反的效果:不在SessionRunner.Arguments.GameFlags中傳遞它,則啟用了分析器,在其中傳遞它-則停用
  • 修復:GetEventTypeCodeGen中的參數命名不一致
  • 修復:如果啟用了任務分析器,則GC會在進入每個任務分析器部分時進行分配
  • 修復:如果基礎預製件新增/移除元件原型,則變體預製件的原型資產不會更新
  • 修復:Quantum Task Profiler資料儲存為.dat、json格式,如果不手動重命名,則無法載入
  • 修復:Quantum DB Window不尊重「同步選擇」選項,而是始終同步選擇
  • 修復:使Asteriods範例在QUANTUM_XY模式下工作
  • 修復:為所有Asteroids系統新增了Preserve屬性
  • 修復:QuantumEditorSettings現在具有Quantum XY的切換功能
  • 修復:膠囊2D和多邊形之間的碰撞會生成最近邊的對側的法向量
  • 修復:當SceneViewComponents作為EntityViewUpdater的下層定位,並且Updater field was set時,導致其被初始化兩次的問題
  • 修復:將Preserve屬性新增到系統範本中

組建1523(2024年7月10日)

突破性變更

  • FP乘法現在被四捨五入而不是截斷,即向負無窮大四捨五入

新增內容

  • FP.FromRoundedFloat_UNSAFE
  • 擴展方法ToRoundedFPToRoundedFPVector2ToRoundedFPVector3
  • ReserveCapacity的2D和3D複合形狀方法
  • HostProfiler.CreateMarker - 透過提前創建標記,實現了較低的額外負荷分析

更改

  • 升級Photon Realtime到版本5.0.10
  • HostProfiler.Init - 傳遞IHostProfiler的實作,而不是一組委託

移除

  • HostProfiler.Start/EndThread
  • 2D及3D CollisionResultInfo.InvertResult現在是內部的。.Normal欄位已經考慮了反轉標誌

故障修復

  • 修復:QuantumEntityView的一個問題,該問題在某些情況下導致錯誤更正最初出現故障
  • 修復:StateInspector - 新增元件導致編輯器崩潰
  • 修復:DynamicMap.FromStaticMap()不維護AllRuntimeTriangles鍵
  • 修復:InstantReplayConfig.LengthSeconds中的拼寫錯誤
  • 修復:編輯器上無法設置2D和3D彈簧接頭阻尼比
  • 修復:遷移:初始CodeGen未正確發出AssetObject虛設常式
  • 修復:遷移:預製件變體偶爾不受guid傳輸/恢復資產資料的影響

組建1519(2024年7月2日)

突破性變更

  • FP常數值已更新,以更接近其目標值PiInv, PiTimes2, PiOver2, PiOver2Inv, PiOver4, Pi3Over4 , Pi4Over3, Deg2Rad, _0_02, _0_03, _0_04, _0_05, _0_10, Rad_360, Rad_90, Rad_45, Rad_22_50, _1_02, _1_05, _1_10, EN1, EN3, EN4, EN5, Epsilon, Log2_10

Changes

  • 已將Photon Realtime升級到版本5.0.9(2024年6月26日)
  • DebugMesh現已過時,請改為使用QuantumMeshCollider.Global
  • Unlit/Quantum Debug Draw重命名為Unlit/Quantum Debug
  • 將著色器檔案QuantumDebugDraw.shader移動到Assets/Photon/Quantum/Runtime/RuntimeAssets
  • 當檢測到安裝完成時,不再停用Quantum Hub安裝按鈕
  • 迭代DynamicAssetDB的效能要高得多,但仍然會分配
  • IResourceManager擴展現在使用泛型來避免虛擬調用
  • Quantum.Json和獨立專案現在支援ISerializationCallbackReceiver介面
  • 新增了Odin.SerializationOdin.Attributes組件介面到Quantum.Simulation。由於所有組件參照都是可選的(除非有編譯錯誤),因此專案不需要安裝Odin
  • Photon.Deterministic.PersistentMap已重構。它不再是IEquatable,實作了訪問者模式,列舉的效能要高得多,儘管它仍然分配了一點
  • Assets in DynamicAssetDB中的資產現在被參照計數。計數器由透過複製構造函數或DynamicAssetDB.CopyFrom相互連結的DB執行個體共享。由於DynamicAssetDB.ReplaceAssetDynamicAssetDB.DisposeAssetDynamicAssetDB.Dispose(整個DB處置)或DynamicAssetDB.CopyFrom(由於釋放舊狀態),當資產的參照計數降至零時,資產將被處置。請注意,如果使用傳統模式,則這些都不適用

移除

  • 可以刪除資料夾Assets/Photon/Quantum/Resources/Gizmos以及資產Assets/Photon/Quantum/Resources/QuantumShapes2D.fbx
  • 來自Native的未使用程式碼
  • QuantumGameFlags.EnableLegacyDynamicDBMode - 改為傳遞到用傳統模式構建的動態DB

故障修復

  • 修復:膠囊與多邊形2D碰撞檢查中的接觸點位置
  • 修復:啟用DetectOverlapsAtCastOrigin標誌時形狀投射的法線方向
  • 修復:DynamicMap FromStaticMap未綁定實體視圖
  • 修復:SetTriangleUnchecked更新碰撞器索引
  • 修復:當膠囊旋轉凍結時,在框的角落的膠囊2D穿透
  • 修復:網格移除包括AllRuntimeTriangles
  • 修復:導致Quantum圖形著色器不適用於VR的問題
  • 修復:在Quantum線上遊戲階段結束時關閉連線的問題,儘管選擇了ShutdownConnectionOptions.None
  • 修復:在不設定明確的Name的情況下,使選單設置場景資訊條目正常工作
  • 修復:切換到DynamicMap如何影響源地圖的場景實體和視圖的問題。現在,它們保持不變,只有在切換到常規地圖時才會被移除
  • 修復:BitStream缺少ushort擴展方法
  • 修復:InstantReplayDemo中的一個問題,該問題防止重播成功重啟/迴圈等
  • 修復:啟用指令碼定義QUANTUM_REMOTE_PROFILER時出現編譯錯誤
  • 修復:啟動Quantum時NavMesh Gizmos拋出空值

組建1514(2024年6月18日)

  • 初始版本
Back to top