Description
Hey guys,
i am new to Netcode and SteamNetworkingSocketTransport.
I setup script to transport the players to the host new game scene once they connect but i am getting this error.
I am not really sure where to start or how to investigate
This is the error
[Netcode] SteamNetworkingSocketsTransport - Can't GetCurrentRtt from client, client not connected, clientId: 0 UnityEngine.Debug:LogError (object) Unity.Netcode.NetworkLog:LogError (string) (at ./Library/PackageCache/com.unity.netcode.gameobjects@f2477a6c90fe/Runtime/Logging/NetworkLog.cs:34) Unity.Netcode.NetworkLog:LogServer (string,Unity.Netcode.NetworkLog/LogType) (at ./Library/PackageCache/com.unity.netcode.gameobjects@f2477a6c90fe/Runtime/Logging/NetworkLog.cs:98) Unity.Netcode.NetworkLog:LogErrorServer (string) (at ./Library/PackageCache/com.unity.netcode.gameobjects@f2477a6c90fe/Runtime/Logging/NetworkLog.cs:58) Netcode.Transports.SteamNetworkingSocketsTransport:GetCurrentRtt (ulong) (at ./Library/PackageCache/com.community.netcode.transport.steamnetworkingsockets@780b1998c798/Runtime/SteamNetworkingSocketsTransport.cs:109) Unity.Netcode.NetworkTimeSystem:UpdateTime () (at ./Library/PackageCache/com.unity.netcode.gameobjects@f2477a6c90fe/Runtime/Timing/NetworkTimeSystem.cs:145) Unity.Netcode.NetworkManager:NetworkUpdate (Unity.Netcode.NetworkUpdateStage) (at ./Library/PackageCache/com.unity.netcode.gameobjects@f2477a6c90fe/Runtime/Core/NetworkManager.cs:363) Unity.Netcode.NetworkUpdateLoop:RunNetworkUpdateStage (Unity.Netcode.NetworkUpdateStage) (at ./Library/PackageCache/com.unity.netcode.gameobjects@f2477a6c90fe/Runtime/Core/NetworkUpdateLoop.cs:191) Unity.Netcode.NetworkUpdateLoop/NetworkPreUpdate/<>c:<CreateLoopSystem>b__0_0 () (at ./Library/PackageCache/com.unity.netcode.gameobjects@f2477a6c90fe/Runtime/Core/NetworkUpdateLoop.cs:238)
and this is my code
`public void StartNetworkGameSequence()
{
_networkManager.StartHost();
WorldLobbyManager.instance._lobbyManager.Lobby.SetGameServer();
Debug.Log($"Players Connected: {NetworkManager.Singleton.ConnectedClients.Count}/{WorldLobbyManager.instance._lobbyManager.Lobby.MemberCount}");
StartCoroutine(WaitForClientsThenStartGame());
}
private IEnumerator WaitForClientsThenStartGame()
{
Destroy(WorldLobbyManager.instance._lobbyPlayerManager.gameObject);
WorldLobbyManager.instance._lobbyPlayerManager = null;
yield return new WaitForSeconds(3);
while(NetworkManager.Singleton.ConnectedClients.Count < WorldLobbyManager.instance._lobbyManager.Lobby.MemberCount)
{
Debug.Log($"Players Connected: {NetworkManager.Singleton.ConnectedClients.Count}/{WorldLobbyManager.instance._lobbyManager.Lobby.MemberCount}");
yield return new WaitForSeconds(2);
}
// Change the scene for all once everyone is connected
string sceneToLoad = WorldLobbyManager.instance._gameModeToLoad;
if(sceneToLoad == "SurvivalModeScene")
{
string scenePath = SceneUtility.GetScenePathByBuildIndex(1);
string gameSceneName = System.IO.Path.GetFileNameWithoutExtension(scenePath);
Debug.Log($"All clients connected. Changing scene to: {gameSceneName}");
ChangeSceneForAll(gameSceneName);
}
yield return null;
}
private void ChangeSceneForAll(string sceneName)
{
Debug.Log($"Loading scene: {sceneName}");
NetworkManager.Singleton.SceneManager.LoadScene(sceneName, LoadSceneMode.Single);
StartCoroutine(WaitForSceneLoadThenSpawnPlayers());
}
private IEnumerator WaitForSceneLoadThenSpawnPlayers()
{
yield return new WaitForSeconds(2f); // Allow scene transition to complete
Debug.Log("Scene changed. Spawning player prefabs...");
foreach (KeyValuePair<ulong, NetworkClient> client in _networkManager.ConnectedClients)
{
SpawnPlayerPrefab(client.Key);
}
_gameStarted = true;
}
private void SpawnPlayerPrefab(ulong clientId)
{
if (!_playersInSession.ContainsKey(clientId))
{
Vector3 spawnPosition = new Vector3(clientId * 2.0f, 1.0f, 0);
GameObject playerObject = Instantiate(_playerPrefab, spawnPosition, Quaternion.identity);
PlayerManager playerManager = playerObject.GetComponent<PlayerManager>();
// Setup Player
playerManager.InitializePlayerOnLevel();
// Folow Camera
GameObject cameraGameObject = Instantiate(_followCameraPrefab, playerObject.transform);
cameraGameObject.transform.parent = null;
CameraFollow cameraFollowScript = cameraGameObject.GetComponent<CameraFollow>();
playerManager._cameraFollow = cameraFollowScript;
cameraFollowScript.SelectTarget(playerObject);
NetworkObject networkObject = playerObject.GetComponent<NetworkObject>();
if (networkObject != null)
{
networkObject.SpawnAsPlayerObject(clientId);
}
_playersInSession[clientId] = playerObject;
Debug.Log($"Spawned player {clientId} in new scene.");
}
}`