Mensajes
Los mensajes en comms son datos binarios paquetes, serializados usando protocol buffers. Transportan chat de texto y voz, actualizaciones posicionales, cambios de perfil y otras interacciones en tiempo real.
Puedes ver el protocolo de comms en acción y experimentar con él usando el Comms Station.
Todas las definiciones de mensajes están disponibles en el repositorio del protocolo, y cada tipo de mensaje abajo tiene un enlace a su declaración.
El ↗ fuente
El El estructura de paquete es el contenedor para todos los mensajes.
message
enum
Uno de Chat, Voice, position, AnnounceProfileVersion,
ProfileRequest, ProfileResponse, o Scene.
Chat de Texto y Voz
Los clientes chatean transmitiendo mensajes de texto y clips de audio a todos los pares conectados (usualmente jugadores en la misma isla).
Solo dos El tipos están involucrados, uno para cada caso de uso. En circunstancias típicas, los clientes transmiten estos mensajes a todos los demás clientes en su isla, que es el grupo de jugadores cercanos con los que pueden interactuar.
Chat ↗ fuente
Envía un mensaje de chat de texto a otros clientes.
message
string
Texto del mensaje
timestamp
double
Marca de tiempo UTC del remitente
Voice ↗ fuente
Envía una muestra de voz codificada a otros clientes.
encoded_samples
bytes
Datos de audio codificados
codec
enum
Solo VC_OPUS (no se admiten otros codecs por ahora)
index
uint32
Un contador incremental establecido por el remitente
El codec el campo es un enum valor. No se admiten codecs personalizados.
Movimiento
Los clientes que controlan avatares envían y reciben actualizaciones posicionales dentro de su isla, para sincronizar movimiento y postura entre jugadores.
position ↗ fuente
Actualiza a otros clientes sobre la posición y orientación de un avatar.
position_x
position_y
position_z
float
Posición del avatar en el mapa del mundo
rotation_x
rotation_y
rotation_z
rotation_w
float
Cuaternión de rotación del avatar
index
uint32
Un contador incremental establecido por el remitente
Normalmente los clientes envían position actualizaciones con baja frecuencia (como una vez cada 1 o 2 segundos), y cambian a alta frecuencia (varias veces por segundo) cuando se mueven o interactúan.
Al enviar actualizaciones posicionales, la velocidad suele ser mejor que la fiabilidad. El rendimiento percibido es mejor cuando la entrega es más rápida, incluso si un position mensaje se pierde ocasionalmente o llega desordenado. Algunos transportes (por ejemplo, LiveKit) pueden cambiar entre modos rápidos y fiables por mensaje.
Se recomiendan las transmisiones de baja frecuencia como una solución simple para entregar actualizaciones a clientes que momentáneamente perdieron conectividad o no alcanzaron a recibir un mensaje mientras se unían a la isla.
El index el campo es un contador incremental, establecido por el remitente para que los receptores puedan ordenar las actualizaciones que llegan fuera de orden.
Compartir Perfil
Los clientes dentro de una isla pueden solicitar la información de avatar de otros jugadores, con el fin de renderizar sus avatares, mostrar sus nombres e imágenes, etc.
Como los cambios de perfil son raros (comparados con las actualizaciones posicionales, por ejemplo), el sistema está diseñado para simplificar la tarea de mantener una caché local de perfiles, y solo obtener perfiles cuando sea necesario.
Hay 3 El tipos involucrados: un ProfileRequest/ProfileResponse par usado por los clientes para compartir perfiles bajo demanda, y el AnnounceProfileVersion mensaje para decir a los pares cuál es la última versión, para que puedan decidir si solicitarla.
Normalmente los clientes transmiten AnnounceProfileVersion mensajes periódicamente, además de inmediatamente cuando su perfil cambia.
AnnounceProfileVersion ↗ fuente
Señala a otros clientes que hay un entidad de perfil que pueden solicitar.
profile_version
uint32
Un número de versión incrementado con cada modificación.
Los receptores que almacenan en caché perfiles pueden usar el profile_version número para decidir si su copia local está actualizada, o si necesitan enviar un ProfileRequest.
ProfileRequest ↗ fuente
Solicita un perfil de una versión especificada a un par en particular.
address
string
La dirección identificadora del perfil.
profile_version
uint32
La versión de perfil deseada.
Los receptores pueden responder con ProfileResponse mensajes para proporcionar el perfil solicitado.
ProfileResponse ↗ fuente
Envía un perfil en respuesta a un ProfileRequest.
serialized_profile
string
Entidad de perfil serializada en JSON.
base_url
uint32
URL base para un endpoint de sistema de archivos, recomendada por el remitente.
El serialized_profile el campo contiene la serialización JSON de una entidad de perfil.
Si el remitente quiere recomendar un servidor de contenido para descargar entidades referenciadas en su perfil (como wearables), puede establecer el campo base_url como una sugerencia. Los clientes son libres de usar o ignorar esta URL.
Última actualización