Skip to content

Commit 0333853

Browse files
fix
Cleaning up the player prefab hash logical flow a bit and making it easier to determine if one was even found.
1 parent 0d15bf7 commit 0333853

1 file changed

Lines changed: 34 additions & 3 deletions

File tree

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

Lines changed: 34 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -946,6 +946,37 @@ internal void ProcessClientsToDisconnect()
946946
m_ClientsToDisconnect.Clear();
947947
}
948948

949+
/// <summary>
950+
/// The checks to find the right GlobalObjectIdHash value
951+
/// are complex enough to deserve a method that includes
952+
/// an easy to follow logical flow.
953+
/// This also makes it a quick check to determine if there
954+
/// even is a player prefab to spawn (it is valid to not
955+
/// have any player spawned upon connection).
956+
/// </summary>
957+
[MethodImpl(MethodImplOptions.AggressiveInlining)]
958+
private (bool IsValid, uint GlobalObjectIdHash) GetPlayerPrefabHash(uint? playerPrefabHash)
959+
{
960+
if (playerPrefabHash != null && playerPrefabHash.HasValue)
961+
{
962+
return (true, playerPrefabHash.Value);
963+
}
964+
else
965+
if (NetworkManager.NetworkConfig.PlayerPrefab != null)
966+
{
967+
var networkObject = NetworkManager.NetworkConfig.PlayerPrefab.GetComponent<NetworkObject>();
968+
if (networkObject != null)
969+
{
970+
return (true, networkObject.GlobalObjectIdHash);
971+
}
972+
else
973+
{
974+
NetworkManager.Log.Error(new Logging.Context(LogLevel.Error, $"Player prefab {NetworkManager.NetworkConfig.PlayerPrefab.name} has no {nameof(NetworkObject)}!"));
975+
}
976+
}
977+
return (false, 0);
978+
}
979+
949980
/// <summary>
950981
/// Server Side: Handles the approval of a client
951982
/// </summary>
@@ -972,10 +1003,10 @@ internal void HandleConnectionApproval(ulong ownerClientId, bool createPlayerObj
9721003
}
9731004

9741005
// Server-side spawning (only if there is a prefab hash or player prefab provided)
975-
var idHashToSpawn = (playerPrefabHash != null && playerPrefabHash.HasValue) ? playerPrefabHash.Value : NetworkManager.NetworkConfig.PlayerPrefab != null ? NetworkManager.NetworkConfig.PlayerPrefab.GetComponent<NetworkObject>()?.GlobalObjectIdHash : null;
976-
if (!NetworkManager.DistributedAuthorityMode && createPlayerObject && idHashToSpawn.HasValue)
1006+
var idHashToSpawn = GetPlayerPrefabHash(playerPrefabHash);
1007+
if (!NetworkManager.DistributedAuthorityMode && createPlayerObject && idHashToSpawn.IsValid)
9771008
{
978-
var playerObject = NetworkManager.SpawnManager.GetNetworkObjectToSpawn(idHashToSpawn.Value, ownerClientId, playerPosition, playerRotation);
1009+
var playerObject = NetworkManager.SpawnManager.GetNetworkObjectToSpawn(idHashToSpawn.GlobalObjectIdHash, ownerClientId, playerPosition, playerRotation);
9791010

9801011
if (playerObject == null)
9811012
{

0 commit comments

Comments
 (0)