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
介面已更改,它還處理RuntimePlayer
和RuntimeConfig
序列化- 支援
AssetObjects
直接參照其他AssetObjects
(不是透過AssetRef<T>
),但預設的IAssetSerializer
將不再完全序列化它。當使用任何非Unity運行程式或在DynamicDB
中使用此類資產時,這應該是一個值得關注的問題。 - 更一致的
DynamicAssetDB
行為-資產只能在經過驗證的幀期間新增和處置。此外,每當動態資產被處置時,都會調用AssetObject.Disposed
。可以使用QuantumGameFlags.EnableLegacyDynamicDBMode
遊戲標誌來恢復以前的行為 - 除非使用
QuantumGameFlags.EnableLegacyDynamicDBMode
,否則DynamicAssetDB
中的所有資產將在關閉模擬時被處置。 - 移除了「獨立資產」/
QPrefabs
。它們已被完全替換為獨立的原型。應移除所有_data
檔案。 - 移除了對AssetBundles的內建支援。
- 當發送到伺服器時,
RuntimeConfig
和RuntimePlayer
使用Json進行序列化。 - 將
$type
屬性新增到Json-序列化的RuntimeConfig
和RuntimePlayer
中,以便能夠在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
類型從bool
到float
(表示一個距離)。 NavMeshRegionMask.HasValidRegions()
現在為「MainArea」傳回true
,使用HasValidNoneMainRegion
只査詢非MainArea區域- AppSettings.RealtimeAppId已被AppSettings.QuantumAppId取代,Unity檢查器將在檢查PhotonServerSettings資產時自動交換它們。
- 更改了重播檔案格式並將其重命名為
QuantumReplayFile
,標記舊名稱已過時。資產DB、RuntimeConfig和InputHistory現在都儲存在一個對Json友好的包裝器中,該包裝器可以繞過Unity Json工具儲存位元組序列的冗長方式,從而在Unity中儲存時大大減少重播檔案的大小, - Quantum3伺服器將自動封鎖所有非協定訊息和所有Photon Realtime玩家屬性。使用Photon儀表板解鎖它們,並將
BlockNonProtocolMessages
和BlockPlayerProperties
設定為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.DynamicBody
及MovementType.CharacterController2D
。改為選擇MovementType.Callback
並在ISignalOnNavMeshMoveAgent
回調期間執行移動。已移除的選項只適用於原型設計,並引發了很多問題。 - 更改了
QuantumNavMesh.BakeData
和相關資料結構,僅使用固定點向量。 - 將
BakeNavMesh()
中的非確定性程式碼(三角法計算)替換為固定點數學。 - 將導航網格連結檢測和錯誤校正從
BakeNavMesh()
移動到ImportFromUnity()
、StartTriangle
和EndTriangle
,現在設定在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.ComponentTypeIndex
為ComponentTypeId
- 地形碰撞器現在可以檢測取消生成三角形,記錄警告,並且不會將其內嵌到序列化網格中
故障修復
- 修復:帶有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
- 擴展方法
ToRoundedFP
、ToRoundedFPVector2
及ToRoundedFPVector3
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.Serialization
及Odin.Attributes
組件介面到Quantum.Simulation。由於所有組件參照都是可選的(除非有編譯錯誤),因此專案不需要安裝Odin Photon.Deterministic.PersistentMap
已重構。它不再是IEquatable
,實作了訪問者模式,列舉的效能要高得多,儘管它仍然分配了一點- Assets in
DynamicAssetDB
中的資產現在被參照計數。計數器由透過複製構造函數或DynamicAssetDB.CopyFrom
相互連結的DB執行個體共享。由於DynamicAssetDB.ReplaceAsset
、DynamicAssetDB.DisposeAsset
、DynamicAssetDB.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日)
- 初始版本