logo
Modelo de red

Objetos

Identidad, ownership, datos, componentes y ciclo de vida de los objetos de red de Eco.

Objetos

Un Objeto es la identidad de red asociada a un GameObject. Es la pieza que permite localizar una entidad dentro de un canal, conocer su propietario, recibir RFC y mantener datos sincronizados.

Objeto ≠ GameObject

El GameObject pertenece a Unity. Objeto aporta la identidad y el estado que hacen posible que esa entidad exista en la red.

Anatomía de un objeto

Identidad

id, channelID y uid permiten localizar el objeto dentro del contexto de red.

Ownership

owner, ownerID e isMine determinan quién tiene la autoridad lógica sobre el objeto.

Estado

Nodo, Set y Get permiten mantener datos asociados a la entidad.

Componentes

Los Componente implementan el comportamiento de gameplay conectado al objeto.

Identidad

Los objetos utilizan dos espacios principales de IDs:

TipoRangoUso
Estático132767Objetos presentes desde la escena
Dinámico3276816777215Objetos creados durante la ejecución

Su identificador completo incorpora también el canal:

uid = (channelID << 32) | id

Esto evita confundir objetos de diferentes canales que compartan el mismo id local.

Ciclo de vida

Prefab / escena

Objeto creado

Registro en Eco

Operativo

Transferencia / cambios de estado

Destrucción

hasBeenRegistered indica que la creación terminó y se asignó el identificador correspondiente. hasBeenDestroyed indica que el objeto ya ha entrado en el proceso de destrucción.

Ownership

if (objeto.isMine)
{
    // El jugador local es el propietario.
}

int propietario = objeto.ownerID;
Jugador jugador = objeto.owner;

La propiedad no equivale a visibilidad:

Objeto
├── Propietario → Jugador A
└── Visible para → A, B, C

Consulta Transferir la propiedad para el workflow completo.

Objetos estáticos

Eco no permite cambiar el propietario de un objeto estático de la misma forma que el de un objeto dinámico. Diseña las entidades que necesitarán ownership transferible como objetos dinámicos.

Datos del objeto

objeto.Set("vida", 100);
int vida = objeto.Get<int>("vida");

Set actualiza el dato local inmediatamente. Cuando se solicita sincronización, Eco comprueba si el objeto puede enviar, quién es el propietario y si la operación debe atravesar una cola temporal.

Set()

 ├── Actualiza estado local

 └── ¿Puede enviar?

       ├── Sí → sincronización

       └── No → cola pendiente

Consulta Sincronizar una entidad para ver este patrón en un workflow real.

Componentes

Un Componente busca el Objeto en su jerarquía de Unity y ofrece métodos de conveniencia para comunicación, datos, instanciación y destrucción.

GameObject
├── Objeto
├── Componente de movimiento
├── Componente de combate
└── Componente de inventario

El código de gameplay debería vivir normalmente en componentes, mientras que Objeto concentra la identidad de red.

Capacidad de envío

PuedeEnviar no significa simplemente “hay conexión”. El objeto debe tener un ID válido, no estar destruido, pertenecer a un canal utilizable y no estar en una transición de entrada al canal.

Esto resulta especialmente importante durante:

  • entrada a canales;
  • cambios de escena;
  • creación dinámica;
  • transferencia entre canales;
  • destrucción.

Destrucción y transferencia

onDestroy y onTransfer permiten observar eventos del ciclo de vida de red:

objeto.onDestroy += () =>
{
    // Preparar la lógica local antes de la destrucción de red.
};

objeto.onTransfer += (nuevoCanal, nuevoID) =>
{
    // Actualizar referencias dependientes del contexto.
};

Consulta Instanciar y destruir objetos y Transferir un objeto entre canales.

Qué no debe hacer un objeto

Mantén las responsabilidades separadas

Objeto no debería convertirse en tu sistema de gameplay. Utilízalo como identidad, ownership, estado y puerta de entrada a la comunicación; coloca reglas de gameplay en Componente.

Correspondencia con TNet

EcoTNetFunción
ObjetoTNObjectIdentidad y estado de red
ComponenteTNBehaviourComportamiento asociado
ownerownerJugador propietario
ownerIDownerIDIdentificador del propietario
isMineisMinePropiedad local
uiduidContexto completo de identidad

Referencias

On this page