Codificación para HoloLens con Unity 5 - Parte n.º 2:Creación de un proyecto simple de Hello World

 C Programming >> Programación C >  >> Tags >> Unity
Codificación para HoloLens con Unity 5 - Parte n.º 2:Creación de un proyecto simple de Hello World

La última vez analicé la configuración de mi entorno de desarrollo para permitirme desarrollar para el emulador de Microsoft HoloLens. Esta vez, voy a crear un proyecto en Unity, agregar un objeto primitivo simple y usar algo de C# para hacer algo interesante con este objeto.

Crear un nuevo proyecto de Unity 5

Si instaló Unity correctamente, se le mostrará una pantalla como la siguiente después de abrir Unity 5 HTP por primera vez.

Haga clic en el botón "Nuevo proyecto" y la pantalla debería cambiar a una similar a la siguiente. Elegí el nombre "HelloWorld" para mi proyecto y lo guardé en mi escritorio.

Después de ingresar el nombre y la ubicación del nuevo proyecto de Unity, hice clic en el botón "Crear proyecto" y Unity muestra la siguiente pantalla. Este es un proyecto (casi) vacío, que solo tiene la cámara principal del proyecto y la luz direccional predeterminada.

El siguiente paso es actualizar la escena con algunas configuraciones que tengan sentido para una aplicación de HoloLens.

Actualización de la escena para HoloLens

La cámara predeterminada se establece a unos 10 m detrás del punto de origen de la escena. Vamos a realizar algunos cambios en esta cámara usando la pestaña Inspector en el lado derecho.

  • Primero, cambié la posición de la cámara a (0, 0, 0), lo que significa que X =0, Y =0 y Z =0;
  • A continuación, en la sección Cámara, cambié el valor del menú desplegable Borrar banderas a Color sólido. .
  • Finalmente, cambio la propiedad Fondo a Negro (R =0, G =0, B =0, A =0).

Estos aseguran que la cámara, es decir, el punto a través del cual veremos el mundo con HoloLens, esté en el punto de origen.

Además, eliminamos el Skybox predeterminado (es decir, la imagen de fondo) y todos los píxeles representados en negro en nuestra escena aparecerán como transparentes en HoloLens.

Añadir un cubo

Ahora que tenemos la escena configurada para HoloLens, es hora de agregar un objeto simple a nuestra escena.

Primero, hacemos clic con el botón derecho en nuestro panel Jerarquía a la izquierda y al costado, seleccionamos "Objeto 3D" y luego seleccionamos "Cubo" en el submenú que aparece.

Debería aparecer un cubo simple en el centro de la escena, como en la imagen de abajo. Si la imagen no aparece en el lugar correcto, asegúrese de que el objeto cubo aparezca en el menú Jerarquía con el mismo nivel de sangría que la cámara principal y la luz direccional.

Crear un material

Me gustaría que mi cubo fuera un poco más interesante que un simple bloque gris; me gustaría que tuviera un color rojo. En Unity, podemos lograr esto creando un Material activo y agregando este componente al cubo gris.

Para crear un material, hago clic derecho en Activos en el panel Proyecto en la parte inferior izquierda de la pantalla. En el menú contextual que aparece, selecciono "Crear", y en el siguiente menú que aparece, selecciono "Material".

Se crea un nuevo elemento y aparece en el panel Activos:el cursor y el enfoque están en este elemento, e ingresé el valor "Rojo". Además, aparece una bola gris en la esquina inferior derecha. En el panel Inspector, hice clic en el selector de color junto a la etiqueta "Albedo". En la ventana emergente que aparece, seleccioné un color rojo, que actualiza el color de la pelota en la esquina inferior derecha, como se muestra a continuación.

Ahora que he creado un material, puedo asignarlo al cubo. Primero seleccioné el objeto Cubo en el panel Jerarquía. Luego, arrastré el material llamado "Rojo" al panel Inspector en el lado derecho. Esta es una superficie a la que puedo arrastrar y soltar componentes. Tan pronto como arrastro el material rojo al Inspector del cubo, el cubo se vuelve rojo.

Mover el cubo

