Skip to content

Commit 5d1918c

Browse files
fix and update
Removing the previously removed post spawn invocation from the common spawn method (missed when merging). Renaming the local spawn methods to reflect the context of the local spawn (i.e. authority is the first to spawn and then notify where non-authority is invoked by the authority's CreateObjectMessage). It will help keep the context clear (possible area to merge into one with a flag to determine if it is an authority or non-authority spawn action).
1 parent 22728b7 commit 5d1918c

File tree

4 files changed

+13
-11
lines changed

4 files changed

+13
-11
lines changed

com.unity.netcode.gameobjects/Runtime/Connection/NetworkConnectionManager.cs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -803,7 +803,7 @@ internal void HandleConnectionApproval(ulong ownerClientId, NetworkManager.Conne
803803
: NetworkManager.SpawnManager.GetNetworkObjectToSpawn(NetworkManager.NetworkConfig.PlayerPrefab.GetComponent<NetworkObject>().GlobalObjectIdHash, ownerClientId, response.Position ?? null, response.Rotation ?? null);
804804

805805
// Spawn the player NetworkObject locally
806-
NetworkManager.SpawnManager.SpawnNetworkObjectLocally(
806+
NetworkManager.SpawnManager.AuthorityLocalSpawn(
807807
playerObject,
808808
NetworkManager.SpawnManager.GetNetworkObjectId(),
809809
sceneObject: false,

com.unity.netcode.gameobjects/Runtime/Core/NetworkObject.cs

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1833,7 +1833,7 @@ internal void SpawnInternal(bool destroyWithScene, ulong ownerClientId, bool pla
18331833
}
18341834
}
18351835

1836-
NetworkManager.SpawnManager.SpawnNetworkObjectLocally(this, NetworkManager.SpawnManager.GetNetworkObjectId(), IsSceneObject.HasValue && IsSceneObject.Value, playerObject, ownerClientId, destroyWithScene);
1836+
NetworkManager.SpawnManager.AuthorityLocalSpawn(this, NetworkManager.SpawnManager.GetNetworkObjectId(), IsSceneObject.HasValue && IsSceneObject.Value, playerObject, ownerClientId, destroyWithScene);
18371837

18381838
if ((NetworkManager.DistributedAuthorityMode && NetworkManager.DAHost) || (!NetworkManager.DistributedAuthorityMode && NetworkManager.IsServer))
18391839
{
@@ -3328,9 +3328,9 @@ internal static NetworkObject AddSceneObject(in SceneObject sceneObject, FastBuf
33283328
throw new SpawnStateException($"[{networkObject.name}] Object-{networkObject.NetworkObjectId} is already spawned!");
33293329
}
33303330

3331-
// Invoke the version of this method that takes a SceneObject to avoid invoking pre-spawn
3331+
// Invoke the non-authority local spawn method
33323332
// (It also invokes post spawn and handles processing derferred messages)
3333-
networkManager.SpawnManager.SpawnNetworkObjectLocally(networkObject, sceneObject, sceneObject.DestroyWithScene);
3333+
networkManager.SpawnManager.NonAuthorityLocalSpawn(networkObject, sceneObject, sceneObject.DestroyWithScene);
33343334

33353335
if (sceneObject.SyncObservers)
33363336
{

com.unity.netcode.gameobjects/Runtime/SceneManagement/NetworkSceneManager.cs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1823,7 +1823,7 @@ private void OnSessionOwnerLoadedScene(uint sceneEventId, Scene scene)
18231823
if (!keyValuePairBySceneHandle.Value.IsPlayerObject)
18241824
{
18251825
// All in-scene placed NetworkObjects default to being owned by the server
1826-
NetworkManager.SpawnManager.SpawnNetworkObjectLocally(keyValuePairBySceneHandle.Value,
1826+
NetworkManager.SpawnManager.AuthorityLocalSpawn(keyValuePairBySceneHandle.Value,
18271827
NetworkManager.SpawnManager.GetNetworkObjectId(), true, false, NetworkManager.LocalClientId, true);
18281828
}
18291829
}

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

Lines changed: 8 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -1041,7 +1041,7 @@ internal NetworkObject CreateLocalNetworkObject(NetworkObject.SceneObject sceneO
10411041
/// Distributed Authority:
10421042
/// DAHost client and standard DA clients invoke this method.
10431043
/// </summary>
1044-
internal void SpawnNetworkObjectLocally(NetworkObject networkObject, ulong networkId, bool sceneObject, bool playerObject, ulong ownerClientId, bool destroyWithScene)
1044+
internal void AuthorityLocalSpawn(NetworkObject networkObject, ulong networkId, bool sceneObject, bool playerObject, ulong ownerClientId, bool destroyWithScene)
10451045
{
10461046
if (networkObject == null)
10471047
{
@@ -1106,6 +1106,11 @@ internal void SpawnNetworkObjectLocally(NetworkObject networkObject, ulong netwo
11061106
}
11071107

11081108
SpawnNetworkObjectLocallyCommon(networkObject, networkId, sceneObject, playerObject, ownerClientId, destroyWithScene);
1109+
1110+
// When done spawning invoke post spawn
1111+
networkObject.InvokeBehaviourNetworkPostSpawn();
1112+
1113+
// No need to check for deferred messages since this method is used for authority spawning.
11091114
}
11101115

11111116
/// <summary>
@@ -1115,7 +1120,7 @@ internal void SpawnNetworkObjectLocally(NetworkObject networkObject, ulong netwo
11151120
/// <remarks>
11161121
/// IMPORTANT: Pre spawn methods need to be invoked from within <see cref="NetworkObject.AddSceneObject"/>.
11171122
/// </remarks>
1118-
internal void SpawnNetworkObjectLocally(NetworkObject networkObject, in NetworkObject.SceneObject sceneObject, bool destroyWithScene)
1123+
internal void NonAuthorityLocalSpawn(NetworkObject networkObject, in NetworkObject.SceneObject sceneObject, bool destroyWithScene)
11191124
{
11201125
if (networkObject == null)
11211126
{
@@ -1240,9 +1245,6 @@ internal void SpawnNetworkObjectLocallyCommon(NetworkObject networkObject, ulong
12401245
{
12411246
networkObject.PrefabGlobalObjectIdHash = networkObject.InScenePlacedSourceGlobalObjectIdHash;
12421247
}
1243-
1244-
// It is now ok to invoke NetworkBehaviour.OnPostSpawn methods
1245-
networkObject.InvokeBehaviourNetworkPostSpawn();
12461248
}
12471249

12481250
internal Dictionary<ulong, NetworkObject> NetworkObjectsToSynchronizeSceneChanges = new Dictionary<ulong, NetworkObject>();
@@ -1526,7 +1528,7 @@ internal void ServerSpawnSceneObjectsOnStartSweep()
15261528
ownerId = NetworkManager.LocalClientId;
15271529
}
15281530

1529-
SpawnNetworkObjectLocally(networkObjects[i], GetNetworkObjectId(), true, false, ownerId, true);
1531+
AuthorityLocalSpawn(networkObjects[i], GetNetworkObjectId(), true, false, ownerId, true);
15301532
networkObjectsToSpawn.Add(networkObjects[i]);
15311533
}
15321534
}

0 commit comments

Comments
 (0)