Compartir a través de


Guía del programador de scripting visual mesh

Vaya al artículo Introducción a Visual Scripting.

Limitaciones

  • Solo se expone un subconjunto de funcionalidades de Unity a scripts visuales.
  • Las variables y propiedades con tipos no simples (incluidas las referencias a objetos) no se comparten automáticamente. Consulte Uso compartido y redes a continuación para obtener más información sobre esto.

Hello World

El script visual más sencillo que puede crear es el que simplemente abre un cuadro de mensaje:

Captura de pantalla del gráfico de scripts visuales del ejemplo de Hola mundo

Así es como se ve en Mesh:

Ventana del explorador mesh con un cuadro de diálogo emergente que muestra Hola mundo y un botón Aceptar

Captura de pantalla del Editor de Unity con el scripting visual mesh Hola mundo escena abierta.

Prueba de los scripts

Antes de cargar la escena en Mesh, puede desarrollar y probar scripts visuales, incluso con varios clientes en modo de pantalla dividida, mediante el modo de reproducción con emulación de malla.

Diagnósticos de script visual en el Editor

Cuando se selecciona gameObject con una máquina de script en la jerarquía de transformación, Mesh muestra el panel Mesh Visual Scripting Diagnostics (Diagnósticos de scripting visual de malla) en la parte inferior del panel Inspector:

Captura de pantalla del panel De diagnóstico de scripting visual mesh

El panel de diagnóstico proporciona comentarios inmediatos sobre las advertencias o errores que podrían impedir que los scripts funcionen bien en Mesh.

Limitación actual: las versiones futuras del panel de diagnóstico también pueden proporcionar información sobre el uso del script visual de las variables y propiedades compartidas y mostrar diagnósticos y advertencias adicionales.

Carga en Mesh

Use mesh Uploader para cargar escenas que contengan scripts visuales. Para abrir el cargador, en el menú Mesh Toolkit , seleccione Entornos.

Nota: Mesh Uploader valida los scripts visuales antes de cargar y se niega a cargar cuando haya errores de validación en los scripts visuales. Los diagnósticos detallados se envían a la consola.

Uso compartido y redes

Estado de script compartido y local

Mesh usa Scripting visual de Unity, que está diseñado para funcionar sin redes. Los scripts visuales se ejecutan en cada cliente de forma independiente. Sin embargo, se comparte la experiencia de Mesh de los usuarios; todos los usuarios experimentan una sola escena compartida que tiene el mismo aspecto en todos los clientes.

El efecto de la ejecución de un script visual es cómo cambia el estado de la escena.

De forma predeterminada, Mesh replica automáticamente los cambios de escena realizados por scripts visuales en un cliente en todos los demás clientes. Aparte de todo lo que se comparte en una escena, algún estado permanece independiente de cada cliente (es decir, local).

Los cambios locales tienen prioridad temporalmente sobre los cambios procedentes de los clientes. Ejemplo: Si sigue animando un objeto localmente, los cambios procedentes de otros clientes no ponen en peligro la animación local.

Hay algunas limitaciones automáticas de velocidad de actualización. Un cliente no envía actualizaciones adicionales mientras uno todavía está en curso; hay una actualización enviada por ida y vuelta a través del servidor. Esto equivale a aproximadamente cinco a seis actualizaciones por segundo en situaciones prácticas. Esto significa que una animación suave controlada por un cliente no se verá fluida en otros clientes. El procedimiento recomendado es realizar animaciones suaves localmente, idealmente no a través de scripts visuales, sino a través del sistema de animación normal de Unity.

Se garantiza la coherencia final del estado compartido (incluso si los estados de los clientes pueden ser temporalmente diferentes).

Estado local:

  • Estado local natural: sonidos, interfaz de usuario, representación.
  • Estado local controlado por el usuario: sub-escenas marcadas con el componente Ámbito de script local.
  • Estado local técnico: objetos que no forman parte de la jerarquía de la escena (por ejemplo, materiales de representador, recursos).

Estado compartido:

  • Limitado a variables de script visual y las propiedades de GameObjects y componentes de escena que forman parte de la jerarquía de escenas.
  • Solo se pueden replicar variables y propiedades de tipos simples: enteros, números de punto flotante, booleanos, cadenas, Color, ,//Vector24Quaternion3 , Matrix4x4y .Rect

Cualquier cambio en el estado compartido se envía a través de la red. Esto aumenta el tráfico de red y, si se usa sin cuidado, puede consumir un ancho de banda significativo.

Desencadenadores de scripts compartidos y locales

Todos los flujos de script visual comienzan en respuesta a un evento.

  • Si el evento se origina en un solo cliente (por ejemplo, el usuario hace clic en un botón), el script visual solo se ejecuta en ese cliente.
  • Si el evento se produce en todos los clientes, el script visual se ejecuta en todos los clientes (por ejemplo, evento de temporizador, cambio de propiedad compartida, actualización de variable compartida, avatar entra en desencadenador, cuerpo físico toca el colisionador).

Al agregar un nodo para detectar si se selecciona un objeto, es importante elegir el correcto. Tiene dos opciones: Cuerpo interactuable de malla: está seleccionado localmente y Cuerpo interactivo de malla: está seleccionado. Supongamos, por ejemplo, que quiere tener un botón en el que se pueda hacer clic para desencadenar la teletransportación. Para que el asistente haga clic en el botón y transporte solo a sí mismo, use el nodo Mesh Interactable Body: Is Selected Locally (Cuerpo interactivo de malla: está seleccionado localmente ).

