# 2.0.0 For a more in-depth overview over what changed check: [Coming from Fusion 1.0](https://doc.photonengine.com/fusion/v2/getting-started/migration/coming-from-fusion-v1) **Breaking Changes** - Renamed addressable define from FUSION_USE_ADDRESSABLES -> FUSION_ENABLE_ADDRESSABLES - `NetworkRunner.Spawn` method family now uses `NetworkSpawnFlags` parameter instead of bool flags - PlayerRef / SceneRef no longer directly cast to/from int - `INetworkkObjectPool` is now `INetworkObjectProvdier` and changed parameters of acquire and release functions - `NetworkRunner.AddSimulationBehaviour` is now internal - Removed ability for `SimulationBehaviours` to exist on networked objects, only `NetworkBehaviours` are used on `NetworkObjects` now. - `(int)PlayerRef` -> `PlayerRef.PlayerId` and `PlayerRef.IsValid` -> `PlayerRef.IsRealPlayer` - `(int)SceneRef` -> `SceneRef.FromIndex` - `NetworkObject.Guid` -> `NetworkObject.NetworkTypeId` - `Runner.Simulation.X` APIs now under `Runner.X` - `INetworkSceneManager` interface API changed. `Runner.SetActiveScene` -> `Runner.LoadScene` **What's New** - `ChangeDector` that allows to detect changes for `NetworkProperties` in `Render`, `FUN` or at custom intervals. - `PropertyReaders` and `TryGetSnapshotBuffers`, to allow for custom interpolation and previous networked property state. - `NetworkBehaviourBufferInterpolator` for simplified interpolation for built-in types and custom registered types. - LagCompensation support for 2D physics. - Server/Client Simulation/Send/ rates can now be adjusted individually in host/server mode. Fixed to 20 for shared mode. - StartGameArgs.UseDefaultPhotonCloudPorts - NetworkSceneManager now supports loading addressable scenes. - NetworkSceneManager now supports additive loading of scenes. - Added Last Received Tick on the network object runtime debug info - `NetworkSceneManagerDefault.GetMultiplePeerTargetScene` - ability to override the logic of choosing a root scene object in MP mode - `NetworkProjectConfig.EnqueueIncompleteSynchronousSpawns` - if enabled, synchronous incomplete spawns (Addressables etc.) get enqueued instead of throwing an exception - `NetworkObjectAcquireResult.Ignore` - if object provider returns this, Fusion will no longer try to acquire an instance for a state object - `SceneRef.FromPath` - creates a scene ref based on a hash of a path. Useful for easily creating `SceneRefs` of Addressable scenes - `NetworkPrefabId` constructor removed, use `FromIndex` or `FromRaw` instead - AOI `INetworkRunnerCallbacks` for when objects enter and exit AOI. `OnObjectEnterAOI`, `OnObjectExitAOI` **Changes** - Shared mode ticks are now aligned between clients. - `NetworkPhysics` are now provided via a separate addon that comes as part of the Fusion package. - Hitbox buffer size in NetworkProjectConfig is now in milliseconds instead of ticks. - `NetworkSceneManagerDefault` works with Addressables 1.19.x, but will throw at an attempt of loading an addressable scene with local physics mode - SimilationBehaviours are now found on children of Runner. Disabled behaviours are ignored - INetworkRunnerCallbacks can be found on children of Runner - BehaviourMeta in `NetworkProjectConfig` gets refreshed whenever relevant script's execution order change - RPCs in Shared mode are no longer treated as if they were always declared with `TickAligned=false` - `Render` is now invoked right after `MonoBehaviour.Update` (previously: before `MonoBehaviour.LateUpdate`) - `RpcAttribute.InvokeResim` is now deprecated and no longer used - Updated Photon Realtime SDK to v4.1.6.23 - `NetworkSceneManagerDefault`: if no scenes are loaded in MP mode, an inactive limbo root will be created to host any new objects. Once a "real" scene has been loaded, objects are going to be evicted from the limbo - JoinSessionLobby to include `useDefaultCloudPorts` argument - `InitializeNetworkObjectAssignRunner` needlessly made NBs owned twice - Completely removed predictive spawns - `SimulationBehaviours` are no longer Unity-null and `isActiveAndEnabled` checked when invoking callbacks. Flags set in OnEnable/OnDisable/OnDestroy are used instead. User code does not need any patching, any flag setting is handled by the weaver - `NetworkConditions` fields are hidden unless it is enabled - Look of inline help and script header is now driven by `FusionEditorSkin.guiskin` - Renamed `CastEnumAttribute` to `DisplayAsEnumAttribute`; it also handles long/ulong fields now - `DrawIf/WarnIfAttributes` can point to methods/properties, as long as they're top-level - `INetworkSceneManager.OnSceneInfoChanged` is now always invoked right before `IBeforeTick` - `NetworkSceneManagerDefault` reports itself busy until first `OnSceneInfoChanged` arrives - `NetworkSceneManagerDefault` will move a spawned object to DontDestroyOnLoad in Multiple Peer mode if there are no scenes loaded for a runner. A warning explaining what happened will be emit as well - `NetworkObjectProviderDefault` no longer fails for synchronous acquires that fail to return an instance immediately - Simplified `NetworkSceneMangerDefault` - always uses dynamic addressable scenes list (finds scenes under a given label) **Removed** - Removed `InterpolationTarget` from `NetworkTransform`. The object with the `NetworkTransform` is now interpolated directly. - Removed `[Accuracy]` and `[AccuracyRange]` range attributes. Accuracy is no longer supported - Remove `PlayerRefSet` from `RpcInvokeInfo`. Since PlayerRef is no longer a linear index, fixed-size collection is not possible. - Removed `[OrderBefore]` and `[OrderAfter]`. Use Unity execution order instead. - Removed predicted Spawning and spawn keys. Predicted spawning is no longer supported. - Removed Delta Snapshots state transfer mode. **Bug Fixes** - Fixed: Angle AngleLerp method now returns correct value if a and b are equal - Fixed: Drag and drop into collections being broken on custom Photon behaviours - Fixed: SharedMode: some destroys initiated by the master client not being propagated - Fixed: `NetworkBehaviour.Id` returning `default` in `Despawned` - Fixed: `NullReferenceExceptions` when accessing `NO` properties without it being fully initialized - Fixed: `AssertException` when initializing `NO` with multiple nested sub hierarchies - Fixed: `NetworkRunner.GetRunnerForScene` not working for single-peer with multiple scenes - Fixed: Runner Visibility was not accounting for non-NB child components (like audio listener) - Fixed: Weaving of `NetworkBehaviour` and subtypes - Fixed: Issue with SetSimulationState allowing you to set none state auth object as simulated in shared mode - Fixed: "return pattern of RpcInvokeInfo not recognised" error when using RpcInvokeInfo - Fixed: `Render` invoked for disabled `NetworkBehaviours` - Fixed: "Apply" button doing nothing when entering Play mode with `NetworkProjectConfig` having unsaved changes - Fixed: _masterClient and RuntimeConfig.MasterClient were not assigned until there was a client switch - Fixed: Inspector errors in `FusionStats`. - Fixed: Scale handling of NetworkTransform - Fixed: Issue with remote objects always spawning at 0,0,0 with NetworkTransform - Fixed: Assert error on shutdown because object/behaviours weren't in simulation list - Fixed: `INetworkSceneManager.OnSceneInfoChanged` being called inconsistently in shared mode - Fixed: Set PlayerTTL to 0 to avoid delay in reconnect - Fixed: `Simulation.IsStateSource` recognizes host player - Fixed: `NetworkObject.GetRpcSourceAuthorityMask` - Fixed: `NetworkObjectTypeId.Equals` - Fixed: `StackOverflowException` when accessing `NetworkObject.Id` - Fixed: Invalid user-types assembly name - Fixed: Assertion when shutting down a runner that has despawned a nested object right before the shutdown - Fixed: ILWeaver: `FieldAccessException` in RPCs - Fixed: `SceneRef.ToString` throwing for path hashes - Fixed: Scene info not being read properly by `Simulation.GetSceneInfo` - Fixed: `INetworkSceneManager.OnSceneChanged` being called repeatedly for clients - Fixed: Prefab order being locale-dependent - Fixed: All folders ending with `Resources` incorrectly recognized as `Resources` folders, making some of the contained prefabs unspawnable - Fixed: "unresolved external symbol" runtime errors if an abstract class deriving from `NetworkBehaviour` has no `[Networked]` properties ## RC ### Build 801 (Dec 12, 2023) **Changes** - `NetworkRigidbody` XML Docs - `NetworkProjectConfigImporter` refreshes now whenever a new `NetworkObject` prefab is created, a prefab is moved or deleted - NetworkRigidbody EnsurerHasRunnerSimulatePhysics() changed from private to protected - _deferredTeleport field in NetworkRigidbody changed from private to protected **Removed** - Obsolete API **Bug Fixes** - Fixed: NetworkCharacterController Spawn at 0,0,0 - Fixed: Issue with full consistency not acting properly when ReplicateTo was being used - Fixed: NetworkObjects not being replicated on clients correctly when scheduling only enabled - Fixed: Revert & Apply buttons always disabled in `NetworkProjectConfig` inspector - Fixed: Odin: inspector errors for `[Networked]` properties when using `[FoldoutGroups]` Dev: Imported PhotonUnityEditorCommon@f81d7ff1bfa4ef962bd64e664a3c50a44e922404 - Fixed: FusionStats NetworkObject stats would always fail to find stat data, now will correctly retry until found - Fixed: NetworkRigidbody fixed so State Authority changes in Shared Mode retain Rigidbody velocity on the new State Authority - Fixed: Timming issue with master client objects state authority changed detection - Fixed: NetworkRigidbody now un-dirties the interpolation target when SetInterpolationTarget(null) is called. This prevents null errors due to setting the target to null at runtime - Fixed: Test Suit Platforms - Fixed: `NullReferenceException` thrown by `NetworkProjectConfigImporterEditor` if initial prefab table import fails - Fixed: NetworkRigidbody3D ResetRigidbody() now checks for isKinematic before reseting velocity - Fixed: Change detector having incorrect ticks set - Fixed: "InvalidOperationException" during connection establishing on server - Fixed: Allocations in Timelines.Update - Fixed: Allocations in Client.GetInput - Fixed: Invalid properties when NetworkRunner is Uninitialized - Fixed: NRB handling of unparented Kinematic RBs now always applies pos/rot to Transform rather than Rigidbody - Fixed: Fusion.Addon.Physics assembly correctly renamed in NetworkProjectConfig.AssembliesToWeave defaults - Fixed: Editor freezing on prefab rename workaround applied to Unity 2022.3 as well ### Build 797 (Nov 07, 2023) **What's New** - UsePreciseRotation option to NRB - Expose EncryptionMode via FusionAppSettings **Changes** - Calls to Load/Unload scene are correctly deferred until the initial info is processed - Improved error messages for `SerializedPropertyUtilities.FindPropertyOrThrow` **Removed** - IPredictedDespawnBehaviour **Bug Fixes** - Fixed: NRB was not pushing position and rotation values to the transform when SyncParent was disabled - Fixed: "Shutdown" button on NetworkRunner inspector now implemented - Fixed: NetworkTransform throwing null ref on disabled child object - Fixed: `NetworkProjectConfig` handles initial import external errors better, without spamming with errors ## Nightly ### Build 795 (Nov 04, 2023) **What's New** - Bool session property - Ability to use cached best region summary to speed up runner startup **Changes** - NRB's UsePreciseRotation field made public - Made NRB Teleport handling methods virtual - Added UsePreciseRotation option to NRB - Photon Realtime SDK to 4.1.7.2 **Removed** - StartGameArgs.DisableClientSessionCreation **Bug Fixes** - Fixed: NRB was not pushing position and rotation values to the transform when SyncParent was disabled. Could produce some janky un-parenting results for any nested NOs that were using that NRB Object as their parent - Fixed: NRB CopyToEngine handling of isParented. Was always treating object as parented when SyncParent was enabled - Fixed: Added a workaround for Unity 2023.1 crashing when prefab contents are loaded for moved prefabs in asset postprocessor - Fixed: Odin - HideArrayElementLabelAttribute handling ### Build 785 (Oct 18, 2023) **Bug Fixes** - Fixed: Network transform parent sync being lost because of interpolation ### Build 782 (Oct 12, 2023) **Changes** - Expose EmptyRoomTtl via AppSettings - Replaced usages of transform.SetLocalPositionAndRotation in NRB, as Unity repeatedly added/removed that method from API ### Build 780 (Oct 07, 2023) **What's New** - Restored `NetworkProjectConfigUtilities.SaveGlobalConfig` **Changes** - Made NetworkRigidbody CopyToBuffer() and CopyToEngine() methods virtual ### Build 779 (Oct 06, 2023) **What's New** - FUSION2 to Scripting Define Symbols - Expose EncryptionMode via FusionAppSettings - FusionAppSettings to expose some Realtime Settings **Changes** - Added NetDisconnectReason to OnDisconnectedFromServer callback **Bug Fixes** - Fixed: Added Null Check to IBeforeAllTicks on NetworkRigidbody. Was possible for InterpolationTarget to become null since last Render() and throw a null error - Fixed: Missing CancellationToken on JoinSessionLobby ### Build 777 (Oct 04, 2023) **What's New** - Error message when reutilizing a NetworkRunner **Bug Fixes** - Fixed: `NPT.Unload` not unloading anything ### Build 776 (Oct 03, 2023) **Changes** - Weaver: floats and vectors can now be ref-returned ### Build 775 (Sep 30, 2023) **Changes** - SimulationBehaviourUpdater no longer uses NPC.Global, using a passed instance instead **Bug Fixes** - Fixed: Removed NRB Physics.autoSimulation usage for Unity 2022.3 and newer ### Build 774 (Sep 29, 2023) **What's New** - `NB.IsEditorWritable` (internal property) **Changes** - [Networked] properties backing fields receive [DrawIfAttribute], to make sure they are read only for clients without state authority **Bug Fixes** - Fixed: `UnitySurrogateBaseWrapper` not being a standalone script warning - Fixed: `FailedToCreateInstance` error for when less than 64 prefabs are registered ### Build 772 (Sep 27, 2023) **Changes** - Deferred runner `Initialized` invoke and renamed to `OnGameStart` - If RPC returns `RpcInvokeInfo`, no error will be logged if target or flags prevent the RPC from being sent - `TickRate` properties fall back to 0 instead of infinity if rates are 0 too - `StateReplicator` throws `AssertException` in some erroneous scenarios even in Release builds **Bug Fixes** - Fixed: `IndexOutOfRangeException` on reimporting NetworkPrefabTable ### Build 771 (Sep 26, 2023) **What's New** - NetworkRigidbody classes added handling for StateAuthorityChanged in Shared Mode - NetworkPrefabTable ref tracking - Huge improvements to `Network Prefabs Inspector` **Changes** - Removed DisabledAutoSyncTransforms field from RunnerSimulatePhysics component. Now will just display and inspector warning if AutoSyncTransforms is enabled in unity Physics settings **Bug Fixes** - Fixed: FusionBootstrap: trying to spawn clients in Single mode if set to Automatic - Fixed: `IsNested` flag cleared prematurely in some destroy scenarios - Fixed: `IsNested` flags never assigned to a remote nested object ### Build 768 (Sep 23, 2023) **Changes** - Photon Realtime SDK to 4.1.7.0 ### Build 766 (Sep 21, 2023) **What's New** - NetworkPrefabTableInspector ("Fusion/Windows/Network Prefabs Inspector") **Changes** - Quantum and Fusion use common code for loading dynamic assets now. Stage is set for finally being able to track spawned prefab instances - `SimulationBehaviourUpdater` no longer uses global config" This reverts commit 3afe58fd7b35c0d790407cf7ccf71a7d1e0e668d - `SimulationBehaviourUpdater` no longer uses global config - `NetworkPrefabTable.TryAdd` accepts invalid guids now; it simply won't map that guid to the prefab id, meaning that it can only be accessed with `NetworkPrefabId` **Bug Fixes** - Fixed: Pending prefab import was a legacy thing ### Build 764 (Sep 19, 2023) **What's New** - Lag Compensation Capsule Hitbox ### Build 761 (Sep 15, 2023) **Bug Fixes** - Fixed: NPC parse-related error on importing a package ### Build 759 (Sep 13, 2023) **Changes** - `ILogger` string parameter changed to `object` (from `string`) - `FusionUnityLogger.LogException` will first log the exception type and then spawn a thread to rethrow it (if UNITY_EDITOR is defined). This ensures double clicking on a log entry takes you to the throw location **Bug Fixes** - Fixed: Spawn position and rotation values pushed to NRB rigidbody in Spawned(), ensuring RB values are immediately correct before first simulation - Fixed: NetworkTransform now uses a public getter for the SimulationConfig rather than an internal one. NT implementation can be copied as is as a basis for custom implementations in Unity ### Build 758 (Sep 12, 2023) **What's New** - NetworkRigidbody added missing AOI enabled check. Root NetworkTRSP components no longer required for parenting if AOI is disabled **Changes** - NetworkTRSP.IsMainTRSP setter is now protected ### Build 756 (Sep 08, 2023) **Bug Fixes** - Fixed: Explicit interest in shared mode ### Build 754 (Sep 06, 2023) **What's New** - `NetworkRunner.LoadScene` `setActiveOnLoad` parameter - passing true will active the scene right after loading, before invoking Spawned on contained NOs - Added support for disconnect token byte[]. up to 128 bytes ### Build 750 (Sep 03, 2023) **What's New** - MasterClient Runner now identified with [MC] in in Runner Visibility Controls Window ### Build 749 (Sep 02, 2023) **Changes** - Hitbox matrix TRS custom calculation **Bug Fixes** - Fixed: Stackoverflow when setting HitboxRoot min bounding radius with no hitboxes - Fixed: Lag compensation sphere overlap query hitpoint calculation ### Build 747 (Aug 25, 2023) **What's New** - IM to lag compensation to update only interested HitboxRoots ### Build 746 (Aug 24, 2023) **What's New** - NetworkRigidbody in Shared Mode will by default leave Unity physics auto-simulate enabled. Adding RunnerPhysicsSimulate to the NetworkRunner is still possible to explicitly give Fusion physics control **Changes** - NRB added improved support for NRBs with non-NB parents ### Build 745 (Aug 23, 2023) **Bug Fixes** - Fixed: "Shutdown" button on NetworkRunner inspsctor now implemented ### Build 744 (Aug 22, 2023) **Bug Fixes** - Fixed: FusionBootstrap can now correctly start in Single Peer with the Auto setting (previously created 0 clients) ### Build 741 (Aug 18, 2023) **Bug Fixes** - Fixed: RunnerSimulationPhysics now gets and sets NetworkPhysicsInfo correctly for Shared Mode ### Build 738 (Aug 11, 2023) **Changes** - Added NRB handling for pooling. Despawn() now resets the RB velocities and restores IsKinematic to original value from Spawned(). Added DisableSyncTransforms to RunnerSimulatePhysics classes, to make disabling optional ### Build 737 (Aug 10, 2023) **Bug Fixes** - Fixed: Runner.IsForward being true on BeforeAllTicks when resimulating - Fixed: MasterClientObjects not being simulated by the new master client ### Build 736 (Aug 09, 2023) **Changes** - Removed IPredictedDespawnBehaviour **Bug Fixes** - Fixed: NetworkTransform throwing null ref on disabled child object Called manually the awake from spawned if the transform was not yet cached - Fixed: Issue where objects without state authority could be despawned ### Build 735 (Aug 08, 2023) **What's New** - NetworkPhysicsInfo internal struct object (id: 4). Not going to exist in shared mode until the plugin is updated ### Build 734 (Aug 07, 2023) **Bug Fixes** - Fixed: Spawned objects ending up on host scene ### Build 733 (Aug 05, 2023) **Changes** - Calls to Load/Unload scene are correctly deferred until the initial info is processed Cleaning up before the merge wip wip simplifying initial scene load flow **Bug Fixes** - Fixed: Occasionally not being able to spawn prefabs using static references - Fixed: Destroying object without state attached throwing an exception - Fixed: Clients not resetting their scene info snapshot upon connecting - Fixed: Addressable scenes discovery blocking Unity, if something goes wrong - Fixed: Throwing exception in task-based scene ops ### Build 732 (Aug 04, 2023) **Changes** - RunnerAOIGizmos will render even if the Server runner is set to not visible (multi-peer mode) **Bug Fixes** - Fixed: Bug with aoi cell calculations ### Build 731 (Aug 03, 2023) **Changes** - MaxPlayers now accepts int values ### Build 730 (Aug 02, 2023) **Changes** - Renamed NetworkRigidbody.MovingTeleport() to just Teleport(), replacing the previous basic Teleport() implementation **Bug Fixes** - Fixed: Physics not updating when scenes are loaded with local physics mode in single-peer mode ### Build 729 (Aug 01, 2023) **What's New** - Public property NetworkRigidbody3D.Rigidbody and NetworkRigidbody2D.Rigidbody added for consistency with previous Fusion NRB ### Build 728 (Jul 29, 2023) **Bug Fixes** - Fixed: Weaver: Invalid casts for non-serialized dictionaries when `UseSerializableDictionary` is enabled - Fixed: Issue with latest state changes from server not being available when state authority switch happens - Fixed: SceneRef obsolete warning - Fixed: Removed IPredictedSpawnBehaviour ### Build 719 (Jul 11, 2023) **Changes** - Hitbox colliders and BVH nodes arrays now resize on demand **Bug Fixes** - Fixed: `NetworkRunner.LoadScene` ignoring `localPhysicsMode` parameter ### Build 717 (Jul 07, 2023) **Bug Fixes** - Fixed: RunnerSimulatePhysics3D obsolete warning - updated to use Physics.simulationMode with 2022_3 and newer ### Build 716 (Jul 05, 2023) - Initial 2.0 release