logo
Guías

Cambiar el nivel de un canal

Coordina el cambio de nivel de un canal sin tratarlo como una carga de escena local.

Cambiar el nivel de un canal

En Eco, cambiar el nivel de un canal es una operación de red. El cambio debe coordinarse con el servidor y con el estado del canal; no es equivalente a llamar directamente a SceneManager.LoadScene en cada cliente.

Cuándo utilizarlo

Utiliza el cambio de nivel del canal cuando todos los participantes de un canal deban pasar a un nuevo estado o escena coordinadamente.

Canal

  ├── Estado actual

  └── Cambio de nivel

      Servidor

   Clientes del canal

Solicitar el cambio

Desde el cliente, la operación se realiza sobre el canal concreto:

cliente.LoadLevel(canalID, "Arena");

La selección del canal es importante cuando el cliente participa en varios canales: el cambio afecta al contexto indicado y no convierte automáticamente el resto de canales en candidatos al cambio.

Durante la transición

La entrada en un canal y los cambios de nivel tienen estados transitorios. Durante estas fases Eco evita que ciertas operaciones de objetos y paquetes pertenecientes al contexto anterior se procesen fuera de orden.

Por eso no conviene asumir que inmediatamente después de solicitar el cambio:

cliente.LoadLevel(20, "Arena");
// Todo el estado de Arena ya existe aquí.

El código de juego debe esperar a los callbacks o estados apropiados antes de empezar a operar con el nuevo contenido.

Cambiar de nivel no es abandonar el canal

El canal continúa siendo el mismo ámbito lógico:

Canal 20
├── Jugadores
├── Objetos
├── Estado
└── Nivel

    cambio

    Nuevo nivel

Por tanto, las operaciones de salida (LeaveChannel) y las de cambio de nivel cumplen funciones diferentes.

Errores habituales

Cargar la escena directamente en Unity

Puede dejar al cliente fuera de sincronía respecto al servidor. El cambio debe pasar por la infraestructura de Eco cuando el nivel forma parte del estado del canal.

Operar sobre objetos demasiado pronto

Durante la transición algunos objetos pueden no estar todavía registrados. Comprueba hasBeenRegistered, pertenencia al canal y los callbacks apropiados antes de utilizarlos.

Ignorar el contexto multicanal

Si el cliente está en varios canales, especifica siempre el canal que debe cambiar. No presupongas que el canal activo del juego es el único contexto de red existente.

Referencias

Canales

Estado, jugadores y ciclo de vida de un canal.

Varios canales simultáneos

Gestión de varios ámbitos de red desde una misma conexión.

On this page