Local Discovery
Converting a single-player game to Unity Multiplayer

Objetos de Escena

Los objetos que son creados dinámicamente son agregados a la red con NetworkServer.Spawn(), pero los objetos que ya existen en la escena son manejados de manera diferente. Estos objetos son cargados con la escena en ambos el cliente y el servidor, y existe en tiempo de ejecución antes de que cualquier mensaje de generación (spawn) sea enviado.

Todos los objetos en la escena con un componente NetworkIdentity serán desactivados cuando la escena esté completamente cargada; en ambos el Cliente y el Servidor. Luego, cuando la escena esté cargada, NetworkServer.SpawnObjects() se llama para activar estos objetos de escena en red. Esto se hará automáticamente por el NetworkManager cuando la escena servidor termine de cargar - se pueda llamar directamente por código de usuario. Esto causa que los objetos de escena en red sean generados de una manera especial - las instancias existentes están conectadas a la red en vez de que unas nuevas instancias sean creadas.

Hay unas buenas razones para utilizar objetos de escenas en vez de unos generados dinámicamente. Estos objetos:

  • son cargados con el nivel, para que no haya una pausa en tiempo de ejecución
  • pueden tener modificaciones específicas que difieren de prefabs
  • se pueden referenciar por otras instancias de objeto en la escena, las cuales evitan encontrar los objetos que los engancha en tiempo de ejecución

Una vez los objetos de escena hayan sido generados por el NetworkServer.SpawnObjects() entonces luego se comportan como cualquier otro objeto generado. Las actualizaciones serán enviadas, y las llamadas ClientRPC se pueden hacer.

Si un objeto en la escena es destruido en el servidor antes de que un cliente se una al juego, entonces nunca será generado en nuevos clientes que se unan.

Los objetos de escena en red son desactivados cuando la red empiece. Cualquier objeto en escena con un NetworkIdentity en la escena es una objeto de escena en red.

En el servidor, estos objetos luego son habilitados cuando NetworkServer.SpawnObjects() sea llamado - cuando el servidor empiece, o cuando la escena termine de cargar en el servidor. Cuando un cliente se conecta, al cliente se le envia un mensaje de generación ObjectSpawnScene para cada uno de los objetos de escena que existen en el servidor, que son visibles a ese cliente. Estos mensajes causan que el objeto en cliente sea habilitado y tenga el último estado de ese objeto del servidor. Por lo que entonces solamente los objetos que son visibles al cliente, y no destruidos en el servidor, serán activados en el cliente. Y al igual que los objetos no regulares de escena, estos objetos d escena empezarán con el último estado cuando el cliente se una al juego.

Local Discovery
Converting a single-player game to Unity Multiplayer