Descripci贸n general de las caracter铆sticas de PlayCanvas para crear aplicaciones Web VR



PlayCanvas es una plataforma visual para desarrollar aplicaciones web interactivas. Todo lo que se desarrolla utilizando PlayCanvas se basa en las capacidades de HTML5. PlayCanvas es una aplicaci贸n web, lo que significa que no necesita instalar programas especiales y puede acceder a su proyecto desde cualquier dispositivo en cualquier parte del mundo a trav茅s de Internet. Todos los proyectos que cree se pueden colocar en la red con solo un clic.

Flujo de trabajo en PlayCanvas




Todo en PlayCanvas comienza con un editor visual.

En el lado izquierdo de la pantalla hay una secci贸n de la jerarqu铆a de entidades. Le permite crear entidades vac铆as y predefinidas, como c谩maras, luces, primitivas, audio, interfaces, sistemas de part铆culas o modelos. Cualquier entidad agregada a la jerarqu铆a ingresa autom谩ticamente a la escena.

En el centro de la pantalla est谩 el editor de escenas. Aqu铆 puede cambiar la disposici贸n de las entidades, seleccionarlas para editarlas y simplemente ver c贸mo se ver谩 la escena de su aplicaci贸n.

En la parte inferior del editor de escenas se encuentra la secci贸n de activos. Los activos son todos los archivos y otros elementos que se pueden agregar a sus entidades. Hay varios tipos de activos en PlayCanvas: carpeta, css, cubemap, HTML, JSON, material, script, sombreador y texto. Todos ellos tienen diferentes prop贸sitos.

Y finalmente, en el lado derecho de la pantalla hay una secci贸n de las propiedades de la entidad. Una entidad tiene propiedades b谩sicas: ubicaci贸n, rotaci贸n, escala, nombre, etiquetas, configuraciones de componentes agregados. Las propiedades cambian seg煤n la entidad que se agrega. Por ejemplo, si agregamos un cubo, tendr谩 las siguientes propiedades: tipo, material, configuraci贸n de sombra, capas y grupos.

El proceso general de desarrollo de aplicaciones y juegos en PlayCanvas es aproximadamente el siguiente:

  1. Agregamos los activos necesarios. Por ejemplo: modelos, materiales, audio, video.
  2. Creamos el ambiente de nuestra escena. Por ejemplo: ciudad, casa, paisaje.
  3. A帽adir elementos interactivos. Por ejemplo: un jugador y sus enemigos.
  4. Agregue l贸gica de aplicaci贸n usando scripts.
  5. Publicar un juego o aplicaci贸n en l铆nea.

PlayCanvas y JavaScript




Para agregar l贸gica a nuestro juego o aplicaci贸n en PlayCanvas hay un componente especial: un script. Las secuencias de comandos pueden ser globales, en cuyo caso deben agregarse a la entidad ra铆z de la jerarqu铆a de escenas. Los scripts locales se agregan directamente a la entidad dentro de la jerarqu铆a (por ejemplo, al modelo del personaje del juego). Todos los scripts deben estar escritos en JavaScript desde Despu茅s de todo, escribimos juegos en el navegador. Los amantes de ES6, lamentablemente, estar谩n decepcionados porque PlayCanvas todav铆a usa ES5, y cuando intentas escribir alg煤n tipo de dise帽o desde ES6, el linter incorporado comenzar谩 a maldecir. En general, la anatom铆a del gui贸n es la siguiente plantilla:

var NewScript = pc.createScript('newScript'); NewScript.attributes.add('someString', { type: 'string', default: 'any', title: 'Some string' }); NewScript.prototype.initialize = function() { this.startPosition = this.entity.getPosition(); }; NewScript.prototype.update = function(dt) { this.entity.setLocalPosition(this.newPosition); }; NewScript.prototype.calcaulateNewPosition = function() { this.newPosition = this.startPosition.dot(pc.Vec3.ZERO) }; 

Aqu铆 creamos un nuevo script. Obtiene dos m茅todos principales: inicializar: se llamar谩 cuando la entidad se agregue a la escena. Actualizaci贸n: se llama a cada marco de renderizado. El par谩metro dt en la actualizaci贸n es el tiempo delta:% del segundo para el que se dibuj贸 el 煤ltimo fotograma. Esto se ilustra bien con el siguiente ejemplo: necesita rotar un objeto en un segundo 360 grados. Escribimos el siguiente c贸digo:

 this.entity.rotate(0, 360 * dt, 0); 

Finalmente, el 煤ltimo m茅todo calcaulateNewPosition es un m茅todo personalizado y puede usarse para estructurar c贸digo.

