Skip to content

Commit 40b3c20

Browse files
committed
Ensure DeferDespawn tick is always reset
1 parent cf62c80 commit 40b3c20

File tree

2 files changed

+8
-16
lines changed

2 files changed

+8
-16
lines changed

com.unity.netcode.gameobjects/Runtime/Spawning/NetworkSpawnManager.cs

Lines changed: 5 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -1582,19 +1582,16 @@ internal void OnDespawnObject(NetworkObject networkObject, bool destroyGameObjec
15821582
}
15831583
}
15841584

1585-
if (networkObject.IsSceneObject == false && destroyGameObject == false)
1586-
{
1587-
// DANGO-TODO: Check that this is still a valid restriction
1588-
Debug.LogWarning("Only Scene Objects are valid to not be destroyed when despawned");
1589-
}
1590-
15911585
if (m_TargetClientIds.Count > 0 && !NetworkManager.ShutdownInProgress)
15921586
{
1587+
// DANGO-TODO: Reconfigure Client-side object destruction on despawn
1588+
bool destroyOnClient = !(networkObject.IsSceneObject == false && destroyGameObject == false);
1589+
15931590
var message = new DestroyObjectMessage
15941591
{
15951592
NetworkObjectId = networkObject.NetworkObjectId,
15961593
DeferredDespawnTick = networkObject.DeferredDespawnTick,
1597-
DestroyGameObject = networkObject.IsSceneObject != false ? destroyGameObject : true,
1594+
DestroyGameObject = destroyOnClient,
15981595
IsTargetedDestroy = false,
15991596
IsDistributedAuthority = distributedAuthority,
16001597
};
@@ -1607,6 +1604,7 @@ internal void OnDespawnObject(NetworkObject networkObject, bool destroyGameObjec
16071604
}
16081605

16091606
networkObject.IsSpawned = false;
1607+
networkObject.DeferredDespawnTick = 0;
16101608

16111609
if (SpawnedObjects.Remove(networkObject.NetworkObjectId))
16121610
{

testproject/Assets/Tests/Runtime/NetworkSceneManager/InScenePlacedNetworkObjectTests.cs

Lines changed: 3 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -56,7 +56,7 @@ protected override bool CanStartServerAndClients()
5656
public enum DespawnMode
5757
{
5858
Despawn,
59-
DeferredDespawn,
59+
DeferDespawn,
6060
}
6161

6262
/// <summary>
@@ -69,9 +69,9 @@ public enum DespawnMode
6969
[UnityTest]
7070
public IEnumerator InSceneNetworkObjectSynchAndSpawn([Values] DespawnMode despawnMode)
7171
{
72-
if (!m_DistributedAuthority && despawnMode == DespawnMode.DeferredDespawn)
72+
if (!m_DistributedAuthority && despawnMode == DespawnMode.DeferDespawn)
7373
{
74-
Assert.Ignore("Deferred Despawn is only valid with Distributed Authority mode.");
74+
Assert.Ignore($"Test ignored as DeferDespawn is only valid with Distributed Authority mode.");
7575
}
7676

7777
NetworkObjectTestComponent.VerboseDebug = true;
@@ -150,12 +150,6 @@ public IEnumerator InSceneNetworkObjectSynchAndSpawn([Values] DespawnMode despaw
150150
yield return WaitForConditionOrTimeOut(() => NetworkObjectTestComponent.SpawnedInstances.Count == clientCount);
151151
AssertOnTimeout($"Timed out waiting for all in-scene instances to be spawned! Current spawned count: {NetworkObjectTestComponent.SpawnedInstances.Count()} | Expected spawn count: {clientCount}");
152152

153-
if (despawnMode == DespawnMode.DeferredDespawn)
154-
{
155-
// TODO: Check if this is the expected behavior
156-
serverObject.DeferredDespawnTick = 0;
157-
}
158-
159153
// Test NetworkHide on the first client
160154
var firstClientId = m_ClientNetworkManagers[0].LocalClientId;
161155

0 commit comments

Comments
 (0)