No es muy útil tener este cubo alrededor de nuestro punto de vista; tiene más sentido tenerlo frente a nuestro punto de vista.

La forma más fácil de mover el cubo es usar el eje arrastrable que apunta hacia afuera desde las caras visibles del bloque. Hice clic en la flecha azul, correspondiente a la dirección Z, y la arrastré hacia adelante unas 3,5 unidades.

Solo para hacer que este bloque sea un poco más visualmente interesante, me gustaría rotarlo sobre sus ejes. Para hacer esto, hago clic en el botón de rotar en la esquina superior izquierda (es el tercer botón en el grupo de cinco y está seleccionado en la imagen de abajo). El cubo rojo ahora tiene un conjunto de círculos que lo rodean, en lugar de las tres flechas. Puede hacer clic en estos círculos y arrastrarlos para girar el cubo, como se muestra a continuación.

Eso es todo para la primera sección. Puede obtener una vista previa de lo que verá a través de HoloLens haciendo clic en el botón Reproducir en la parte superior central de la pantalla, que mostrará algo como la pantalla a continuación. El cubo girado flota en un mundo negro, directamente frente a nuestro punto de vista.

Finalmente, guardé la escena presionando Ctrl+S y escribí HelloWorld; puede ver esto en el panel de activos.

Cree un script C# para hacer que el objeto gire

Llevemos la complejidad a un nivel superior. Podemos escribir scripts C# y aplicarlos a objetos en nuestro mundo virtual.

Es muy sencillo crear una secuencia de comandos:haga clic con el botón derecho en la nota Activos en el panel Proyectos y cree una secuencia de comandos C# desde los menús contextuales, como se muestra a continuación.

Creé un script llamado RotatorScript. Para editar esto, hago doble clic en él. Esto abre VS2015 para mí, aunque en su instalación podría abrir MonoDevelop.

Ingresé el código a continuación:

using UnityEngine;
 
public class RotationScript : MonoBehaviour {
 
	public float YAxisRotationSpeed;
 
	// Update is called once per frame
	void Update () {
            this.transform.Rotate(0, YAxisRotationSpeed * Time.deltaTime, 0, Space.Self);
	}
}

El código anterior hace una cosa:cada vez que el motor de renderizado actualiza el marco, el objeto al que se aplica el script gira un poco alrededor de sus propios ejes. Específicamente en este caso, he especificado que la rotación del eje X y la rotación del eje Z sean cero, y la rotación alrededor del eje Y será YAxisRotationSpeed grados por segundo.

El código anterior se refiere a Time.deltaTime – esta es una función integrada de Unity para decirnos cuánto tiempo ha pasado desde el último cuadro. Por lo tanto, si multiplicamos la velocidad:YAxisRotationSpeed – por la cantidad de tiempo que pasó – Time.deltaTime – el resultado es el número de grados para rotar nuestro cubo.

Una vez que guardé el script en Visual Studio, volví a Unity. Seleccioné mi Cubo en el panel Jerarquía y luego arrastré el RotationScript al Inspector para el Cubo. En la página de propiedades que aparece en el Inspector, cambié el valor de "Velocidad de rotación del eje Y" a 50.

Ahora, cuando hago clic en el botón Reproducir en Unity, puedo volver a ver la vista del juego de la escena, pero esta vez el cubo gira sobre su propio eje Y.

¡Hola Mundo!