Tambi茅n en el c贸digo existe la posibilidad de agregar un nuevo atributo someString . Este dise帽o le permite definir par谩metros que se pueden especificar m谩s a trav茅s de la interfaz del editor. Para agregar un script a la entidad seleccionada y haga clic en el bot贸n "Analizar" . Si el script ten铆a una construcci贸n con atributos, aparecer谩 un campo especial para completar el valor. Este valor anular谩 el valor predeterminado. PlayCanvas admite muchos tipos diferentes de atributos para un script. Puedes leer m谩s sobre esto aqu铆 .

Los scripts pueden editarse tanto en el editor incorporado como en su m谩quina local en un IDE conveniente para usted. Pero en el segundo caso, debe jugar con la configuraci贸n, porque necesita elevar el servidor emparejado con PlayCanvas.

Bueno, ahora que hemos cubierto las caracter铆sticas principales de PlayCanvas, podemos hablar sobre c贸mo crear escenas de realidad virtual en PlayCanvas.

VR fuera de la caja




PlayCanvas te permite crear una escena de realidad virtual fuera de la caja. Para hacer esto, seleccione la opci贸n adecuada (VR Starter Kit) al crear un nuevo proyecto. Entonces, veamos qu茅 nos ofrece el PlayCanvas predeterminado (spoiler: no tantos como nos gustar铆a).

Al ejecutar la escena, ver谩s tres cubos frente a ti. Cuando los mires (control de la mirada), se abrir谩 una barra de progreso, que har谩 que el cubo sea transparente. Sin controladores ni controles WASD para PC. En esencia, esta administraci贸n le permite crear una peque帽a aplicaci贸n para cartones, porque de forma predeterminada existe soporte para eventos t谩ctiles.

El c贸digo de nuestro kit de inicio VR, de hecho, no est谩 muy bien estructurado y algunas de sus partes est谩n directamente vinculadas a la l贸gica de esta escena. Es decir, para hacer algo diferente, tiene que descubrir c贸mo funciona todo y adaptarse a sus necesidades. No hay una API que le permita conectar cualquier funcionalidad por separado.

Ahora intentemos revisar los archivos del kit de inicio para averiguar de qu茅 es responsable y c贸mo puede usarlo para sus propios fines.

  • look-camera.js . Aqu铆 est谩 la l贸gica responsable de emparejar la pantalla VR y la c谩mara. Adem谩s, usando mouse-controller.js o touch-controller.js podemos transmitir tono y gui帽ada para controlar la c谩mara desde una PC o tel茅fono m贸vil.
  • selector-camera.js . Este archivo tiene una l贸gica oculta para implementar el control de la mirada. Cada elemento que est谩 disponible para la interacci贸n debe agregarse a trav茅s de la c谩mara selector: agregar evento. Adem谩s, su AABB debe calcularse manualmente. Tambi茅n aqu铆 puede encontrar la l贸gica del rayo (ray \ raycaster). PlayCanvas tiene un objeto especial this._ray = new pc.Ray (); que sabe c贸mo encontrar intersecciones con BoundingBox o BoundingSphere .
  • web-vr-ui.js . Solo agrega una interfaz de inicio de sesi贸n VR. Francamente, esto no es muy elegante. Todos los estilos y HTML est谩n directamente en este script. Aparentemente, esto se debe al hecho de que la pantalla 2D para interfaces tiene sus propias limitaciones, y el bot贸n debe estar estrictamente en la esquina inferior derecha.
  • box.js. Aqu铆 encontraremos toda la l贸gica asociada con el cubo: gesti贸n de la barra de progreso, etc.

Como puede ver en lo anterior, no hay mucho en lo que confiar en el kit inicial de VR. Todo lo que se puede hacer es una aplicaci贸n de cart贸n y esto, en mi opini贸n, no es muy interesante, porque los cartones son un tipo de juguete que no da una idea de la experiencia normal de usar VR. Realmente puedes sumergirte en la realidad virtual con Oculus Go, Oculus Rift o HTC Vive.

Ahora hablemos sobre c贸mo podemos agregar soporte de controlador a nuestra aplicaci贸n.

Controladores VR




Ser铆a bueno si PlayCanvas adaptara su almacenamiento para que fuera posible conectar varios elementos conectados con la l贸gica necesaria a la aplicaci贸n con un solo bot贸n. Pero hoy esto no se puede hacer, as铆 que tratemos de hacerlo de manera diferente. Para no escribir toda la l贸gica para comparar la posici贸n de los controladores, podemos usar las soluciones existentes. Hay un gran ejemplo de un laboratorio web VR . Hay muchas cosas interesantes, pero el c贸digo ... el mismo diablo se romper谩 la pierna. Tambi茅n hay una peque帽a escena de Controladores con seguimiento de realidad virtual , solo una escena b谩sica con dos controladores. Aqu铆 es lo mismo y es adecuado para tomar elementos prestados en su proyecto.

