Herramientas usadas actualmente

Comunicación por audio

UniVoice se puede usar con FishNet en Unity. Existe un proyecto llamado FishyVoice que combina FishNetworking y UniVoice para proporcionar comunicación de voz sin depender de servicios de terceros

FishyVoice permite:

Otras alternativas de pago

Comunicación por audio y vídeo

FishyVoice y KlakNDI pueden complementarse bien para manejar audio y video en Unity. COn esta estrategia se pueden integrar:

  1. Audio con FishyVoice:

    • Usar FishyVoice para la comunicación de voz en red.
    • Configurar la transmisión de audio posicional si es necesario.
  2. Video con KlakNDI:

    • Usar KlakNDI para capturar y enviar video en tiempo real.
    • Configurar el NDI Sender para transmitir desde una cámara o textura en Unity.
  3. Sincronización:

    • Asegúrarse de que la transmisión de audio y video esté alineada para evitar desincronización.
    • Usa un sistema de timestamps o buffers para mejorar la sincronización.

NDI

Para utilizar NDI (Network Device Interface) en un juego de Unity 3D implementado con FishNet, debes combinar herramientas específicas para el streaming de video con la infraestructura de red proporcionada por FishNet. Aquí está la guía detallada:

1. Configurar FishNet para Networking

FishNet es una solución de red avanzada que admite múltiples plataformas y protocolos, incluyendo Unity Transport 1.0/2.0 y servicios como Relay 14.

2. Integrar NDI en Unity

NDI permite transmitir video en tiempo real a través de la red. Para implementarlo:

Opción A: KlakNDI (recomendado)

Opción B: Unity-VideoOutput


3. Combinar FishNet y NDI

4. Plataformas y Consideraciones Técnicas

5. Ejemplo de Flujo de Trabajo

  1. Cliente/Host:

    • FishNet gestiona la conexión entre jugadores.
    • El host usa NdiSender para transmitir su pantalla (renderizada en una textura).
  2. Clientes:

    • Reciben el stream NDI via NdiReceiver y lo muestran en un objeto (ej: pantalla en el juego).
    • FishNet sincroniza acciones como pausar/reanudar el stream.

Problemas Comunes y Soluciones


Comunicación por OSC

Alternativas

Para enviar y recibir mensajes OSC (Open Sound Control) en Unity junto con FishNet, FishyVoice y KlakNDI, aquí tienes algunas opciones que podrían complementarse bien:

  1. extOSC: Es una de las herramientas más populares para manejar OSC en Unity. Permite enviar y recibir mensajes OSC sin necesidad de escribir código complejo y es compatible con múltiples plataformas.
  2. UnityOSCProtocolSupport: Un paquete oficial de Unity que facilita la comunicación OSC entre Unity y dispositivos externos. Es una opción más integrada dentro del ecosistema de Unity
  3. OSCSharp: Una biblioteca ligera para manejar OSC en C#, que podría integrarse con FishNet para una solución más personalizada.
  4. OSCJack: Ligero y eficiente, ideal para proyectos en tiempo real.
  5. UnityOSC: Alternativa clásica con soporte para mensajes complejos.

Alternativa recomendada

Para la integración con FishyVoice y KlakNDI, extOSC sería una excelente opción, ya que te permite manejar mensajes OSC de manera eficiente sin interferir con la transmisión de audio y video.

Aspectos a tener en cuenta

Para utilizar extOSC en Unity 3D junto con Fishnet y transmitir mensajes OSC, sigue estos pasos:


1. Configuración de extOSC en Unity

        using extOSC;
        public OSCTransmitter transmitter;
        
        void Start()
        {
            transmitter = gameObject.AddComponent<OSCTransmitter>();
            transmitter.RemoteHost = "IP_DESTINO"; // Ej: "192.168.1.100"
            transmitter.RemotePort = 9000; // Puerto del receptor
        }
        
        void EnviarMensajeOSC(string direccion, int valor)
        {
            var mensaje = new OSCMessage(direccion);
            mensaje.AddValue(OSCValue.Int(valor));
            transmitter.Send(mensaje);
        }
        using extOSC;
        public OSCReceiver receiver;
        
        void Start()
        {
            receiver = gameObject.AddComponent<OSCReceiver>();
            receiver.LocalPort = 9000; // Puerto para escuchar
            receiver.Bind("/direccion/osc", RecibirMensaje);
        }
        
        void RecibirMensaje(OSCMessage mensaje)
        {
            if (mensaje.ToInt(out var valor))
                Debug.Log($"Valor recibido: {valor}");
        }


2. Cómo viajan los mensajes OSC


3. Configuración de puertos


4. Integración con Fishnet

Fishnet maneja la red del juego, mientras que OSC se usa para comunicación externa (ej: controlar el juego desde Max/MSP, TouchDesigner, o otro software). Para integrarlos:

