Version: 2017.1
Network Views (Legacy)
Detalles RPC (Legacy)

Network View

(Esta clase es parte del sistema antiguo de redes y es obsoleto. Ver NetworkIdentity para el nuevo sistema de redes).

Los Network Views son las puertas de entrada a la creación de juegos multijugador en red en Unity. Ellos son simples de usar, pero son supremamente poderosos. Por esta razón, es recomendado que usted entienda los conceptos fundamentes detrás de las redes antes de comenzar a experimentar con Network Views. Usted puede aprender y descubrir los conceptos fundamentes en el Network Reference Guide.

Para poder usar cualquier capacidad de red, incluyendo State Synchronization o Remote Procedure Calls, su GameObject debe tener un Network View anexado a él.

Propiedades

Propiedad: Función:
State Synchronization El tipo de State Synchronization usado por esta Network View
        Off Ningún State Synchronization será usado. Esta es la mejor opción si usted solo quiere mandar RPCs
        Reliable Delta Compressed Se enviará la diferencia entre el último estado y el estado actual, si nada ha cambiado, nada será enviado. Este modo es ordenado. En el caso de pérdida de paquetes, el paquete perdido se vuelve a enviar automáticamente
        Unreliable Se enviará el estado completo. Este utiliza más ancho de banda, pero el impacto de perdida de paquete es minimizado.
Observed Los datos del Component que serán enviados a través de la red
View ID El identificado único para este Network View. Estos valores son leídos solamente en el Inspector
        Scene ID El número de id del Network View en esta escena en particular
        Type Ya sea guardado a la Scene o Asignado en tiempo de ejecución

Detalles

Cuando usted agrega un Network View a un GameObject, usted debe decidir dos cosas

  1. Qué tipo de información usted quiere que el Network View envié
  2. Cómo quiere enviar esa información

Escogiendo información para enviar

La propiedad Observed del Network View puede contener un solo Component. Este puede se un Transform, un Animation, un RigidBody, o un script. Cualquiera que sea el component Observed, información acerca de él será enviada a través de la red. Usted puede seleccionar un Component desde el desplegable, o usted puede arrastrar cualquier encabezado de un Component directamente a una variable. Si usted directamente no está mandando información, sino simplemente usando las llamadas RPC, entonces usted puede apagar la sincronización (ningún dato es directamente enviado) y nada se debe establecer como una propiedad Observed. Las llamadas RPC solamente necesitan una network view presente para que usted no necesite agregar una vista específicamente para un RPC si una vista está ya presente.

Cómo mandar la información

Usted tiene 2 opciones para enviar la información del Component Observed : State Synchronization y Remote Procedure Calls.

Para usar State Synchronization, establezca State Synchronization del Network View a Reliable Delta Compressed o Unreliable. La información del Component Observed va a ser enviada ahora a través de la red automáticamente.

Reliable Delta Compressed es ordenado. Los paquetes siempre son recibidos en el orden en el que fueron enviados. Si se deja caer un paquete, ese paquete será re-enviado. Todos los paquetes posteriores se ponen en cola hasta que se reciba el paquete anterior. Solamente la diferencia entre los últimos valores de las transmisiones y los valores actuales son enviados y nada es enviado si no hay una diferencia.

Si se observa una script, debe serializar los datos de forma explícita dentro la script. Usted hace esto dentro de la función OnSerializeNetworkView() .

using UnityEngine;
using UnityEngine.Network;
using System.Collections;

public class ExampleScript : MonoBehaviour {
    void OnSerializeNetworkView (BitStream stream, NetworkMessageInfo info) {
        float horizontalInput = Input.GetAxis ("Horizontal");
        stream.Serialize (horizontalInput);
    }
}

_Ejemplo de un C# script

function OnSerializeNetworkView (stream : BitStream, info : NetworkMessageInfo) {
    var horizontalInput : float = Input.GetAxis ("Horizontal");
    stream.Serialize (horizontalInput);
}

Ejemplo de un JS script

La función de encima siempre escribe (una actualización del stream) en horizontalInput, cuando reciba una actualización y lee desde la variable de escritura en el stream de otro modo. Si usted quiere hacer diferentes cosas cuando reciba actualizaciones o enviando, usted puede utilizar el atributo isWriting de la clase BitStream

using UnityEngine;
using UnityEngine.Network;
using System.Collections;

public class ExampleScript : MonoBehaviour {
    void OnSerializeNetworkView (BitStream stream, NetworkMessageInfo info) {
        float horizontalInput = 0.0;
        if (stream.isWriting) {
            // Sending
            horizontalInput = Input.GetAxis ("Horizontal");
            stream.Serialize (horizontalInput);
        } else {    
            // Receiving
            stream.Serialize (horizontalInput);
            // ... do something meaningful with the received variable
        }
    }
}

_Ejemplo de un C# script

function OnSerializeNetworkView (stream : BitStream, info : NetworkMessageInfo) {
    var horizontalInput : float = 0.0;
    if (stream.isWriting) {
        // Sending
        horizontalInput = Input.GetAxis ("Horizontal");
        stream.Serialize (horizontalInput);
    } else {
        // Receiving
        stream.Serialize (horizontalInput);
        // ... do something meaningful with the received variable
    }
}

Ejemplo de un JS script

OnSerializeNetworkView es llamado de acuerdo al sendRate especificado en el administrador de redes de los ajustes del proyecto. Por defecto esto es 15 veces por segundo.

Si usted quiere utilizar Remote Procedure Calls en sus scripts todo lo que necesita es un component Network View presente en el mismo GameObject del script que tiene adjunto. El Network View puede ser usado para algo más, o en el caso de que solo sea usado para enviar RPCs puede no tener ningún script observed y el state synchronization apagado. La función que debe ser llamada desde la red debe tener el atributo @RPC. Ahora, desde cualquier script adjuntado al mismo GameObject, usted llama networkView.RPC() para ejecutar el Remote Procedure Call.

using UnityEngine;
using UnityEngine.Network;
using System.Collections;

public class ExampleScript : MonoBehaviour {
    GameObject playerBullet;
    NetworkView networkView;

    void Start () {
        networkView = new NetworkView ();
    }

    void Update () {
        if (Input.GetButtonDown ("Fire1")) {
            networkView.RPC ("PlayerFire", RPCMode.All);
        }
    }
    
    [RPC]
    void PlayerFire () {
        Instantiate (playerBullet, playerBullet.transform.position, playerBullet.transform.rotation);
    }
}

_Ejemplo de un C# script

var playerBullet : GameObject;

function Update () {
    if (Input.GetButtonDown ("Fire1")) {
        networkView.RPC ("PlayerFire", RPCMode.All);
    }
}

@RPC
function PlayerFire () {
    Instantiate (playerBullet, playerBullet.transform.position, playerBullet.transform.rotation);
}

Ejemplo de un JS script

Los RPCs son transmitidos de manera confiable y ordenadamente. Para más información acerca de RPCs, mire la página RPC Details.

Consejos

  • Lea a través de la Network Reference Guide si usted todavía no está claro acerca de cómo usar los Network Views
  • El State Synchronization no necesita ser deshabilitado para usar Remote Procedure Calls
  • Si usted tiene más de un Network View y quiere llamar un RPC en uno específico, use GetComponents(NetworkView)[i].RPC().
Network Views (Legacy)
Detalles RPC (Legacy)