Wonderland Engine para Desarrolladores de Unity
Esta página proporciona correspondencias de Unity a Wonderland Engine para scripting y proporciona una lista de diferencias para la construcción de soluciones.
Si prefieres el formato de video, no dudes en consultar nuestra guía de cambio en nuestro canal de YouTube:
Scripting
Wonderland Engine se ejecuta en el Navegador, que ya tiene un runtime de JavaScript incorporado. Esto lo convierte en la mejor opción de lenguaje de scripting para un motor web, ya que no se necesita descargar nada adicional.
Para crear un script, haz clic derecho en el navegador de activos del Editor de Wonderland y crea un nuevo componente de JavaScript / TypeScript. Viene con una plantilla básica para comenzar.
Un buen IDE para usar con JS/TS es Visual Studio Code.
Para obtener más información sobre cómo la API de Wonderland Engine es diferente de la de Unity, consulta la Sección de Código.
TypeScript vs JavaScript
TypeScript agrega verificación de tipos estáticos a JavaScript, lo que lo acerca mucho más a C# y mejora enormemente la autocompletación de código en tu IDE. En general, recomendamos TypeScript a desarrolladores familiarizados con Unity.
Wonderland Engine maneja automáticamente cualquier configuración de tsconfig.json
para ti, simplemente
crea un componente TypeScript desde el navegador de activos.
Empaquetado
Mientras que un flujo de trabajo de Unity a menudo usará la vista previa en el editor, en Wonderland Engine el proceso de empaquetado final es tan rápido (menos de 1 segundo) que la aplicación final en el navegador puede usarse como vista previa.
La página en el navegador se recargará cada vez que repaquetes, y revisa Views > Preferences
para hacer que se ejecute automáticamente después de cada guardado.
Para desplegar la aplicación, simplemente necesitas subir el contenido de la carpeta deploy
de tu
proyecto a un servidor web. Alternativamente, puedes subir a través del plugin “Wonderland Cloud Publish”
que se puede activar en Views > Plugins
.
Múltiples Escenas
Wonderland Engine permite cambiar entre múltiples escenas creadas en múltiples archivos de proyecto (.wlp). Consulta el Tutorial para Cambiar Escenas para instrucciones.
También puedes transmitir partes de una escena en tiempo de ejecución, consulta el Tutorial de Transmisión de Archivos .bin.
Prefabs
Wonderland Engine todavía no tiene un equivalente a los prefabs. En su lugar, puedes configurar
un prototipo en la escena y object.clone()
la jerarquía con todos sus componentes.
Alternativamente, mueve el objeto prefab a una escena separada para cargarlo durante la ejecución usando engine.loadPrefab(…) e instanciarlo.
Importación de Activos
En Wonderland Engine, si se importa un archivo de escena (arrastrándolo y soltándolo desde el navegador de activos ya sea en la Vista de Escena o en el Esquema de Escena, o arrastrando archivos de imagen en la ranura de textura de un material), está vinculado y se monitorea para cambios. Los recursos resultantes que se encontraron en el archivo de escena estarán disponibles en el proyecto y se pueden ver en la vista “Resources”.
Hasta que un archivo se importe desde el Navegador de Activos, no está disponible para su uso en el proyecto. El “Navegador de Activos” podría considerarse un explorador de archivos, lo cual es diferente de lo que podrías estar acostumbrado en Unity.
Optimización de Activos
Una vez importados, los activos pueden optimizarse aún más:
- Las mallas se pueden auto-decemar para reducir el conteo de vértices
- Las mallas se pueden escalar de manera uniforme
- Las imágenes se comprimen automáticamente
- Las imágenes se pueden reducir de escala
Estas configuraciones se encuentran en la vista “Resources”.
Directorios
deploy
contiene el resultado final del empaquetado.static
contiene archivos que se copian a deploy tal cual.cache
contiene resultados de compilación de activos en caché, por ejemplo, imágenes comprimidas. Por lo general, se puede eliminar de forma segura, pero tomará tiempo regenerar.
Estas configuraciones se encuentran en la vista “Resources”.
Animaciones
Las animaciones se reproducen a través del tipo de componente animation
. Las animaciones con esqueleto se actualizan con la casilla de verificación retarget
, si el componente está adjunto a uno de los huesos/articulaciones de la piel de destino.
Aún no se admite la mezcla, edición de fotogramas clave o eventos de fotogramas clave.
Física
Los cuerpos rígidos se crean a través del tipo de componente physx
. La escena
se puede simular en el editor con Debug > Simulate Physics (Alt + S)
.
Networking
La red de Peer-to-Peer puede lograrse con el soporte comunitario de Wonderland Engine PeerJS Networking.
Usa WebRTC, que hasta cierto punto puede utilizar la infraestructura del servidor predeterminada de PeerJS.
Alternativamente, la comunidad ha integrado Colyseus para multiusuario.
Interfaz de Usuario
La interfaz de usuario se configura manualmente con el cursor,
objetivo de cursor, y el componente collider
.
La siguiente UI 2D basada en HTML5 Canvas es mantenida por la comunidad: Proyecto Lazy Widgets.
Terminología
Término | Unity | Wonderland Engine |
---|---|---|
Proyecto | Un archivo de proyecto. | Posiblemente múltiples archivos de proyecto compartiendo un único directorio raíz de proyecto. |
Vista Inspector | Vista Propiedades |
Código
A continuación se muestra una lista de patrones de código comunes y sus equivalentes en Wonderland Engine:
Comportamiento Personalizado
En Wonderland Engine tenemos “Component” en lugar de “MonoBehaviour”. Para escribir uno, simplemente extiende la clase Component:
Unity | Wonderland Engine (JavaScript) | Wonderland Engine (TypeScript) |
|
|
|
Como en Unity, se generarán algunos elementos de la interfaz de usuario para los parámetros.
Obtener componente en objeto de juego
Unity | Wonderland Engine |
|
Adjuntar un componente a un objeto
Unity | Wonderland Engine |
Obtener un objeto hijo
Obtener objeto padre
Establecer una Propiedad de Material
Establecer diversas propiedades de material como color o texturas.
Unity | Wonderland Engine |
Matemáticas
JavaScript no soporta sobrecarga de operadores, lo que significa que tomamos un enfoque diferente para el código matemático.
En muchos casos, se puede evitar completamente escribir código matemático, ya que la API Object3D de Wonderland Engine contiene muchas funciones para manipular transformaciones, implementadas eficientemente en WebAssembly:
1/* Traducir un objeto en múltiples ejes. Para evitar residuos para el vector, usa un miembro vector temporal o constante en el ámbito del módulo. */
2this.object.translateWorld([1, 2, 3]);
3
4/* Rotar un objeto alrededor del eje Y. */
5const AxisY = [0, 1, 0];
6this.object.rotateAxisAngleDegLocal(AxisY, 25);
Recolección de Basura
JavaScript es un lenguaje con recolección de basura lo que puede causar interrupciones no planificadas debido a la recolección automática de basura, es buena práctica evitar agregar memoria al heap en forma de listas/vectores u objetos, que no son recogidos trivialmente.
Es buena práctica crear vectores/cuaterniones temporales ya sea en el constructor o cuerpo de
un componente personalizado y reutilizarlos, o si se usan con cuidado, en el ámbito del módulo de tu componente (sobre la clase).
Vectores constantes como [0, 1, 0]
se declaran mejor en el ámbito del módulo como const AxisY = [0, 1, 0]
.
Biblioteca Matemática
Recomendamos usar glMatrix, que es una biblioteca de matemáticas consciente del rendimiento y la recolección de basura para JavaScript/TypeScript. Ya viene instalada con nuestras plantillas predeterminadas y con nuestros componentes predeterminados, por lo que probablemente no necesites instalarla tú mismo.
En lugar de devolver un vector recién asignado, las funciones de glMatrix
que calculan un vector o cuaternión
esperarán que el primer parámetro sea el lugar donde se debe escribir el resultado. Las funciones que devuelven un primitivo
devolverán el resultado como de costumbre.
Encuentra la documentación completa de la biblioteca de matemáticas glMatrix aquí.
Unity | Wonderland Engine |
JavaScript vs C#
Algunas diferencias más prominentes al venir de C# incluyen:
- Siempre prefija
this.
para acceder a variables miembro. var
crea una “global”, que no está restringida al alcance actual. Es una buena práctica evitarlo y usarlet
oconst
en su lugar, que crean variables de ámbito.