Abra la escena VR Tracked Controllers para editar. Primero necesitamos transferir el controlador:

  1. Seleccionamos el controlador, en la secci贸n de propiedades encontramos el modelo, hacemos clic en 茅l, lo incorporamos como un activo.
  2. En la configuraci贸n habr谩 un bot贸n Descargar, en el que hacemos clic y descargamos el modelo y las texturas.
  3. Descomprima los activos y c谩rguelos en su aplicaci贸n. Para hacer esto, simplemente arr谩strelos a la ventana de Activos, que se encuentra debajo. Necesita transferir todo: un modelo en formato JSON y todas las texturas.
  4. El modelo aparecer谩 en nuestra lista de activos. Arr谩strelo al escenario. Y aqu铆 ella ya est谩 all铆. Llam茅moslo controlador izquierdo.

Ahora necesitamos agregar el material:

  1. Cree un nuevo material haciendo clic en el bot贸n "+" en el panel de activos. Nombre del material Material del controlador.
  2. Ahora necesitamos abrir el proyecto fuente y encontrar el material del controlador rastreado all铆 y copiar todas las configuraciones en nuestro material, incluidos mapas (mapas) normales, emisivos, especulares y difusos.

Ahora puede copiar el controlador utilizando el bot贸n Duplicar especial en el panel de jerarqu铆a y nombrar el segundo controlador Controlador derecho.

Eso es todo, los controladores en nuestro escenario. Pero hasta ahora estos son solo dos modelos y para que todo funcione necesitamos transferir los scripts. Veamos con m谩s detalle qu茅 se necesita all铆 y c贸mo funciona:

  • vr-gamepad-manager.js : esencialmente contiene toda la l贸gica necesaria para que sus controladores obtengan la posici贸n y la rotaci贸n del controlador real. Aqu铆, se implementa la l贸gica de codo falso para cascos 3-dof como Oculus Go, Gear VR o Daydream. _updatePadToHandMappings aqu铆 es responsable de localizar los controladores y asignarlos a nuestros controladores. Toda la l贸gica de hacer coincidir el controlador real y virtual est谩 en la funci贸n _poseToWorld. De hecho, aqu铆 los datos se toman de la API de WebXR a trav茅s de la instancia del controlador en s铆 mismo: padPose.position, padPose.poseRotation. La l贸gica a continuaci贸n es responsable de los matices asociados con los diferentes tipos de dispositivos. El script en s铆 debe ser global (es decir, agregado a la ra铆z de la jerarqu铆a).
  • input-vr.js : es responsable de registrar nuestros controladores y trabajar con botones. De hecho, simplemente determina la presi贸n del bot贸n y env铆a el n煤mero del bot贸n presionado. Esto no es muy conveniente, ya que diferentes dispositivos pueden tener botones diferentes y una API GamePad , y no es un hecho que el primer bot贸n en Oculus Go sea un disparador para el controlador HTC Vive. Por lo tanto, tienes que cavar manualmente. Este script debe estar conectado al elemento controlador.

Si todo se hace correctamente, puede ingresar a la realidad virtual y agitar sus controladores. No est谩 mal, aunque el proceso de integraci贸n de la funcionalidad necesaria es bastante inc贸modo y tedioso.

Total


PlayCanvas es un excelente motor que puede usar para crear juegos o aplicaciones WebGL. Pero, debo admitir que est谩 mal adaptado para WebVR. Parece que el objetivo era demostrar lo que PlayCanvas puede hacer para fomentar el inter茅s p煤blico. Pero esta direcci贸n, aparentemente, no ha recibido desarrollo. Por lo tanto, puede crear un juego o aplicaci贸n de realidad virtual, pero tendr谩 que copiar mucho y comprender el c贸digo complicado que se cre贸 solo para demostraci贸n (Web VR Lab).

En el siguiente art铆culo, me gustar铆a llevar a cabo una peque帽a lecci贸n sobre c贸mo crear un control de teletransporte, de modo que tengamos alg煤n tipo de al menos un peque帽o conjunto que le permita iniciar un juego o aplicaci贸n Web VR. 隆Gracias a todos por su atenci贸n!

Source: https://habr.com/ru/post/445692/


All Articles