com.unity.netcode.gameobjects@2.0.0-exp.4
The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/) and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html). Additional documentation and release notes are available at [Multiplayer Documentation](https://docs-multiplayer.unity3d.com). ## [2.0.0-exp.4] - 2024-05-31 ### Added - Added `NetworkRigidbodyBase.AttachToFixedJoint` and `NetworkRigidbodyBase.DetachFromFixedJoint` to replace parenting for rigid bodies that have `NetworkRigidbodyBase.UseRigidBodyForMotion` enabled. (#2933) - Added `NetworkBehaviour.OnNetworkPreSpawn` and `NetworkBehaviour.OnNetworkPostSpawn` methods that provide the ability to handle pre and post spawning actions during the `NetworkObject` spawn sequence. (#2912) - Added a client-side only `NetworkBehaviour.OnNetworkSessionSynchronized` convenience method that is invoked on all `NetworkBehaviour`s after a newly joined client has finished synchronizing with the network session in progress. (#2912) - Added `NetworkBehaviour.OnInSceneObjectsSpawned` convenience method that is invoked when all in-scene `NetworkObject`s have been spawned after a scene has been loaded or upon a host or server starting. (#2912) ### Fixed - Fixed issue where non-authoritative rigid bodies with `NetworkRigidbodyBase.UseRigidBodyForMotion` enabled would constantly log errors about the renderTime being before `StartTimeConsumed`. (#2933) - Fixed issue where in-scene placed NetworkObjects could be destroyed if a client disconnects early and/or before approval. (#2924) - Fixed issue where a `NetworkObject` component's associated `NetworkBehaviour` components would not be detected if scene loading is disabled in the editor and the currently loaded scene has in-scene placed `NetworkObject`s. (#2912) - Fixed issue where an in-scene placed `NetworkObject` with `NetworkTransform` that is also parented under a `GameObject` would not properly synchronize when the parent `GameObject` had a world space position other than 0,0,0. (#2898) ### Changed - Change all the access modifiers of test class from Public to Internal (#2930) - Changed messages are now sorted by enum values as opposed to ordinally sorting the messages by their type name. (#2929) - Changed `NetworkClient.SessionModeTypes` to `NetworkClient.NetworkTopologyTypes`. (#2875) - Changed `NetworkClient.SessionModeType` to `NetworkClient.NetworkTopologyType`. (#2875) - Changed `NetworkConfig.SessionMode` to `NeworkConfig.NetworkTopology`. (#2875)
This commit is contained in:
@@ -8,6 +8,7 @@ using UnityEditor;
|
||||
#endif
|
||||
using UnityEngine.SceneManagement;
|
||||
using Debug = UnityEngine.Debug;
|
||||
using Unity.Netcode.Components;
|
||||
|
||||
namespace Unity.Netcode
|
||||
{
|
||||
@@ -43,7 +44,7 @@ namespace Unity.Netcode
|
||||
{
|
||||
get
|
||||
{
|
||||
return NetworkConfig.SessionMode == SessionModeTypes.DistributedAuthority;
|
||||
return NetworkConfig.NetworkTopology == NetworkTopologyTypes.DistributedAuthority;
|
||||
}
|
||||
}
|
||||
|
||||
@@ -177,6 +178,45 @@ namespace Unity.Netcode
|
||||
}
|
||||
}
|
||||
|
||||
internal Dictionary<ulong, NetworkTransform> NetworkTransformUpdate = new Dictionary<ulong, NetworkTransform>();
|
||||
#if COM_UNITY_MODULES_PHYSICS
|
||||
internal Dictionary<ulong, NetworkTransform> NetworkTransformFixedUpdate = new Dictionary<ulong, NetworkTransform>();
|
||||
#endif
|
||||
|
||||
internal void NetworkTransformRegistration(NetworkTransform networkTransform, bool forUpdate = true, bool register = true)
|
||||
{
|
||||
if (forUpdate)
|
||||
{
|
||||
if (register)
|
||||
{
|
||||
if (!NetworkTransformUpdate.ContainsKey(networkTransform.NetworkObjectId))
|
||||
{
|
||||
NetworkTransformUpdate.Add(networkTransform.NetworkObjectId, networkTransform);
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
NetworkTransformUpdate.Remove(networkTransform.NetworkObjectId);
|
||||
}
|
||||
}
|
||||
#if COM_UNITY_MODULES_PHYSICS
|
||||
else
|
||||
{
|
||||
if (register)
|
||||
{
|
||||
if (!NetworkTransformFixedUpdate.ContainsKey(networkTransform.NetworkObjectId))
|
||||
{
|
||||
NetworkTransformFixedUpdate.Add(networkTransform.NetworkObjectId, networkTransform);
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
NetworkTransformFixedUpdate.Remove(networkTransform.NetworkObjectId);
|
||||
}
|
||||
}
|
||||
#endif
|
||||
}
|
||||
|
||||
public void NetworkUpdate(NetworkUpdateStage updateStage)
|
||||
{
|
||||
switch (updateStage)
|
||||
@@ -192,11 +232,36 @@ namespace Unity.Netcode
|
||||
MessageManager.CleanupDisconnectedClients();
|
||||
}
|
||||
break;
|
||||
#if COM_UNITY_MODULES_PHYSICS
|
||||
case NetworkUpdateStage.FixedUpdate:
|
||||
{
|
||||
foreach (var networkTransformEntry in NetworkTransformFixedUpdate)
|
||||
{
|
||||
if (networkTransformEntry.Value.gameObject.activeInHierarchy && networkTransformEntry.Value.IsSpawned)
|
||||
{
|
||||
networkTransformEntry.Value.OnFixedUpdate();
|
||||
}
|
||||
}
|
||||
}
|
||||
break;
|
||||
#endif
|
||||
case NetworkUpdateStage.PreUpdate:
|
||||
{
|
||||
NetworkTimeSystem.UpdateTime();
|
||||
}
|
||||
break;
|
||||
case NetworkUpdateStage.PreLateUpdate:
|
||||
{
|
||||
// Non-physics based non-authority NetworkTransforms update their states after all other components
|
||||
foreach (var networkTransformEntry in NetworkTransformUpdate)
|
||||
{
|
||||
if (networkTransformEntry.Value.gameObject.activeInHierarchy && networkTransformEntry.Value.IsSpawned)
|
||||
{
|
||||
networkTransformEntry.Value.OnUpdate();
|
||||
}
|
||||
}
|
||||
}
|
||||
break;
|
||||
case NetworkUpdateStage.PostLateUpdate:
|
||||
{
|
||||
// Handle deferred despawning
|
||||
@@ -942,6 +1007,10 @@ namespace Unity.Netcode
|
||||
|
||||
internal void Initialize(bool server)
|
||||
{
|
||||
#if COM_UNITY_MODULES_PHYSICS
|
||||
NetworkTransformFixedUpdate.Clear();
|
||||
#endif
|
||||
NetworkTransformUpdate.Clear();
|
||||
|
||||
//DANGOEXP TODO: Remove this before finalizing the experimental release
|
||||
NetworkConfig.AutoSpawnPlayerPrefabClientSide = DistributedAuthorityMode;
|
||||
@@ -978,7 +1047,11 @@ namespace Unity.Netcode
|
||||
}
|
||||
|
||||
this.RegisterNetworkUpdate(NetworkUpdateStage.EarlyUpdate);
|
||||
#if COM_UNITY_MODULES_PHYSICS
|
||||
this.RegisterNetworkUpdate(NetworkUpdateStage.FixedUpdate);
|
||||
#endif
|
||||
this.RegisterNetworkUpdate(NetworkUpdateStage.PreUpdate);
|
||||
this.RegisterNetworkUpdate(NetworkUpdateStage.PreLateUpdate);
|
||||
this.RegisterNetworkUpdate(NetworkUpdateStage.PostLateUpdate);
|
||||
|
||||
// ComponentFactory needs to set its defaults next
|
||||
@@ -994,11 +1067,17 @@ namespace Unity.Netcode
|
||||
MessageManager.Hook(new NetworkManagerHooks(this));
|
||||
|
||||
#if DEVELOPMENT_BUILD || UNITY_EDITOR
|
||||
MessageManager.Hook(new ProfilingHooks());
|
||||
if (NetworkConfig.NetworkProfilingMetrics)
|
||||
{
|
||||
MessageManager.Hook(new ProfilingHooks());
|
||||
}
|
||||
#endif
|
||||
|
||||
#if MULTIPLAYER_TOOLS
|
||||
MessageManager.Hook(new MetricHooks(this));
|
||||
if (NetworkConfig.NetworkMessageMetrics)
|
||||
{
|
||||
MessageManager.Hook(new MetricHooks(this));
|
||||
}
|
||||
#endif
|
||||
|
||||
// Assures there is a server message queue available
|
||||
|
||||
Reference in New Issue
Block a user