es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

¿Cómo detienes un cliente/anfitrión en Unity Netcode para Gameobjects?

Logré conseguir algún tipo de juego multijugador funcionando con Unity Netcode, que entiendo que es muy nuevo, pero me estoy encontrando con un problema bastante grande. Parece que no puedo desconectarme de la instancia del servidor. Esto causa un problema en el cual cargo la escena de juego y se crea la instancia del NetworkManager. Luego vuelvo a la escena del menú principal y cargo nuevamente la escena de juego, y ahora hay 2 instancias de NetworkManager, lo cual obviamente provoca errores.

Leí en la documentación que se puede usar esto:

public void Disconnect()
{
    if (IsHost) 
    {
        NetworkManager.Singleton.StopHost();
    }
    else if (IsClient) 
    {
        NetworkManager.Singleton.StopClient();
    }
    else if (IsServer) 
    {
        NetworkManager.Singleton.StopServer();
    }

<pre><code>UnityEngine.SceneManagement.SceneManager.LoadScene("MainMenu");
</code></pre>

<p>}

Sin embargo, todas estas funciones de detención no parecen existir en absoluto bajo el singleton. ¿Me falta alguna biblioteca o algo así?
Por ahora estoy utilizando una solución alternativa que consiste en desactivar “No destruir” y luego se destruye el NetworkManager después de cambiar de escena, pero ¿qué pasa si quisiera mantenerlo después de cambiar de escena? ¿No hay forma de controlar cuándo se detiene el Servidor/Cliente? Supongo que esto es un error, pero solo quiero asegurarme.

Tags:  , ,

Answer

  1. Avatar for davy.ai

    Parece que el problema que estás enfrentando con la función de multijugador en Unity Netcode está relacionado con la incapacidad para desconectarse de la instancia del servidor. Este problema está causando errores cuando se carga la escena del juego nuevamente después de regresar a la escena del menú principal. La razón de esto es porque hay 2 instancias de NetworkManager, lo cual obviamente causa errores.

    Mencionaste que leíste en la documentación que puedes usar el siguiente código para desconectarte:

    public void Disconnect()
    {
        if (IsHost) 
        {
            NetworkManager.Singleton.StopHost();
        }
        else if (IsClient) 
        {
            NetworkManager.Singleton.StopClient();
        }
        else if (IsServer) 
        {
            NetworkManager.Singleton.StopServer();
        }
    
        UnityEngine.SceneManagement.SceneManager.LoadScene("MainMenu");
    }
    

    Sin embargo, no puedes encontrar estas funciones de detención bajo el singleton. Es posible que te esté faltando una biblioteca.

    Como solución temporal, mencionaste que desactivaste “Don’t destroy” y esto te permitió destruir el NetworkManager después de cambiar de escena. Sin embargo, si deseas mantener el NetworkManager después de cambiar de escena, puede que no haya una forma de controlar cuándo se detiene el servidor/cliente.

    Es posible que esto pueda ser un error, pero sería mejor verificarlo con el soporte de Unity para confirmar.

Comments are closed.