// Ejemplo: Enviar un mensaje OSC y sincronizar con Fishnet
void RecibirMensaje(OSCMessage mensaje)
{
    if (mensaje.ToInt(out var valor))
    {
        // Usar Fishnet para propagar el cambio a todos los clientes
        if (IsServer)
            RpcActualizarEstado(valor);
    }
}

[ObserversRpc]
void RpcActualizarEstado(int valor)
{
    Debug.Log($"Estado actualizado: {valor}");
}

5. Consideraciones clave


Resumen

Representación 3D del gestor de OVC

Cargar modelos en Unity dinámicamente

Sistema de Posicionamiento y Permisos en Fishnet

Requisitos:

Flujo Completo del Sistema

  1. Jugador abre el menú de modelos:
    • Unity carga la lista de modelos desde la API web.
    • Muestra miniaturas usando UnityWebRequestTexture.

Alternativa:

Mostrar Miniaturas en Unity

  1. Jugador selecciona un modelo:
    • Activa la herramienta de posicionamiento con un preview fantasma.
  2. Al colocar el objeto:
    • Fishnet lo sincroniza como NetworkObject.
    • El servidor asigna permisos iniciales (dueño puede editarlo, visibilidad definida).
  3. Modificación de permisos:
    • Menú contextual del objeto (ej: "Hacer público", "Otorgar acceso a JugadorX").

Seguridad y Optimización

  1. Validación de Modelos en el Backend:
    Javascript

Permitir a los jugadores crear lógica visualmente

Estas son dos posibilidades concretas que se han utilizado para permitir a los jugadores crear lógica y comportamientos visualmente, de forma similar a Scratch. Te explico cada una junto con ejemplos y enlaces directos:

1. Unity Visual Scripting (anteriormente Bolt)

Unity Visual Scripting es la solución integrada en Unity que permite crear lógicas complejas mediante nodos visuales sin necesidad de escribir código manualmente. Aunque fue conocida como Bolt en versiones anteriores, ahora es parte oficial de Unity, lo que significa que está optimizada y respaldada por la compañía.

Info

Unity Visual Scripting es ideal si buscas integrarte de forma nativa con Unity y aprovechar una herramienta robusta y bien documentada, que puede ser adaptada para exponer solo una parte de su funcionalidad a los usuarios finales.

Ejemplo y Recursos:

¿Cómo implementarlo? Para integrarlo en el juego, se podría exponer solo los nodos y funcionalidades básicas a los jugadores, simplificando la experiencia. Luego, mediante una capa adicional, interpretar los flujos creados para que ejecuten comportamientos dentro de tu juego. Además, su integración con FishNet debería ser más directa, ya que se encuentra dentro del ecosistema oficial de Unity.

2. Blockly for Unity (UBlockly)

Info

UBlockly es una reimplementación de Google Blockly adaptada a Unity. Al igual que Scratch, ofrece una interfaz basada en bloques que se pueden arrastrar y soltar para formar scripts. Esto permite que incluso usuarios sin experiencia en programación puedan crear lógicas y comportamientos de forma visual.

Ejemplo y Recursos:

¿Cómo implementarlo? Con UBlockly, definirías bloques que representen acciones básicas del juego (movimiento, cambio de color, condiciones, bucles, etc.). Por ejemplo, cuando el jugador conecta bloques para formar un script, este se puede traducir en instrucciones que modifiquen el comportamiento de objetos 3D. Además, podrías combinar esta solución con la lógica de red de FishNet para sincronizar las creaciones y ejecutarlas de manera colaborativa en línea.

Para crear un sistema de programación visual dentro de Unity, similar a Scratch, donde los jugadores puedan definir comportamientos de objetos, puede usarse una estrategia escalable como esta:

1. Elegir un sistema de nodos

Para permitir que los jugadores creen scripts visualmente, puedes usar un framework de nodos:

2. Crear un sistema de arrastrar y soltar

Para que los jugadores puedan arrastrar y conectar bloques, puedes usar:

3. Definir comportamientos de objetos

Cada bloque de código visual debe traducirse en acciones dentro del juego:

4. Guardar y cargar scripts

Para que los jugadores puedan guardar sus creaciones, usa:

¿Cómo abordar el diseño e implementación de un sistema de programación visual en Unity que funcione junto con FishNet?

1. Diseñar la Arquitectura del Sistema

a) Separación de Capas: Dividir el sistema en módulos bien definidos:

b) Seguridad y Aislamiento: Debido a que se trata de un entorno en línea, es crucial implementar validaciones y límites para que las “pequeñas aplicaciones” creadas por los jugadores se ejecuten en un entorno controlado, evitando comportamientos inesperados o potencialmente dañinos.

2. Herramientas y Plugins Recomendados

a) Framework de Nodos y Programación Visual:

b) Interfaz de Usuario (UI):

c) Representación de los Bloques y Variables:

d) Serialización y Sincronización con FishNet:

4. Integración con FishNet

Dado que FishNet es la solución de networking elegida: