com.unity.netcode.gameobjects@1.0.0-pre.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). ## [1.0.0-pre.4] - 2021-01-04 ### Added - Added `com.unity.modules.physics` and `com.unity.modules.physics2d` package dependencies (#1565) ### Removed - Removed `com.unity.modules.ai` package dependency (#1565) - Removed `FixedQueue`, `StreamExtensions`, `TypeExtensions` (#1398) ### Fixed - Fixed in-scene NetworkObjects that are moved into the DDOL scene not getting restored to their original active state (enabled/disabled) after a full scene transition (#1354) - Fixed invalid IL code being generated when using `this` instead of `this ref` for the FastBufferReader/FastBufferWriter parameter of an extension method. (#1393) - Fixed an issue where if you are running as a server (not host) the LoadEventCompleted and UnloadEventCompleted events would fire early by the NetworkSceneManager (#1379) - Fixed a runtime error when sending an array of an INetworkSerializable type that's implemented as a struct (#1402) - NetworkConfig will no longer throw an OverflowException in GetConfig() when ForceSamePrefabs is enabled and the number of prefabs causes the config blob size to exceed 1300 bytes. (#1385) - Fixed NetworkVariable not calling NetworkSerialize on INetworkSerializable types (#1383) - Fixed NullReferenceException on ImportReferences call in NetworkBehaviourILPP (#1434) - Fixed NetworkObjects not being despawned before they are destroyed during shutdown for client, host, and server instances. (#1390) - Fixed KeyNotFound exception when removing ownership of a newly spawned NetworkObject that is already owned by the server. (#1500) - Fixed NetworkManager.LocalClient not being set when starting as a host. (#1511) - Fixed a few memory leak cases when shutting down NetworkManager during Incoming Message Queue processing. (#1323) ### Changed - The SDK no longer limits message size to 64k. (The transport may still impose its own limits, but the SDK no longer does.) (#1384) - Updated com.unity.collections to 1.1.0 (#1451)
This commit is contained in:
@@ -73,6 +73,9 @@ namespace Unity.Netcode
|
||||
}
|
||||
}
|
||||
|
||||
private bool m_ShuttingDown;
|
||||
private bool m_StopProcessingMessages;
|
||||
|
||||
private class NetworkManagerHooks : INetworkHooks
|
||||
{
|
||||
private NetworkManager m_NetworkManager;
|
||||
@@ -116,7 +119,7 @@ namespace Unity.Netcode
|
||||
|
||||
public bool OnVerifyCanSend(ulong destinationId, Type messageType, NetworkDelivery delivery)
|
||||
{
|
||||
return true;
|
||||
return !m_NetworkManager.m_StopProcessingMessages;
|
||||
}
|
||||
|
||||
public bool OnVerifyCanReceive(ulong senderId, Type messageType)
|
||||
@@ -134,7 +137,7 @@ namespace Unity.Netcode
|
||||
return false;
|
||||
}
|
||||
|
||||
return true;
|
||||
return !m_NetworkManager.m_StopProcessingMessages;
|
||||
}
|
||||
}
|
||||
|
||||
@@ -333,6 +336,9 @@ namespace Unity.Netcode
|
||||
/// </summary>
|
||||
public bool IsConnectedClient { get; internal set; }
|
||||
|
||||
|
||||
public bool ShutdownInProgress { get { return m_ShuttingDown; } }
|
||||
|
||||
/// <summary>
|
||||
/// The callback to invoke once a client connects. This callback is only ran on the server and on the local client that connects.
|
||||
/// </summary>
|
||||
@@ -345,8 +351,6 @@ namespace Unity.Netcode
|
||||
/// </summary>
|
||||
public event Action<ulong> OnClientDisconnectCallback = null;
|
||||
|
||||
internal void InvokeOnClientDisconnectCallback(ulong clientId) => OnClientDisconnectCallback?.Invoke(clientId);
|
||||
|
||||
/// <summary>
|
||||
/// The callback to invoke once the server is ready
|
||||
/// </summary>
|
||||
@@ -556,8 +560,6 @@ namespace Unity.Netcode
|
||||
SnapshotSystem = null;
|
||||
}
|
||||
|
||||
SnapshotSystem = new SnapshotSystem(this);
|
||||
|
||||
if (server)
|
||||
{
|
||||
NetworkTimeSystem = NetworkTimeSystem.ServerTimeSystem();
|
||||
@@ -570,6 +572,8 @@ namespace Unity.Netcode
|
||||
NetworkTickSystem = new NetworkTickSystem(NetworkConfig.TickRate, 0, 0);
|
||||
NetworkTickSystem.Tick += OnNetworkManagerTick;
|
||||
|
||||
SnapshotSystem = new SnapshotSystem(this, NetworkConfig, NetworkTickSystem);
|
||||
|
||||
this.RegisterNetworkUpdate(NetworkUpdateStage.PreUpdate);
|
||||
|
||||
// This is used to remove entries not needed or invalid
|
||||
@@ -976,7 +980,7 @@ namespace Unity.Netcode
|
||||
// Note that this gets also called manually by OnSceneUnloaded and OnApplicationQuit
|
||||
private void OnDestroy()
|
||||
{
|
||||
Shutdown();
|
||||
ShutdownInternal();
|
||||
|
||||
UnityEngine.SceneManagement.SceneManager.sceneUnloaded -= OnSceneUnloaded;
|
||||
|
||||
@@ -996,13 +1000,30 @@ namespace Unity.Netcode
|
||||
/// Globally shuts down the library.
|
||||
/// Disconnects clients if connected and stops server if running.
|
||||
/// </summary>
|
||||
public void Shutdown()
|
||||
/// <param name="discardMessageQueue">
|
||||
/// If false, any messages that are currently in the incoming queue will be handled,
|
||||
/// and any messages in the outgoing queue will be sent, before the shutdown is processed.
|
||||
/// If true, NetworkManager will shut down immediately, and any unprocessed or unsent messages
|
||||
/// will be discarded.
|
||||
/// </param>
|
||||
public void Shutdown(bool discardMessageQueue = false)
|
||||
{
|
||||
if (NetworkLog.CurrentLogLevel <= LogLevel.Developer)
|
||||
{
|
||||
NetworkLog.LogInfo(nameof(Shutdown));
|
||||
}
|
||||
|
||||
m_ShuttingDown = true;
|
||||
m_StopProcessingMessages = discardMessageQueue;
|
||||
}
|
||||
|
||||
internal void ShutdownInternal()
|
||||
{
|
||||
if (NetworkLog.CurrentLogLevel <= LogLevel.Developer)
|
||||
{
|
||||
NetworkLog.LogInfo(nameof(ShutdownInternal));
|
||||
}
|
||||
|
||||
if (IsServer)
|
||||
{
|
||||
// make sure all messages are flushed before transport disconnect clients
|
||||
@@ -1075,11 +1096,15 @@ namespace Unity.Netcode
|
||||
MessagingSystem = null;
|
||||
}
|
||||
|
||||
NetworkConfig.NetworkTransport.OnTransportEvent -= HandleRawTransportPoll;
|
||||
if (NetworkConfig?.NetworkTransport != null)
|
||||
{
|
||||
NetworkConfig.NetworkTransport.OnTransportEvent -= HandleRawTransportPoll;
|
||||
}
|
||||
|
||||
if (SpawnManager != null)
|
||||
{
|
||||
SpawnManager.DestroyNonSceneObjects();
|
||||
SpawnManager.CleanupAllTriggers();
|
||||
SpawnManager.DespawnAndDestroyNetworkObjects();
|
||||
SpawnManager.ServerResetShudownStateForSceneObjects();
|
||||
|
||||
SpawnManager = null;
|
||||
@@ -1114,6 +1139,8 @@ namespace Unity.Netcode
|
||||
m_TransportIdToClientIdMap.Clear();
|
||||
|
||||
IsListening = false;
|
||||
m_ShuttingDown = false;
|
||||
m_StopProcessingMessages = false;
|
||||
}
|
||||
|
||||
// INetworkUpdateSystem
|
||||
@@ -1167,6 +1194,11 @@ namespace Unity.Netcode
|
||||
return;
|
||||
}
|
||||
|
||||
if (m_ShuttingDown && m_StopProcessingMessages)
|
||||
{
|
||||
return;
|
||||
}
|
||||
|
||||
// Only update RTT here, server time is updated by time sync messages
|
||||
var reset = NetworkTimeSystem.Advance(Time.deltaTime);
|
||||
if (reset)
|
||||
@@ -1183,9 +1215,18 @@ namespace Unity.Netcode
|
||||
|
||||
private void OnNetworkPostLateUpdate()
|
||||
{
|
||||
MessagingSystem.ProcessSendQueues();
|
||||
NetworkMetrics.DispatchFrame();
|
||||
|
||||
if (!m_ShuttingDown || !m_StopProcessingMessages)
|
||||
{
|
||||
MessagingSystem.ProcessSendQueues();
|
||||
NetworkMetrics.DispatchFrame();
|
||||
}
|
||||
SpawnManager.CleanupStaleTriggers();
|
||||
|
||||
if (m_ShuttingDown)
|
||||
{
|
||||
ShutdownInternal();
|
||||
}
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
@@ -1312,6 +1353,8 @@ namespace Unity.Netcode
|
||||
#endif
|
||||
clientId = TransportIdToClientId(clientId);
|
||||
|
||||
OnClientDisconnectCallback?.Invoke(clientId);
|
||||
|
||||
m_TransportIdToClientIdMap.Remove(transportId);
|
||||
m_ClientIdToTransportIdMap.Remove(clientId);
|
||||
|
||||
@@ -1328,9 +1371,6 @@ namespace Unity.Netcode
|
||||
{
|
||||
Shutdown();
|
||||
}
|
||||
|
||||
OnClientDisconnectCallback?.Invoke(clientId);
|
||||
|
||||
#if DEVELOPMENT_BUILD || UNITY_EDITOR
|
||||
s_TransportDisconnect.End();
|
||||
#endif
|
||||
@@ -1596,6 +1636,7 @@ namespace Unity.Netcode
|
||||
}
|
||||
else // Server just adds itself as an observer to all spawned NetworkObjects
|
||||
{
|
||||
LocalClient = client;
|
||||
SpawnManager.UpdateObservedNetworkObjects(ownerClientId);
|
||||
InvokeOnClientConnectedCallback(ownerClientId);
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user