Captura de pantalla del cuerpo interactivo de malla está seleccionado localmente.

Para que el asistente haga clic en el botón y teletransporte a todos los usuarios de la experiencia, use el nodo Mesh Interactable Body: Is Selected (Cuerpo interactivo de malla: está seleccionado ). En cada caso, el texto situado encima del nodo indica el comportamiento que espera:

Captura de pantalla del nodo Mesh Interactable Body Is Selected (Cuerpo interactivo de malla) está seleccionado, lo que afectará a todos los clientes.

Si un script local establece una variable compartida y un segundo script escucha los cambios en esta variable (mediante el desencadenador On State Changed ; vea a continuación), el segundo script se ejecutará en todos los clientes.

Mesh ofrece algunos nodos de script especiales:

  • En Interval se desencadena a intervalos regulares sincrónicamente en todos los clientes.
  • En los desencadenadores State Changed cuando cambian sus entradas (por ejemplo, propiedades compartidas, variables compartidas, locales).
  • Mostrar cuadro de diálogo muestra un cuadro de diálogo de mensaje con texto personalizado que puede proporcionar botones opcionalmente como opciones de respuesta.

Mesh hace que ciertas ventajas y desventajas en favor de la simplicidad:

  • Si más de un cliente intenta cambiar los mismos datos, el último cliente gana (en lugar de usar un modelo de actualización de datos basado en transacciones).
  • Para garantizar la coherencia de los datos, los scripts visuales que se ejecutan en todos los clientes no deben leer y, a continuación, escribir propiedades o variables compartidas. Si esto ocurre, desencadena un error en tiempo de ejecución y anula la ejecución del flujo de script.

procedimientos recomendados

Los scripts visuales son significativamente más lentos que el código nativo de C#. Además, Mesh aumenta los scripts visuales con redes y otras características de integración, y las acciones de script visual aparentemente de poca sobrecarga pueden dar lugar al tráfico de red. Para obtener información sobre cómo obtener el mejor rendimiento de los scripts visuales, se recomienda ver los siguientes artículos:

Introducción a los procedimientos recomendados de Scripting visual
Procedimientos recomendados de scripting visual para el rendimiento
Procedimientos recomendados de scripting visual para redes
Procedimientos recomendados de scripting visual para la depuración

Seguridad

Mesh protege a los usuarios frente a escenarios de amenazas como los siguientes:

  • Contenido de escena en peligro, por ejemplo, intentos malintencionados de acceder a datos locales confidenciales.
  • Cliente o canal de transporte en peligro, por ejemplo, intentos malintencionados de leer o escribir datos remotos inaccesibles en otros clientes.

Para ello, Mesh ejecuta scripts visuales en un espacio aislado (como JavaScript en un explorador web).

En el inicio de la escena, Mesh usa una lista de permitidos seleccionada para validar los scripts visuales para limitar el acceso a determinados tipos de componentes de Unity y un subconjunto seguro de sus propiedades.

En tiempo de ejecución de la escena, Mesh limita el acceso a determinadas partes de la escena:

  • Localmente: evitando el acceso a los elementos internos de Mesh y a otros datos confidenciales.
  • De forma remota: comprobando que el autor de la escena pretende modificar esta parte de la escena. Esto se hace mediante el análisis estático de scripts visuales en el lado del receptor para sus posibles escrituras de escena.

Ejemplos:

  • Un script visual local malintencionado quiere dar a todos los avatares cabezas bobble. Al final, intenta examinar toda la escena de GameObjects que representan encabezados de avatar. Mesh filtra automáticamente los resultados del examen para excluir el sistema de avatares.
  • Un cliente remoto malintencionado quiere desfase la escena al voltear todos los GameObjects al revés. Para lograrlo, envía una actualización de propiedad que establece la escala vertical de cada GameObject en la escena. Sin embargo, dado que no hay ningún script visual en el cliente receptor está diseñado para hacer algo parecido a eso, el cliente local omite la entrada remota.

Integración de malla

Limitación actual: en esta sección se describe una vista previa de las características que siguen funcionando.

Por lo general, la integración con otros componentes suele realizarse cambiando y escuchando los cambios de propiedad del componente. Por ejemplo:

  • Interactables: observe las propiedades "Is Hovered" y "Is Selected".

  • Interacciones físicas: observe cuerpos en volumen desencadenador o en contacto con colisionador.

  • Avatares: lee la posición del avatar, la rotación de vistas y la placa de nombres. (Todavía no disponible).

  • Estado de sesión: enumera los participantes y lee la información de los participantes. (Todavía no disponible).

  • Scripting en la nube: funciona conjuntamente con scripts en la nube que pueden leer y escribir variables y propiedades de componente. (Todavía no disponible).

Algunos componentes proporcionan acciones locales:

  • Administrador de audio
  • Escala de tiempo
  • Animadores
  • Representación: propiedades de material y sombreador de lectura y escritura

La física se controla especialmente porque la simulación de cualquier objeto físico determinado siempre se realiza de forma autoritativa por un solo cliente: su propietario. Para que esto funcione, establecer propiedades físicas desencadena una transferencia automática de propiedad al cliente que aplica el cambio.

Pasos siguientes