From 05b54cc1b42c836b52bcfed1d2303e5da7d0c00a Mon Sep 17 00:00:00 2001 From: NoelStephensUnity Date: Tue, 2 Apr 2024 16:32:03 -0500 Subject: [PATCH 1/5] update make the unity 6 editor the target --- com.unity.netcode.gameobjects/package.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/com.unity.netcode.gameobjects/package.json b/com.unity.netcode.gameobjects/package.json index 3db90c2849..23f318d8be 100644 --- a/com.unity.netcode.gameobjects/package.json +++ b/com.unity.netcode.gameobjects/package.json @@ -3,7 +3,7 @@ "displayName": "Netcode for GameObjects", "description": "Netcode for GameObjects is a high-level netcode SDK that provides networking capabilities to GameObject/MonoBehaviour workflows within Unity and sits on top of underlying transport layer.", "version": "2.0.0-exp.1", - "unity": "2022.3", + "unity": "6000.0", "dependencies": { "com.unity.nuget.mono-cecil": "1.11.4", "com.unity.transport": "2.2.1" From dc02335f41701df7f26ea4c47293b1fb79785e3e Mon Sep 17 00:00:00 2001 From: NoelStephensUnity Date: Tue, 2 Apr 2024 16:40:35 -0500 Subject: [PATCH 2/5] update updating the target editor to use for all tests --- .yamato/project.metafile | 15 +++++++-------- 1 file changed, 7 insertions(+), 8 deletions(-) diff --git a/.yamato/project.metafile b/.yamato/project.metafile index 6a840717ff..191842fd5e 100644 --- a/.yamato/project.metafile +++ b/.yamato/project.metafile @@ -1,5 +1,5 @@ -validation_editor: 2022.3 -mobile_validation_editor: 2022.3 +validation_editor: 6000.0 +mobile_validation_editor: 6000.0 # Platforms that will be tested. The first entry in this array will also # be used for validation @@ -42,8 +42,7 @@ projects: - name: com.unity.netcode.gameobjects path: com.unity.netcode.gameobjects test_editors: - - 2022.3 - - 2023.2 + - 6000.0 - trunk - name: minimalproject path: minimalproject @@ -54,22 +53,22 @@ projects: - name: com.unity.netcode.gameobjects path: com.unity.netcode.gameobjects test_editors: - - 2022.3 + - 6000.0 - name: testproject-tools-integration path: testproject-tools-integration validate: false publish: false has_tests: true test_editors: - - 2022.3 + - 6000.0 - trunk # Package dependencies dependencies: - name: com.unity.transport - version: 2.0.0-pre.2 + version: 2.2.1 test_editors: - - 2022.2 + - 6000.0 - trunk # Scripting backends used by Standalone Playmode Tests From 2e79a204c42d10a491d0296fdaff4626788624b3 Mon Sep 17 00:00:00 2001 From: NoelStephensUnity Date: Tue, 2 Apr 2024 17:35:20 -0500 Subject: [PATCH 3/5] update Update changes from PascalCasing to camelCasing. Updating the manifest.json. Updating the ProjectVersion. --- .../RigidbodyContactEventManager.cs | 18 ++++++------- .../NetworkTransformOwnershipTests.cs | 4 +-- testproject/Packages/manifest.json | 27 ++++++++++--------- .../ProjectSettings/ProjectVersion.txt | 4 +-- 4 files changed, 27 insertions(+), 26 deletions(-) diff --git a/com.unity.netcode.gameobjects/Components/RigidbodyContactEventManager.cs b/com.unity.netcode.gameobjects/Components/RigidbodyContactEventManager.cs index 688aa68e97..9471a94fb5 100644 --- a/com.unity.netcode.gameobjects/Components/RigidbodyContactEventManager.cs +++ b/com.unity.netcode.gameobjects/Components/RigidbodyContactEventManager.cs @@ -170,28 +170,28 @@ public void Execute(int index) int count = 0; int collisionStaycount = 0; int positionCount = 0; - for (int j = 0; j < PairedHeaders[index].PairCount; j++) + for (int j = 0; j < PairedHeaders[index].pairCount; j++) { ref readonly var pair = ref PairedHeaders[index].GetContactPair(j); - if (pair.IsCollisionExit) + if (pair.isCollisionExit) { continue; } - for (int k = 0; k < pair.ContactCount; k++) + for (int k = 0; k < pair.contactCount; k++) { ref readonly var contact = ref pair.GetContactPoint(k); - averagePoint += contact.Position; + averagePoint += contact.position; positionCount++; - if (!pair.IsCollisionStay) + if (!pair.isCollisionStay) { - averageNormal += contact.Normal; + averageNormal += contact.normal; count++; } else { - averageCollisionStay += contact.Normal; + averageCollisionStay += contact.normal; collisionStaycount++; } } @@ -214,8 +214,8 @@ public void Execute(int index) var result = new JobResultStruct() { - ThisInstanceID = PairedHeaders[index].BodyInstanceID, - OtherInstanceID = PairedHeaders[index].OtherBodyInstanceID, + ThisInstanceID = PairedHeaders[index].bodyInstanceID, + OtherInstanceID = PairedHeaders[index].otherBodyInstanceID, AverageNormal = averageNormal, HasCollisionStay = collisionStaycount != 0, AverageCollisionStayNormal = averageCollisionStay, diff --git a/com.unity.netcode.gameobjects/Tests/Runtime/NetworkTransform/NetworkTransformOwnershipTests.cs b/com.unity.netcode.gameobjects/Tests/Runtime/NetworkTransform/NetworkTransformOwnershipTests.cs index 486a9e3388..d6d35f397c 100644 --- a/com.unity.netcode.gameobjects/Tests/Runtime/NetworkTransform/NetworkTransformOwnershipTests.cs +++ b/com.unity.netcode.gameobjects/Tests/Runtime/NetworkTransform/NetworkTransformOwnershipTests.cs @@ -277,7 +277,7 @@ void LogOwnerRigidBody(int stage) { var ownerRigidbody = ownerInstance.GetComponent(); ownerRigidbody.Move(valueSetByOwner, rotation); - ownerRigidbody.velocity = Vector3.zero; + ownerRigidbody.linearVelocity = Vector3.zero; yield return s_DefaultWaitForTick; ownerInstance.transform.localScale = valueSetByOwner; } @@ -359,7 +359,7 @@ void LogOwnerRigidBody(int stage) LogOwnerRigidBody(2); ownerInstance.GetComponent().LogMotion = m_EnableVerboseDebug; nonOwnerInstance.GetComponent().LogMotion = m_EnableVerboseDebug; - ownerRigidbody.velocity = Vector3.zero; + ownerRigidbody.linearVelocity = Vector3.zero; } else { diff --git a/testproject/Packages/manifest.json b/testproject/Packages/manifest.json index 427d544b3e..5e655da7ed 100644 --- a/testproject/Packages/manifest.json +++ b/testproject/Packages/manifest.json @@ -1,21 +1,22 @@ { "dependencies": { - "com.unity.addressables": "1.21.9", - "com.unity.ai.navigation": "1.1.1", - "com.unity.collab-proxy": "1.17.7", - "com.unity.ide.rider": "3.0.18", - "com.unity.ide.visualstudio": "2.0.17", - "com.unity.mathematics": "1.2.6", + "com.unity.addressables": "2.0.8", + "com.unity.ai.navigation": "2.0.0", + "com.unity.collab-proxy": "2.3.1", + "com.unity.ide.rider": "3.0.28", + "com.unity.ide.visualstudio": "2.0.22", + "com.unity.mathematics": "1.3.1", "com.unity.netcode.gameobjects": "file:../../com.unity.netcode.gameobjects", "com.unity.package-validation-suite": "0.49.0-preview", - "com.unity.services.authentication": "2.4.0", - "com.unity.services.core": "1.8.1", + "com.unity.services.authentication": "3.3.0", + "com.unity.services.core": "1.12.4", "com.unity.services.relay": "1.0.5", - "com.unity.test-framework": "1.3.3", - "com.unity.test-framework.performance": "2.8.1-preview", - "com.unity.textmeshpro": "3.0.6", - "com.unity.timeline": "1.8.2", - "com.unity.ugui": "1.0.0", + "com.unity.test-framework": "1.4.3", + "com.unity.test-framework.performance": "3.0.3", + "com.unity.timeline": "1.8.6", + "com.unity.toolchain.win-x86_64-linux-x86_64": "2.0.6", + "com.unity.ugui": "2.0.0", + "com.unity.modules.accessibility": "1.0.0", "com.unity.modules.ai": "1.0.0", "com.unity.modules.androidjni": "1.0.0", "com.unity.modules.animation": "1.0.0", diff --git a/testproject/ProjectSettings/ProjectVersion.txt b/testproject/ProjectSettings/ProjectVersion.txt index 307ccd3516..af45f2f719 100644 --- a/testproject/ProjectSettings/ProjectVersion.txt +++ b/testproject/ProjectSettings/ProjectVersion.txt @@ -1,2 +1,2 @@ -m_EditorVersion: 2022.3.19f1 -m_EditorVersionWithRevision: 2022.3.19f1 (244b723c30a6) +m_EditorVersion: 6000.0.0b13 +m_EditorVersionWithRevision: 6000.0.0b13 (21aeb48b6ed2) From 7feb7cb22829730e35b3416bb3d000d4020e1c30 Mon Sep 17 00:00:00 2001 From: NoelStephensUnity Date: Tue, 2 Apr 2024 19:32:58 -0500 Subject: [PATCH 4/5] fixes and update fixing an issue with one of the scene integration tests. Updating the addressable asset settings for Unity 6 compatibility. other minor updates. --- .../SceneManagement/NetworkSceneManager.cs | 2 +- .../SceneManagement/SceneEventProgress.cs | 2 +- .../AddressableAssetSettings.asset | 47 +++++++++++-------- .../SceneObjectsNotDestroyedOnShutdownTest.cs | 16 ++++--- 4 files changed, 38 insertions(+), 29 deletions(-) diff --git a/com.unity.netcode.gameobjects/Runtime/SceneManagement/NetworkSceneManager.cs b/com.unity.netcode.gameobjects/Runtime/SceneManagement/NetworkSceneManager.cs index b2ca1e2182..1e6dacfd84 100644 --- a/com.unity.netcode.gameobjects/Runtime/SceneManagement/NetworkSceneManager.cs +++ b/com.unity.netcode.gameobjects/Runtime/SceneManagement/NetworkSceneManager.cs @@ -1888,7 +1888,7 @@ private void OnSessionOwnerLoadedScene(uint sceneEventId, Scene scene) OnLoadComplete?.Invoke(NetworkManager.LocalClientId, SceneNameFromHash(sceneEventData.SceneHash), sceneEventData.LoadSceneMode); //Second, only if we are a host do we want register having loaded for the associated SceneEventProgress - if (SceneEventProgressTracking.ContainsKey(sceneEventData.SceneEventProgressId) && NetworkManager.IsHost) + if (SceneEventProgressTracking.ContainsKey(sceneEventData.SceneEventProgressId) && NetworkManager.IsClient) { SceneEventProgressTracking[sceneEventData.SceneEventProgressId].ClientFinishedSceneEvent(NetworkManager.LocalClientId); } diff --git a/com.unity.netcode.gameobjects/Runtime/SceneManagement/SceneEventProgress.cs b/com.unity.netcode.gameobjects/Runtime/SceneManagement/SceneEventProgress.cs index 734d9885ee..e9b52a218e 100644 --- a/com.unity.netcode.gameobjects/Runtime/SceneManagement/SceneEventProgress.cs +++ b/com.unity.netcode.gameobjects/Runtime/SceneManagement/SceneEventProgress.cs @@ -300,7 +300,7 @@ internal void TryFinishingSceneEventProgress() m_NetworkManager.OnClientDisconnectCallback -= OnClientDisconnectCallback; } - if (m_TimeOutCoroutine != null) + if (m_TimeOutCoroutine != null && m_NetworkManager != null) { m_NetworkManager.StopCoroutine(m_TimeOutCoroutine); } diff --git a/testproject/Assets/AddressableAssetsData/AddressableAssetSettings.asset b/testproject/Assets/AddressableAssetsData/AddressableAssetSettings.asset index 87c46389ef..6a1c39a006 100644 --- a/testproject/Assets/AddressableAssetsData/AddressableAssetSettings.asset +++ b/testproject/Assets/AddressableAssetsData/AddressableAssetSettings.asset @@ -13,24 +13,39 @@ MonoBehaviour: m_Name: AddressableAssetSettings m_EditorClassIdentifier: m_DefaultGroup: 93aa504d1b753cb41a8a779ae63f5795 - m_CachedHash: + m_currentHash: serializedVersion: 2 - Hash: 00000000000000000000000000000000 + Hash: c105cac3e36a87a6dabc4f3755bc1fd9 m_OptimizeCatalogSize: 0 m_BuildRemoteCatalog: 0 - m_BundleLocalCatalog: 0 m_CatalogRequestsTimeout: 0 m_DisableCatalogUpdateOnStart: 0 + m_InternalIdNamingMode: 0 + m_InternalBundleIdMode: 1 + m_AssetLoadMode: 0 + m_BundledAssetProviderType: + m_AssemblyName: Unity.ResourceManager, Version=0.0.0.0, Culture=neutral, PublicKeyToken=null + m_ClassName: UnityEngine.ResourceManagement.ResourceProviders.BundledAssetProvider + m_AssetBundleProviderType: + m_AssemblyName: Unity.ResourceManager, Version=0.0.0.0, Culture=neutral, PublicKeyToken=null + m_ClassName: UnityEngine.ResourceManagement.ResourceProviders.AssetBundleProvider m_IgnoreUnsupportedFilesInBuild: 0 m_UniqueBundleIds: 0 + m_EnableJsonCatalog: 0 m_NonRecursiveBuilding: 1 m_CCDEnabled: 0 m_maxConcurrentWebRequests: 500 + m_UseUWRForLocalBundles: 0 + m_BundleTimeout: 0 + m_BundleRetryCount: 0 + m_BundleRedirectLimit: -1 + m_SharedBundleSettings: 0 + m_SharedBundleSettingsCustomGroupIndex: 0 m_ContiguousBundles: 0 m_StripUnityVersionFromBundleBuild: 0 m_DisableVisibleSubAssetRepresentations: 0 - m_ShaderBundleNaming: 0 - m_ShaderBundleCustomNaming: + m_BuiltInBundleNaming: 0 + mBuiltInBundleCustomNaming: m_MonoScriptBundleNaming: 0 m_CheckForContentUpdateRestrictionsOption: 0 m_MonoScriptBundleCustomNaming: @@ -47,8 +62,6 @@ MonoBehaviour: - {fileID: 11400000, guid: 783a7ba7cfd87084388760e6c08547b4, type: 2} - {fileID: 11400000, guid: cb34f2b4f49b0a64aa04c7c5bcb3e41e, type: 2} m_BuildSettings: - m_CompileScriptsInVirtualMode: 0 - m_CleanupStreamingAssetsAfterBuilds: 1 m_LogResourceManagerExceptions: 1 m_BundleBuildPath: Temp/com.unity.addressables/AssetBundles m_ProfileSettings: @@ -64,24 +77,24 @@ MonoBehaviour: - m_Id: 80085c797452bb94ca0bf0a4b2ec258c m_Value: '{UnityEngine.AddressableAssets.Addressables.RuntimePath}/[BuildTarget]' - m_Id: eaae5cc67c56cfe4299363a742a284b3 - m_Value: ServerData/[BuildTarget] + m_Value: 'ServerData/[BuildTarget]' - m_Id: 2a3d80e942fdbfe49a979d4a22bbe893 - m_Value: http://localhost/[BuildTarget] + m_Value: 'http://localhost/[BuildTarget]' m_ProfileEntryNames: - m_Id: a2553e7788fb43741926b3128a0aa641 m_Name: BuildTarget m_InlineUsage: 0 - m_Id: 8bc200e556c0a2f4daf1a4696958eaa6 - m_Name: LocalBuildPath + m_Name: Local.BuildPath m_InlineUsage: 0 - m_Id: 80085c797452bb94ca0bf0a4b2ec258c - m_Name: LocalLoadPath + m_Name: Local.LoadPath m_InlineUsage: 0 - m_Id: eaae5cc67c56cfe4299363a742a284b3 - m_Name: RemoteBuildPath + m_Name: Remote.BuildPath m_InlineUsage: 0 - m_Id: 2a3d80e942fdbfe49a979d4a22bbe893 - m_Name: RemoteLoadPath + m_Name: Remote.LoadPath m_InlineUsage: 0 m_ProfileVersion: 1 m_LabelTable: @@ -94,15 +107,9 @@ MonoBehaviour: m_CertificateHandlerType: m_AssemblyName: m_ClassName: - m_ActivePlayerDataBuilderIndex: 3 + m_ActivePlayerDataBuilderIndex: 2 m_DataBuilders: - {fileID: 11400000, guid: 9f220b782e4e67d4787c06a5ca9f25cc, type: 2} - - {fileID: 11400000, guid: 34e64d32387bb4a4db2e4170f8100ace, type: 2} - {fileID: 11400000, guid: ae43701986fc59a44b2618f3bacabc0a, type: 2} - {fileID: 11400000, guid: d6f3a7ab824a4b04a970de0ba5011a93, type: 2} m_ActiveProfileId: b7ba5fc73af2a49449023b732cdf652d - m_HostingServicesManager: - m_HostingServiceInfos: [] - m_Settings: {fileID: 11400000} - m_NextInstanceId: 0 - m_RegisteredServiceTypeRefs: [] diff --git a/testproject/Assets/Tests/Runtime/SceneObjectsNotDestroyedOnShutdownTest.cs b/testproject/Assets/Tests/Runtime/SceneObjectsNotDestroyedOnShutdownTest.cs index 4c190c424c..c0d5e87b04 100644 --- a/testproject/Assets/Tests/Runtime/SceneObjectsNotDestroyedOnShutdownTest.cs +++ b/testproject/Assets/Tests/Runtime/SceneObjectsNotDestroyedOnShutdownTest.cs @@ -27,17 +27,19 @@ public IEnumerator SceneObjectsNotDestroyedOnShutdown() yield return WaitForConditionOrTimeOut(() => m_TestScene.IsValid() && m_TestScene.isLoaded); AssertOnTimeout($"Timed out waiting for scene {k_TestScene} to load!"); - #if UNITY_2023_1_OR_NEWER - var loadedInSceneObject = Object.FindObjectsByType(FindObjectsSortMode.InstanceID).Where((c) => c.name == k_SceneObjectName).FirstOrDefault(); + var loadedInSceneObject = Object.FindObjectsByType(FindObjectsSortMode.InstanceID).Where((c) => c.name.Contains(k_SceneObjectName)).FirstOrDefault(); #else var loadedInSceneObject = Object.FindObjectsOfType().Where((c) => c.name.Contains(k_SceneObjectName)).FirstOrDefault(); #endif Assert.IsNotNull(loadedInSceneObject, $"Failed to find {k_SceneObjectName} before starting client!"); + + AssertOnTimeout($"Timed out waiting to find {k_SceneObjectName} after scene load and before starting client!\""); + yield return CreateAndStartNewClient(); #if UNITY_2023_1_OR_NEWER - var loadedInSceneObjects = Object.FindObjectsByType(FindObjectsSortMode.InstanceID).Where((c) => c.name == k_SceneObjectName); + var loadedInSceneObjects = Object.FindObjectsByType(FindObjectsSortMode.InstanceID).Where((c) => c.name.Contains(k_SceneObjectName)); #else var loadedInSceneObjects = Object.FindObjectsOfType().Where((c) => c.name.Contains(k_SceneObjectName)); #endif @@ -45,7 +47,7 @@ public IEnumerator SceneObjectsNotDestroyedOnShutdown() m_ClientNetworkManagers[0].Shutdown(); yield return m_DefaultWaitForTick; #if UNITY_2023_1_OR_NEWER - loadedInSceneObjects = Object.FindObjectsByType(FindObjectsSortMode.InstanceID).Where((c) => c.name == k_SceneObjectName); + loadedInSceneObjects = Object.FindObjectsByType(FindObjectsSortMode.InstanceID).Where((c) => c.name.Contains(k_SceneObjectName)); #else loadedInSceneObjects = Object.FindObjectsOfType().Where((c) => c.name.Contains(k_SceneObjectName)); #endif @@ -62,7 +64,7 @@ public IEnumerator ChildSceneObjectsDoNotDestroyOnShutdown() AssertOnTimeout($"Timed out waiting for scene {k_TestScene} to load!"); #if UNITY_2023_1_OR_NEWER - var loadedInSceneObject = Object.FindObjectsByType(FindObjectsSortMode.InstanceID).Where((c) => c.name == k_SceneObjectName).FirstOrDefault(); + var loadedInSceneObject = Object.FindObjectsByType(FindObjectsSortMode.InstanceID).Where((c) => c.name.Contains(k_SceneObjectName)).FirstOrDefault(); #else var loadedInSceneObject = Object.FindObjectsOfType().Where((c) => c.name.Contains(k_SceneObjectName)).FirstOrDefault(); #endif @@ -76,7 +78,7 @@ public IEnumerator ChildSceneObjectsDoNotDestroyOnShutdown() AssertOnTimeout($"Client-{clientId} player never parented {k_SceneObjectName}!"); #if UNITY_2023_1_OR_NEWER - var loadedInSceneObjects = Object.FindObjectsByType(FindObjectsSortMode.InstanceID).Where((c) => c.name == k_SceneObjectName); + var loadedInSceneObjects = Object.FindObjectsByType(FindObjectsSortMode.InstanceID).Where((c) => c.name.Contains(k_SceneObjectName)); #else var loadedInSceneObjects = Object.FindObjectsOfType().Where((c) => c.name.Contains(k_SceneObjectName)); #endif @@ -88,7 +90,7 @@ public IEnumerator ChildSceneObjectsDoNotDestroyOnShutdown() yield return WaitForConditionOrTimeOut(() => PlayerNoLongerExistsWithChildren(clientId)); AssertOnTimeout($"Client-{clientId} player still exits with children after client shutdown!"); #if UNITY_2023_1_OR_NEWER - loadedInSceneObjects = Object.FindObjectsByType(FindObjectsSortMode.InstanceID).Where((c) => c.name == k_SceneObjectName); + loadedInSceneObjects = Object.FindObjectsByType(FindObjectsSortMode.InstanceID).Where((c) => c.name.Contains(k_SceneObjectName)); #else loadedInSceneObjects = Object.FindObjectsOfType().Where((c) => c.name.Contains(k_SceneObjectName)); #endif From b00e871bf3633c601d0caeec9e977f8488651802 Mon Sep 17 00:00:00 2001 From: NoelStephensUnity Date: Tue, 2 Apr 2024 19:50:10 -0500 Subject: [PATCH 5/5] update NGO version number. Added a large chunk of the changelog entries. --- com.unity.netcode.gameobjects/CHANGELOG.md | 62 +++++++++++++++++++++- com.unity.netcode.gameobjects/package.json | 2 +- 2 files changed, 61 insertions(+), 3 deletions(-) diff --git a/com.unity.netcode.gameobjects/CHANGELOG.md b/com.unity.netcode.gameobjects/CHANGELOG.md index c45db7c11e..57402364ca 100644 --- a/com.unity.netcode.gameobjects/CHANGELOG.md +++ b/com.unity.netcode.gameobjects/CHANGELOG.md @@ -6,9 +6,61 @@ The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/) Additional documentation and release notes are available at [Multiplayer Documentation](https://docs-multiplayer.unity3d.com). -## [Unreleased] +## [2.0.0-exp.2] - 2024-04-02 ### Added +- Added updates to all internal messages to account for a distributed authority network session connection. (#2863) +- Added `NetworkRigidbodyBase` that provides users with a more customizable network rigidbody, handles both `Rigidbody` and `Rigidbody2D`, and provides an option to make `NetworkTransform` use the rigid body for motion. (#2863) + - For a customized `NetworkRigidbodyBase` class: + - `NetworkRigidbodyBase.AutoUpdateKinematicState` provides control on whether the kinematic setting will be automatically set or not when ownership changes. + - `NetworkRigidbodyBase.AutoSetKinematicOnDespawn` provides control on whether isKinematic will automatically be set to true when the associated `NetworkObject` is despawned. + - `NetworkRigidbodyBase.Initialize` is a protected method that, when invoked, will initialize the instance. This includes options to: + - Set whether using a `RigidbodyTypes.Rigidbody` or `RigidbodyTypes.Rigidbody2D`. + - Includes additional optional parameters to set the `NetworkTransform`, `Rigidbody`, and `Rigidbody2d` to use. + - Provides additional public methods: + - `NetworkRigidbodyBase.GetPosition` to return the position of the `Rigidbody` or `Rigidbody2d` (depending upon its initialized setting). + - `NetworkRigidbodyBase.GetRotation` to return the rotation of the `Rigidbody` or `Rigidbody2d` (depending upon its initialized setting). + - `NetworkRigidbodyBase.MovePosition` to move to the position of the `Rigidbody` or `Rigidbody2d` (depending upon its initialized setting). + - `NetworkRigidbodyBase.MoveRotation` to move to the rotation of the `Rigidbody` or `Rigidbody2d` (depending upon its initialized setting). + - `NetworkRigidbodyBase.Move` to move to the position and rotation of the `Rigidbody` or `Rigidbody2d` (depending upon its initialized setting). + - `NetworkRigidbodyBase.Move` to move to the position and rotation of the `Rigidbody` or `Rigidbody2d` (depending upon its initialized setting). + - `NetworkRigidbodyBase.SetPosition` to set the position of the `Rigidbody` or `Rigidbody2d` (depending upon its initialized setting). + - `NetworkRigidbodyBase.SetRotation` to set the rotation of the `Rigidbody` or `Rigidbody2d` (depending upon its initialized setting). + - `NetworkRigidbodyBase.ApplyCurrentTransform` to set the position and rotation of the `Rigidbody` or `Rigidbody2d` based on the associated `GameObject` transform (depending upon its initialized setting). + - `NetworkRigidbodyBase.WakeIfSleeping` to wake up the rigid body if sleeping. + - `NetworkRigidbodyBase.SleepRigidbody` to put the rigid body to sleep. + - `NetworkRigidbodyBase.IsKinematic` to determine if the `Rigidbody` or `Rigidbody2d` (depending upon its initialized setting) is currently kinematic. + - `NetworkRigidbodyBase.SetIsKinematic` to set the `Rigidbody` or `Rigidbody2d` (depending upon its initialized setting) current kinematic state. + - `NetworkRigidbodyBase.ResetInterpolation` to reset the `Rigidbody` or `Rigidbody2d` (depending upon its initialized setting) back to its original interpolation value when initialized. + - Now includes a `MonoBehaviour.FixedUpdate` implementation that will update the assigned `NetworkTransform` when `NetworkRigidbodyBase.UseRigidBodyForMotion` is true. (#2863) +- Added `RigidbodyContactEventManager` that provides a more optimized way to process collision enter and collision stay events as opposed to the `Monobehaviour` approach. (#2863) + - Can be used in client-server and distributed authority modes, but is particularly useful in distributed authority. +- Added rigid body motion updates to `NetworkTransform` which allows users to set interolation on rigid bodies. (#2863) + - Extrapolation is only allowed on authoritative instances, but custom class derived from `NetworkRigidbodyBase` or `NetworkRigidbody` or `NetworkRigidbody2D` automatically switches non-authoritative instances to interpolation if set to extrapolation. +- Added distributed authority mode support to `NetworkAnimator`. (#2863) +- Added session mode selection to `NetworkManager` inspector view. (#2863) +- Added distributed authority permissions feature. (#2863) +- Added distributed authority mode specific `NetworkObject` permissions flags (Distributable, Transferable, and RequestRequired). (#2863) +- Added distributed authority mode specific `NetworkObject.SetOwnershipStatus` method that applies one or more `NetworkObject` instance's ownership flags. If updated when spawned, the ownership permission changes are synchronized with the other connected clients. (#2863) +- Added distributed authority mode specific `NetworkObject.RemoveOwnershipStatus` method that removes one or more `NetworkObject` instance's ownership flags. If updated when spawned, the ownership permission changes are synchronized with the other connected clients. (#2863) +- Added distributed authority mode specific `NetworkObject.HasOwnershipStatus` method that will return (true or false) whether one or more ownership flags is set. (#2863) +- Added distributed authority mode specific `NetworkObject.SetOwnershipLock` method that locks ownership of a `NetworkObject` to prevent ownership from changing until the current owner releases the lock. (#2863) +- Added distributed authority mode specific `NetworkObject.RequestOwnership` method that sends an ownership request to the current owner of a spawned `NetworkObject` instance. (#2863) +- Added distributed authority mode specific `NetworkObject.OnOwnershipRequested` callback handler that is invoked on the owner/authoritative side when a non-owner requests ownership. Depending upon the boolean returned value depends upon whether the request is approved or denied. (#2863) +- Added distributed authority mode specific `NetworkObject.OnOwnershipRequestResponse` callback handler that is invoked when a non-owner's request has been processed. This callback includes a `NetworkObjet.OwnershipRequestResponseStatus` response parameter that describes whether the request was approved or the reason why it was not approved. (#2863) +- Added distributed authority mode specific `NetworkObject.DeferDespawn` method that defers the despawning of `NetworkObject` instances on non-authoritative clients based on the tick offset parameter. (#2863) +- Added distributed authority mode specific `NetworkObject.OnDeferredDespawnComplete` callback handler that can be used to further control when deferring the despawning of a `NetworkObject` on non-authoritative instances. (#2863) +- Added `NetworkClient.SessionModeType` as one way to determine the current session mode of the network session a client is connected to. (#2863) +- Added distributed authority mode specific `NetworkClient.IsSessionOwner` property to determine if the current local client is the current session owner of a distributed authority session. (#2863) +- Added distributed authority mode specific client side spawning capabilities. When running in distributed authority mode, clients can instantiate and spawn `NetworkObject` instances (the local client is authomatically the owner of the spawned object). (#2863) + - This is useful to better visually synchronize owner authoritative motion models and newly spawned `NetworkObject` instances (i.e. projectiles for example). +- Added distributed authority mode specific client side player spawning capabilities. Clients will automatically spawn their associated player object locally. (#2863) +- Added distributed authority mode specific `NetworkConfig.AutoSpawnPlayerPrefabClientSide` property (default is true) to provide control over the automatic spawning of player prefabs on the local client side. (#2863) +- Added distributed authority mode specific `NetworkManager.OnFetchLocalPlayerPrefabToSpawn` callback that, when assigned, will allow the local client to provide the player prefab to be spawned for the local client. (#2863) + - This is only invoked if the `NetworkConfig.AutoSpawnPlayerPrefabClientSide` property is set to true. +- Added distributed authority mode specific `NetworkBehaviour.HasAuthority` property that determines if the local client has authority over the associated `NetworkObject` instance (typical use case is within a `NetworkBehaviour` script much like that of `IsServer` or `IsClient`). (#2863) +- Added distributed authority mode specific `NetworkBehaviour.IsSessionOwner` property that determines if the local client is the session owner (typical use case would be to determine if the local client can has scene management authority within a `NetworkBehaviour` script). (#2863) +- Added support for distributed authority mode scene management where the currently assigned session owner can start scene events (i.e. scene loading and scene unloading). (#2863) ### Fixed @@ -17,7 +69,13 @@ Additional documentation and release notes are available at [Multiplayer Documen - Fixed issue where in-scene placed `NetworkObject`s with complex nested children `NetworkObject`s (more than one child in depth) would not synchronize properly if WorldPositionStays was set to true. (#2796) ### Changed - +- Changed client side awareness of other clients is now the same as a server or host. (#2863) +- Changed `NetworkManager.ConnectedClients` can now be accessed by both server and clients. (#2863) +- Changed `NetworkManager.ConnectedClientsList` can now be accessed by both server and clients. (#2863) +- Changed `NetworkTransform` defaults to owner authoritative when connected to a distributed authority session. (#2863) +- Changed `NetworkVariable` defaults to owner write and everyone read permissions when connected to a distributed authority session (even if declared with server read or write permissions). (#2863) +- Changed `NetworkObject` no longer implements the `MonoBehaviour.Update` method in order to determine whether a `NetworkObject` instance has been migrated to a different scene. Instead, only `NetworkObjects` with the `SceneMigrationSynchronization` property set will be updated internally during the `NetworkUpdateStage.PostLateUpdate` by `NetworkManager`. (#2863) +- Changed `NetworkManager` inspector view layout where properties are now organized by category. (#2863) - Changed `NetworkTransform` to now use `NetworkTransformMessage` as opposed to named messages for NetworkTransformState updates. (#2810) - Changed `CustomMessageManager` so it no longer attempts to register or "unregister" a null or empty string and will log an error if this condition occurs. (#2807) diff --git a/com.unity.netcode.gameobjects/package.json b/com.unity.netcode.gameobjects/package.json index 23f318d8be..df8a300be1 100644 --- a/com.unity.netcode.gameobjects/package.json +++ b/com.unity.netcode.gameobjects/package.json @@ -2,7 +2,7 @@ "name": "com.unity.netcode.gameobjects", "displayName": "Netcode for GameObjects", "description": "Netcode for GameObjects is a high-level netcode SDK that provides networking capabilities to GameObject/MonoBehaviour workflows within Unity and sits on top of underlying transport layer.", - "version": "2.0.0-exp.1", + "version": "2.0.0-exp.2", "unity": "6000.0", "dependencies": { "com.unity.nuget.mono-cecil": "1.11.4",