Se me ocurrió que con las habilidades simples aprendidas en esta publicación podría hacer algo bastante interesante con Unity:en lugar de un cubo giratorio, podría agregar una esfera a la escena, aplicar un material que fuera una imagen de la Tierra y mostrar un globo giratorio, que sería un proyecto de "Hola, Mundo" mucho más apropiado. Incluso podría agregar una segunda esfera para girar alrededor de esta, que podría representar la Luna.

  • Como primer paso, hice clic en el objeto Cubo en mi jerarquía y lo eliminé. Esto eliminó el cubo rojo de mi escena.
  • Luego, hice clic derecho en el panel Jerarquía y seleccioné "Crear vacío". Esto creó un GameObject vacío en la jerarquía.
  • Usando el panel Transformar en el Inspector para el GameObject, cambié la posición Z a 4, colocando así el GameObject 4m frente a mi punto de vista.

  • Luego, hice clic con el botón derecho en GameObject en la Jerarquía y agregué un Objeto 3D de esfera. Cambié el nombre de esta "Tierra" y cambié los valores de escala X, Y y Z a 2 (es decir, dupliqué su tamaño). Observe cómo se sangra esto en GameObject, y también cómo su posición en el cuadro Transformar en el Inspector está en (0, 0, 0). Esto significa que su centro está en el origen del GameObject principal, y los cambios en la posición lo moverán en relación con el GameObject principal.

  • Después de esto, hice clic con el botón derecho en el GameObject en la Jerarquía nuevamente y agregué otra esfera 3d. Llamé a este objeto "Luna" y cambié los valores de escala X, Y y Z a 0.5 (es decir, reducí su tamaño a la mitad). ). También cambié el valor de la posición X a 2, moviendo así su centro 2 m a la derecha del centro del objeto "Tierra".

  • Finalmente, para esta parte, seleccioné el GameObject principal en la vista de jerarquía y arrastré el "RotationScript" a la superficie del Inspector. En la página de propiedades que aparece en el Inspector, cambio la "Velocidad de rotación del eje Y" a 50.

Cuando presiono el botón Reproducir, puedo ver la animación renderizada y mostrar una escena de esto a continuación.

Puedo ver que ambos objetos giran correctamente:la esfera central más grande gira sobre su propio eje vertical central y la esfera más pequeña gira alrededor de ese mismo eje. Sin embargo, no se ve muy bien con el color blanco predeterminado. Puedo mejorar esto usando algunos recursos gratuitos de la Tienda de recursos de Unity.

Descargar recursos de la tienda de recursos de Unity

Busqué en la tienda Unity Asset a través de un navegador, en http://www.assetstore.unity3d.com, para obtener representaciones gratuitas de Earth y encontré el recurso que se muestra a continuación (y vinculado aquí).

Hice clic en el botón "Abrir en Unity" y esto cambió mi aplicación enfocada a Unity. La pestaña de la Tienda de activos estaba abierta y pude hacer clic en el botón "Descargar" para adquirir este recurso (vi una advertencia de compatibilidad sobre cómo se creó con Unity 4). Después de un par de ventanas emergentes, se me mostró la siguiente ventana y elegí importar uno de los archivos de materiales de la Tierra, que se muestran a continuación.

Después de hacer clic en el botón "Importar", este archivo jpeg apareció en mi lista de Activos, usando su estructura de directorio original.

Pude seleccionar esto de la carpeta Assets/EarthSimplePlanets/Textures en el panel Proyecto y arrastrar el archivo "EarthSimple1.jpg" a la superficie del Inspector para la esfera de la Tierra, y la superficie de esta esfera se actualiza para parecerse mucho más a mundo más característico.

Finalmente, seleccioné el GameObject de la Jerarquía e incliné el eje Z en -15 grados, para dar una ligera inclinación planetaria. Después de presionar el botón Reproducir, la animación muestra una esfera blanca que gira alrededor de un planeta.

Podríamos mejorar esto aún más descargando más activos de la tienda para la Luna (un buen candidato es el paisaje lunar vinculado aquí), pero por ahora, creo que se verá bastante bien en nuestro mundo de realidad mixta de HoloLens.

Conclusión

Eso es todo por esta publicación. Hasta ahora, hemos:

  • creó un nuevo proyecto con Unity,
  • añadió algunos objetos primitivos a este mundo,
  • cambió el color de estos objetos con materiales,
  • agregué un script C# para hacer que este objeto se mueva,
  • dispuso objetos para hacerlos orbitar un eje fuera del objeto, y
  • Usamos la tienda de recursos de Unity para descargar recursos que hacen que nuestro modelo sea más realista.

La próxima vez, hablaremos sobre la implementación real en el emulador de HoloLens:hay algunos consejos y trucos que quiero compartir para que el viaje de otras personas sea un poco más fácil que el mío.