Primer objeto
Primer objeto
Esta guía muestra el paso siguiente después de conectar el cliente: trabajar con una entidad que tenga identidad de red y comportamiento asociado.
Modelo mental
En Eco, Objeto representa la identidad de red y Componente implementa el comportamiento asociado. No son conceptos intercambiables.
Crear la entidad
Un objeto puede corresponder a un GameObject de Unity que tenga un Objeto y uno o varios Componente.
GameObject
├── Objeto
├── Componente
└── otros componentes de UnityEl objeto necesita un identificador de red válido para participar en la comunicación con el servidor.
Añadir un componente de red
El patrón habitual es derivar de Componente:
public class MiUnidad : Componente
{
// Comportamiento de red de la unidad.
}El componente se asocia al Objeto de su jerarquía y puede utilizarlo como contexto de red.
Leer y modificar estado
Para datos de estado utiliza las operaciones de Objeto o sus accesos de conveniencia desde Componente:
Set("vida", 100);
int vida = Get<int>("vida");El valor se modifica localmente y Eco determina cómo debe propagarse según la autoridad del objeto y el estado de la conexión.
Comprobar propiedad
Antes de permitir determinadas operaciones, comprueba la propiedad del objeto:
if (ero.isMine)
{
Set("vida", 100);
}Ser capaz de observar un objeto no implica ser su propietario.
Enviar una acción
Cuando lo que necesitas comunicar es una acción puntual, utiliza el mecanismo de RFC disponible en el objeto:
ero.Send("Atacar", Objetivo.Otros);La acción no debe confundirse con el estado. Si vida representa un valor persistente de la entidad, es preferible sincronizar ese dato en lugar de enviar continuamente llamadas que representen su valor.
Destruir el objeto
El ciclo de vida de red y el ciclo de vida de Unity están relacionados, pero no son idénticos. Utiliza la API de Eco para solicitar la destrucción de un objeto de red en lugar de asumir que Destroy(gameObject) informa automáticamente al servidor.
Gameplay
↓
Destrucción de red
↓
Servidor
↓
Notificación a participantesProbarlo dentro de un canal
El objeto debe existir en el contexto de un canal válido. Una prueba mínima debería ser:
Cliente conectado
↓
Canal activo
↓
Objeto registrado
↓
Componente activo
↓
Estado / RFCSi alguno de estos estados falta, el comportamiento observado puede ser local aunque todavía no exista una entidad de red utilizable.
Errores frecuentes
Crear un Componente sin un Objeto válido
El componente puede resolver o crear un objeto local en determinados casos, pero eso no significa que exista automáticamente una identidad registrada en el servidor.
Utilizar RPC para todo
Una acción y un estado son problemas diferentes. Utiliza RFC para acciones puntuales y los mecanismos de datos/sincronización para estado.
Ignorar el ownership
Si varios clientes modifican el mismo estado sin una autoridad clara, el resultado será difícil de razonar y sincronizar.
Siguiente paso
Continúa con Sincronización para definir autoridad, frecuencia y persistencia del estado.
Referencias
Objetos
Identidad, ownership y ciclo de vida de Objeto.
Comunicación
RFC, estado y destinatarios.
Eco en GitHub
Código fuente de la implementación actual.
