com.unity.netcode.gameobjects@2.2.0
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.2.0] - 2024-12-12 ### Added - Added `NetworkObject.OwnershipStatus.SessionOwner` to allow Network Objects to be distributable and only owned by the Session Owner. This flag will override all other `OwnershipStatus` flags. (#3175) - Added `UnityTransport.GetEndpoint` method to provide a way to obtain `NetworkEndpoint` information of a connection via client identifier. (#3130) - Added `NetworkTransport.OnEarlyUpdate` and `NetworkTransport.OnPostLateUpdate` methods to provide more control over handling transport related events at the start and end of each frame. (#3113) ### Fixed - Fixed issue where the server, host, or session owner would not populate the in-scene place `NetworkObject` table if the scene was loaded prior to starting the `NetworkManager`. (#3177) - Fixed issue where the `NetworkObjectIdHash` value could be incorrect when entering play mode while still in prefab edit mode with pending changes and using MPPM. (#3162) - Fixed issue where a sever only `NetworkManager` instance would spawn the actual `NetworkPrefab`'s `GameObject` as opposed to creating an instance of it. (#3160) - Fixed issue where only the session owner (as opposed to all clients) would handle spawning prefab overrides properly when using a distributed authority network topology. (#3160) - Fixed issue where an exception was thrown when calling `NetworkManager.Shutdown` after calling `UnityTransport.Shutdown`. (#3118) - Fixed issue where `NetworkList` properties on in-scene placed `NetworkObject`s could cause small memory leaks when entering playmode. (#3147) - Fixed in-scene `NertworkObject` synchronization issue when loading a scene with currently connected clients connected to a session created by a `NetworkManager` started as a server (i.e. not as a host). (#3133) - Fixed issue where a `NetworkManager` started as a server would not add itself as an observer to in-scene placed `NetworkObject`s instantiated and spawned by a scene loading event. (#3133) - Fixed issue where spawning a player using `NetworkObject.InstantiateAndSpawn` or `NetworkSpawnManager.InstantiateAndSpawn` would not update the `NetworkSpawnManager.PlayerObjects` or assign the newly spawned player to the `NetworkClient.PlayerObject`. (#3122) - Fixed issue where queued UnitTransport (NetworkTransport) message batches were being sent on the next frame. They are now sent at the end of the frame during `PostLateUpdate`. (#3113) - Fixed issue where `NotOwnerRpcTarget` or `OwnerRpcTarget` were not using their replacements `NotAuthorityRpcTarget` and `AuthorityRpcTarget` which would invoke a warning. (#3111) - Fixed issue where client is removed as an observer from spawned objects when their player instance is despawned. (#3110) - Fixed issue where `NetworkAnimator` would statically allocate write buffer space for `Animator` parameters that could cause a write error if the number of parameters exceeded the space allocated. (#3108) ### Changed - In-scene placed `NetworkObject`s have been made distributable when balancing object distribution after a connection event. (#3175) - Optimised `NetworkVariable` and `NetworkTransform` related packets when in Distributed Authority mode. - The Debug Simulator section of the Unity Transport component was removed. This section was not functional anymore and users are now recommended to use the more featureful [Network Simulator](https://docs-multiplayer.unity3d.com/tools/current/tools-network-simulator/) tool from the Multiplayer Tools package instead. (#3121)
This commit is contained in:
@@ -13,6 +13,14 @@ namespace Unity.Netcode
|
||||
[Serializable]
|
||||
public class NetworkConfig
|
||||
{
|
||||
// Clamp spawn time outs to prevent dropping messages during scene events
|
||||
// Note: The legacy versions of NGO defaulted to 1s which was too low. As
|
||||
// well, the SpawnTimeOut is now being clamped to within this recommended
|
||||
// range both via UI and when NetworkManager is validated.
|
||||
internal const float MinSpawnTimeout = 10.0f;
|
||||
// Clamp spawn time outs to no more than 1 hour (really that is a bit high)
|
||||
internal const float MaxSpawnTimeout = 3600.0f;
|
||||
|
||||
/// <summary>
|
||||
/// The protocol version. Different versions doesn't talk to each other.
|
||||
/// </summary>
|
||||
@@ -132,6 +140,8 @@ namespace Unity.Netcode
|
||||
/// The amount of time a message will be held (deferred) if the destination NetworkObject needed to process the message doesn't exist yet. If the NetworkObject is not spawned within this time period, all deferred messages for that NetworkObject will be dropped.
|
||||
/// </summary>
|
||||
[Tooltip("The amount of time a message will be held (deferred) if the destination NetworkObject needed to process the message doesn't exist yet. If the NetworkObject is not spawned within this time period, all deferred messages for that NetworkObject will be dropped.")]
|
||||
|
||||
[Range(MinSpawnTimeout, MaxSpawnTimeout)]
|
||||
public float SpawnTimeout = 10f;
|
||||
|
||||
/// <summary>
|
||||
@@ -176,6 +186,21 @@ namespace Unity.Netcode
|
||||
[Tooltip("Enable (default) if you want to profile network messages with development builds and defaults to being disabled in release builds. When disabled, network messaging profiling will be disabled in development builds.")]
|
||||
public bool NetworkProfilingMetrics = true;
|
||||
|
||||
/// <summary>
|
||||
/// Invoked by <see cref="NetworkManager"/> when it is validated.
|
||||
/// </summary>
|
||||
/// <remarks>
|
||||
/// Used to check for potential legacy values that have already been serialized and/or
|
||||
/// runtime modifications to a property outside of the recommended range.
|
||||
/// For each property checked below, provide a brief description of the reason.
|
||||
/// </remarks>
|
||||
internal void OnValidate()
|
||||
{
|
||||
// Legacy NGO versions defaulted this value to 1 second that has since been determiend
|
||||
// any range less than 10 seconds can lead to dropped messages during scene events.
|
||||
SpawnTimeout = Mathf.Clamp(SpawnTimeout, MinSpawnTimeout, MaxSpawnTimeout);
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Returns a base64 encoded version of the configuration
|
||||
/// </summary>
|
||||
|
||||
58
Runtime/Configuration/SessionConfig.cs
Normal file
58
Runtime/Configuration/SessionConfig.cs
Normal file
@@ -0,0 +1,58 @@
|
||||
namespace Unity.Netcode
|
||||
{
|
||||
internal class SessionConfig
|
||||
{
|
||||
/// <summary>
|
||||
/// The running list of session versions
|
||||
/// </summary>
|
||||
public const uint NoFeatureCompatibility = 0;
|
||||
public const uint BypassFeatureCompatible = 1;
|
||||
public const uint ServerDistributionCompatible = 2;
|
||||
|
||||
// The most current session version (!!!!set this when you increment!!!!!)
|
||||
public static uint PackageSessionVersion => ServerDistributionCompatible;
|
||||
|
||||
internal uint SessionVersion;
|
||||
|
||||
public bool ServiceSideDistribution;
|
||||
|
||||
|
||||
/// <summary>
|
||||
/// Service to client
|
||||
/// Set when the client receives a <see cref="ConnectionApprovedMessage"/>
|
||||
/// </summary>
|
||||
/// <param name="serviceConfig">the session's settings</param>
|
||||
public SessionConfig(ServiceConfig serviceConfig)
|
||||
{
|
||||
SessionVersion = serviceConfig.SessionVersion;
|
||||
ServiceSideDistribution = serviceConfig.ServerRedistribution;
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Can be used to directly set the version.
|
||||
/// </summary>
|
||||
/// <remarks>
|
||||
/// If a client connects that does not support session configuration then
|
||||
/// this will be invoked. The default values set in the constructor should
|
||||
/// assume that no features are available.
|
||||
/// Can also be used for mock/integration testing version handling.
|
||||
/// </remarks>
|
||||
/// <param name="version">version to set</param>
|
||||
public SessionConfig(uint version)
|
||||
{
|
||||
SessionVersion = version;
|
||||
ServiceSideDistribution = false;
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Client to Service
|
||||
/// Default package constructor set when <see cref="NetworkManager.Initialize(bool)"/> is invoked.
|
||||
/// </summary>
|
||||
public SessionConfig()
|
||||
{
|
||||
// The current
|
||||
SessionVersion = PackageSessionVersion;
|
||||
ServiceSideDistribution = false;
|
||||
}
|
||||
}
|
||||
}
|
||||
2
Runtime/Configuration/SessionConfig.cs.meta
Normal file
2
Runtime/Configuration/SessionConfig.cs.meta
Normal file
@@ -0,0 +1,2 @@
|
||||
fileFormatVersion: 2
|
||||
guid: e0512e5a3e1dc484bbbf98c03a574645
|
||||
Reference in New Issue
Block a user