La realidad virtual nos permite a nosotros mismos inmersivo en mundos 3D. Este tutorial le mostrará cómo crear un recorrido VR de múltiples mundos. En el proceso, vamos a ser la importación de modelos de Blender, la creación de componentes de interfaz de usuario interactivas, y cambiar escenas.

Tabla de contenidos

Fuente archivos de código

Puede descargar el proyecto completo aquí. He creado este proyecto en la Unidad 5.6.1.

Creación del proyecto

Para crear el proyecto, abierta Unidad y seleccione “Nuevo proyecto”. Elija un nombre y un directorio para su proyecto.

Usted necesitará un archivo de firma Oculus que es único en su teléfono con el fin de ejecutar el juego en un auricular. Instrucciones para crear un nuevo archivo de firmas, si no tiene uno ya, están en este enlace. Una vez que haya creado un archivo, copiarlo en los Activos de carpeta / plugins / Android / activos en el directorio del proyecto.

Modelos Importación

Vamos a utilizar modelos de bajo-poli creado en Blender para nuestros paisajes y nuestra plataforma de vuelo. Los modelos se encuentran en los Activos / Modelos carpeta del proyecto Unity incluido. Copiar esta carpeta en su propio proyecto.

También puede crear e importar sus propios modelos de Blender. En Blender, eliminar la cámara del modelo y exportar el modelo como un archivo .fbx. Guardar este archivo en el Activo / Modelos carpeta de su proyecto Unity.
No se pierda! extremos de la oferta en

  • Accede a los más de 200 cursos
  • Nuevos cursos añadió mensual
  • Cancelar en cualquier momento
  • Los certificados de terminación

    ACCESO ahora

    Configuración de la escena

    La primera escena será un recorrido por un paisaje montañoso. Cargar los Activos / Modelos carpeta en el panel Proyecto para ver sus modelos. Si ha copiado los Activos / Modelos carpeta del proyecto incluido, arrastran el modelo montañas en el panel Escena. Seleccione Montañas en el panel de jerarquías, y ajustar los valores de la escala en el panel Inspector hasta que las miradas escena agradable.

    Creación del jugador

    A continuación, vamos a crear nuestro objeto Player. El jugador estará atravesando la escena en una plataforma de vuelo, parando en varios puntos de paso en el camino para ver el paisaje y el texto descriptivo.

    Si estás construyendo una experiencia de primera persona no-VR, que podía mover el jugador con sólo mover la cámara. Sin embargo, en la realidad virtual, el auricular es la cámara. Cuando se mueve la cabeza, el auricular envía las coordenadas de la cámara para el juego. Como resultado, el juego no debe estar cambiando las coordenadas de la cámara. Si lo hace, su visión de la cámara no coincidirá con su movimiento de la cabeza real.

    ¿Cómo nos movemos al jugador si el juego no debería cambiar directamente las coordenadas de la cámara? La solución es encapsular la cámara dentro de otro objeto que representa al jugador. Cuando el jugador se mueve dentro del mundo del juego, el juego cambia las coordenadas del objeto de reproductor, pero las coordenadas de la cámara aún están controlados por movimientos de la cabeza físicas del jugador.

    En nuestro juego, crear un nuevo objeto vacío con el nombre del jugador haciendo clic derecho y seleccionando “Crear vacío” en el panel de jerarquías. Arrastre la cámara principal sobre el objeto del jugador en el panel Jerarquía a la cámara principal nido bajo jugador. En el panel Inspector, seleccione MainCamera que la etiqueta de la cámara principal objeto. Esto nos permite acceder a la cámara principal en otros scripts usando main.Camera. Vamos a utilizar esto más adelante.


    Dado que el jugador estará de pie sobre una plataforma, que tendrá que añadir un activo plataforma para el objeto del jugador también. Por Activos / Modelos, arrastre el modelo de plataforma en el objeto Player para anidar ella. En el panel Inspector, restablecer las coordenadas de la plataforma y luego girarla hasta que quede boca arriba en la escena. Queremos que el jugador de pie sobre la plataforma con barandas alrededor de él.

    Usar la transformada widget para mover el objeto Player para la que desea iniciar el recorrido. Para obtener los mejores resultados, coloque el jugador sobre el terreno. Si el terreno está un poco demasiado pequeño en relación con su plataforma, la plataforma o demasiado grande, ampliar el terreno, o la escala de abajo de la plataforma.


    Para hacer mover la plataforma del jugador, tendremos que añadir un script que actualiza la posición del jugador cada cuadro. Crear un script PlayerController.cs nombradas en el Activo / Scripts, y añadir este script para jugador.

    Este es el código:
    utilizando System.Collections; utilizando System.Collections.Generic; utilizando UnityEngine; utilizando UnityEngine.SceneManagement; usando UnityEngine.EventSystems; / ** * Esta clase gestiona el movimiento del jugador. ** / PlayerController clase pública: MonoBehaviour {// conjunto de hitos que el jugador va a visitar. // definido en el inspector. pública WaypointController [] puntos de referencia; velocidad de flotación pública = 2f; // El punto de referencia actual que el jugador se desplaza a. int currentWaypoint = 0; // bandera que indica si el jugador está en movimiento. bool isMoving = true; // Comprueba si alguno de los puntos de referencia son nulos. CheckWaypoints void () {debug.log ( «Comprobación» + waypoints.Length + «waypoints»); si (waypoints == null) {debug.log ( «waypoints matriz es nulo»); } For (int i = 0; i PlayerController contiene un campo de velocidad y una bandera que indica si el jugador debe estar en movimiento. Waypoints el jugador va a visitar se almacenan en la matriz de puntos de ruta. currentWaypoint realiza un seguimiento de lo que es el punto de referencia de destino actual. En Update (), si el jugador ha llegado a un punto intermedio (la distancia es 0), se muestran las paradas jugador (isMoving se establece en false), y la descripción del punto de referencia. Cuando el jugador se hace con un punto de referencia, ContinueTour () se llama, y ​​el jugador se mueve a la siguiente waypoint. Si el jugador ya está en el último punto, LoadNextScene () es llamado para cambiar a la siguiente escena.

    Vamos a discutir la implementación de puntos de referencia más tarde. array puntos de interés de PlayerController está poblada por arrastrando casos de waypoint en el inspector.

    Adición de un retículo

    El jugador tendrá una retícula, o en forma de cruz de orientación, para interactuar con objetos como los botones que vamos a crear. Los activos estándar de realidad virtual, que se incluyen en el paquete VRSamples libres de la tienda de la Unidad, contienen los activos necesarios para crear una retícula. Puede copiar VRStandardAssets de los Activos carpeta en el proyecto se incluye con este tutorial y pegarlo en la carpeta de los activos de su proyecto.

    Añadir los siguientes scripts de VRStandardAssets / Scripts a la cámara principal: VREyeRayCaster.cs y VRInput.cs. También añadir los siguientes scripts de VRStandardAssets / Utilidades / Scripts: VRCameraUI.cs y Reticle.cs. Puede adjuntar secuencias de comandos arrastrándolos desde el panel del proyecto directamente en la cámara principal en el panel jerarca.

    Ahora crear una imagen de la retícula. Haga clic derecho en la cámara principal y seleccione Create->> UI- lienzo. Haga clic derecho en el nuevo lienzo y seleccione Create-> UI-> Imagen. Cambiar el nombre de la imagen de retículo y el lienzo a lienzo retículo.

    En el inspector del retículo, conjunto GUIReticle como el sprite. Seleccionar un color que es fácil de ver. anchura Set y la altura a 1 y la escala de 0.1. Esta imagen retícula a un tamaño razonable conjuntos.


    En el inspector del retículo lienzo, establecer el modo de render a Mundial y arrastre la cámara principal en el campo de la cámara.


    En el inspector de la cámara principal, asegúrese de que los campos de los guiones coinciden con la pantalla arrastrando los objetos apropiados (por lo general la cámara principal, retículo, o retículo lienzo) en los campos.


    añadir waypoints

    El jugador estará visitando Los waypoints juego de objetos que contiene un lienzo con texto y un botón que se pulse.

    Para crear un punto de ruta, crear un nuevo objeto vacío en el panel de jerarquías y el nombre de “punto de referencia”. Use la transformada widget para mover el punto de referencia a un lugar en la escena en la que desea que el jugador parada. Cuando el jugador llega al punto de referencia, el texto se supone que aparecerá, junto con un botón que continúa la gira cuando se hace clic. Texto y botones en la unidad son UI (interfaz de usuario) elementos que deben ser prestados en un lienzo. De hecho, si se intenta crear un elemento de interfaz de usuario por sí mismo, la Unidad creará automáticamente una lona.

    Vamos a anidar un lienzo bajo el punto intermedio y anidar nuestros elementos de interfaz de usuario bajo el lienzo. Haga clic derecho en punto de referencia en el panel de jerarquía y seleccione UI-> Canvas. En el inspector de la tela, seleccione Mundial del Espacio como el modo de procesado. Esto hace que existan las lienzo como un objeto en el mundo del juego en lugar de como una superposición fija sobre la cámara. Bajo Rect Transform, establecer el ancho y la altura a 2,5 y 1, respectivamente. Con píxeles de referencia por serie unidad a 100 en el escalador de la lona, ​​esto equivale a dimensiones de 0,025 metros por 0,01 metros. Set Pos Y a 1. Conjunto Pos Z a -3 para el lienzo que aparezca unos 3 metros más allá del punto de referencia.


    Haga clic en Agregar y elija Componente Grupo lienzo. Un grupo lienzo nos permite establecer la visibilidad de la tela y todos sus componentes de interfaz de usuario.


    Crea un panel anidado bajo la lona haciendo clic derecho del lienzo y seleccionando UI-> Panel. En la sección de imagen en el panel Inspector, elegir la opción “Ninguno” que la imagen original, y establecer un color te gusta. En el panel de jerarquías, haga clic derecho en el panel y seleccione UI-> Texto para crear un elemento de texto anidado bajo el panel.

    El texto aparecerá más nítida si se establece la anchura, la altura y la fuente para valores grandes y después de bajar. Para que coincida con la tela, la anchura y la altura conjunto a 2500 por 100. Set la X, Y, y Z escalas de 0,001 a escala hasta el tamaño de la tela. En la sección Texto del Inspector, tamaño de fuente fija en 100. En el cuadro de texto, escriba una descripción de la ubicación del punto de referencia.


    Queremos que la tela sea visible hasta después de que llegue a un punto intermedio, por lo que necesitaremos para crear otra secuencia de comandos para establecer la visibilidad. En el panel del proyecto, seleccione los Activos / carpeta de scripts y crear un guión WaypointController.cs nombrados por el código siguiente:
    utilizando System.Collections; utilizando System.Collections.Generic; utilizando UnityEngine; utilizando UnityEngine.UI; / ** * Esta clase gestiona lienzos de waypoints. ** / WaypointController clase pública: MonoBehaviour {lienzo waypointDescriptionCanvas; CanvasGroup canvasGroup; // Se llama cuando se crea este objeto. void Awake () {waypointDescriptionCanvas = GetComponentInChildren (); si (waypointDescriptionCanvas == null) {debug.log ( «No se pudo obtener la lona.»); } Else {// Obtener CanvasGroup de la tela, y esconderlo. canvasGroup = waypointDescriptionCanvas.GetComponent (); HideDescription (); }} // Hacer que el CanvasGroup visible. pública ShowDescription void () {waypointDescriptionCanvas.transform.position = Camera.main.transform.position + nueva Vector3 (0f, -0.5f, 3F); //waypointDescriptionCanvas.transform.rotation = new Quaternion (0.0f, Camera.main.transform.rotation.y, 0.0f, Camera.main.transform.rotation.w); // Conjunto de vectores hacia delante de la tela para hacer frente a la cámara, // por lo que el texto es el lado derecho hacia arriba a la cámara. Vector3 dirección = waypointDescriptionCanvas.transform.position – Camera.main.transform.position; waypointDescriptionCanvas.transform.forward = dirección; // Realizar la CanvasGroup visible y permiten interacciones // con sus componentes de interfaz de usuario. canvasGroup.alpha = 1; canvasGroup.interactable = true; } // Ocultar la CanvasGroup. pública HideDescription void () {if (canvasGroup! = null) {// Hacer que el CanvasGroup invisible, // y no permita interacciones. canvasGroup.alpha = 0; canvasGroup.interactable = false; } Else {debug.log ( «canvasGroup es nulo»); }}} 12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455usingSystem.Collections; usingSystem.Collections.Generic; usingUnityEngine; usingUnityEngine.UI; / ** * Esta clase gestiona lienzos de waypoints. ** / publicclassWaypointController: MonoBehaviour {Canvas waypointDescriptionCanvas; CanvasGroup canvasGroup; // llama cuando este objeto es created.voidAwake () {waypointDescriptionCanvas = GetComponentInChildren (); si (waypointDescriptionCanvas == null) {debug.log ( «No se pudo obtener la lona. «);} else {// Obtener CanvasGroup de la tela, y esconderse it.canvasGroup = waypointDescriptionCanvas.GetComponent (); HideDescription ();}} // Hacer que el CanvasGroup visible.publicvoidShowDescription () {waypointDescriptionCanvas. transform.position = Camera.main.transform.position + newVector3 (0F, -0.5f, 3f); // waypointDescriptionCanvas.transform.rotation = new Quaternion (0.0f, Camera.main.transform.rotation.y, 0.0f, Camera.main.transform.rotation.w); // Conjunto de vectores hacia delante de la tela para hacer frente a la cámara, // por lo que el texto es el lado derecho hacia arriba a la dirección camera.Vector3 = waypointDescriptionCanvas.transform.position-Camera.main .transform.position; waypointDescriptionCanvas.transform.forward = dirección; // Realizar la CanvasGr OUP visible, y permiten interacciones // con su interfaz de usuario components.canvasGroup.alpha = 1; canvasGroup.interactable = true;} // Oculta el CanvasGroup.publicvoidHideDescription () {if (! canvasGroup = null) {// Hacer el CanvasGroup invisible , // y no permita interactions.canvasGroup.alpha = 0; canvasGroup.interactable = false;} else {debug.log ( «canvasGroup es nulo»);}}}

    En Awake (), que se llama cuando la secuencia de comandos se carga, asignamos el lienzo y CanvasGroup. El ShowDescription métodos () y HideDescription () toggle la visibilidad de la CanvasGroup cambiando su valor alfa, o la transparencia. También establecen campo interactable del CanvasGroup, que determina si el usuario puede interactuar con los componentes de interfaz de usuario en el Grupo lienzo. No queremos que el jugador pueda hacer clic en un botón invisible.

    Añadir WaypointController.cs al objeto waypoint arrastrándolo desde el panel del proyecto en punto de referencia en la vista de jerarquía.

    Ahora establece el texto del punto de referencia en la escena a algo más descriptivo. También cambie el nombre del objeto de punto de referencia a algo más identificable.

    Botones Clickable

    Cuando el jugador llega a un waypoint, PlayerController.isMoving se establece en false para detener el reproductor, y la lona del punto de referencia se hace visible. El jugador tiene que hacer clic en un botón para cerrar el lienzo y continuar el recorrido. Vamos a añadir este botón a la lona del punto de referencia y que sea un elemento interactivo VR. También vamos a añadir un colisionador al botón.

    Haga clic derecho en la lona en el panel de jerarquías, y añadir un objeto vacío con el nombre VRButton. Este objeto será el padre de un botón estándar Unidad. con y altura a 160 x 30. Conjunto de VRButton


    Haga clic derecho y seleccionar VRButton UI-> para anidar un botón. Establecer el ancho del botón y la altura a 160 × 30, pero establecer los factores de escala a 0,01 para que se ajuste en el lienzo.



    En el inspector del botón, desplazarse hacia abajo hasta que vea la sección “Por Click ()”. Aquí es donde se define una función que se llama cuando se hace clic en el botón. Seleccionar “en tiempo de ejecución o el editor” de la primera lista desplegable. En el menú desplegable a continuación, haga clic en el círculo y, en la ventana emergente, seleccione “Escena”. Encuentra “jugador” y haga doble clic para seleccionarlo. En el menú desplegable restante, seleccione PlayerController-> ContinueTour ().


    Para hacer que el botón interactivo, VRInteractiveItem.cs arrastre de activos / VRStandardAssets / script sobre VRButton. En el inspector, haga clic en “Agregar componente”, y añadir un colisionador de caja. Haga clic en “Editar Colisionador” y cambiar el tamaño del colisionador de modo que encierra el botón en la vista de escena. Estamos añadiendo estos componentes para VRButton, no botón.

    Por último, vamos a unir una secuencia de comandos para VRButton que conectará VRInteractiveItem. OnClick con el botón. Crear un script llamado VRButtonController.cs, y arrastre al objeto VRButton.
    public class VRButtonController: MonoBehaviour {VRInteractiveItem vrItem; Botón; vacío Awake () {// Obtener el VRInteractiveItem y el botón. vrItem = getComponent (); botón = GetComponentInChildren botón <> (); } Void OnEnable () {// Subscribe función onClick del botón para // vrItem de. vrItem.OnClick + = button.onClick.Invoke; OnDisable} void () {vrItem.OnClick – = button.onClick.Invoke; }} 12345678910111213141516171819202122publicclassVRButtonController: MonoBehaviour {VRInteractiveItem vrItem; botón botón; voidAwake () {// Obtener el VRInteractiveItem y los Button.vrItem = getComponent (); botón = GetComponentInChildren botón <> ();} voidOnEnable () {// Subscribe función onClick del botón para // vrItem’s.vrItem.OnClick + = button.onClick.Invoke;} voidOnDisable () {vrItem.OnClick- = button.onClick.Invoke;}}

    Ahora, cuando el botón está dirigido por el retícula, y los clics del jugador, la función onClick del botón (PlayerController.ContinueTour ()) será invocado.

    Prefabs

    Hemos creado un punto de referencia, pero necesitamos más puntos de referencia que tienen diferentes ubicaciones y descripciones con la misma funcionalidad. También puede ser que quiera que desee volver a utilizar estos puntos de referencia en otras escenas. Para lograr esto, se puede convertir en un punto de referencia prefabricada.

    En el panel del proyecto, crear una nueva carpeta, Activos / casas prefabricadas. Arrastre los waypoint de la jerarquía para el panel Activos / casas prefabricadas.

    Ahora añadir más waypoints a la escena arrastrando los waypoint de Activos / casas prefabricadas para el panel de jerarquías. Utilice la vista de escena y la transformada widget a puntos de referencia de posición. Recuerde que debe establecer la descripción de texto de cada waypoint. También puede cambiar los nombres de las instancias de waypoint a algo más identificable.

    Usted tendrá que asignar la función onClick del botón de cada punto de referencia por separado. Esta información no se guarda en el prefabricada.

    A medida que agrega puntos de referencia de la escena, que también tendrá que actualizar gama puntos de interés de PlayerController. Con el jugador destacado, ajuste el tamaño de la matriz en el inspector, o puntos de interés de arrastre en los campos en el orden en que deben ser visitados.


    A pesar de que estamos en el tema de las casas prefabricadas, vamos a pensar en otro objeto complejo en esta escena: Jugador. Cuando se crea una nueva escena, que no debería tener que volver a crear el objeto Player de nuevo. En la programación, no repita a sí mismo. En lugar de ello, arrastre el objeto del jugador en activos / casas prefabricadas para encender jugador en una casa prefabricada.

    Pero recuerde: Usted necesitará para repoblar la matriz de waypoints cuando se agrega jugador a un nuevo escenario. Además, tenga cuidado al configurar la función onClick del botón para seleccionar el juego de objetos jugador, no el jugador prefabricada.

    Escenas Agregando

    Ahora que hemos creado prefabricadas, podemos crear escenas adicionales que serán conectados por PlayerController.LoadNextScene (). Cuando el jugador ha llegado al último punto de referencia en una escena y hace clic en el “Adelante!” botón, PlayerController :: LoadNextScene () se llama para cargar automáticamente la siguiente escena. Si ya estamos en la última escena, se carga la primera escena.
    LoadNextScene vacío () {debug.log ( «Carga de la escena siguiente»); // obtener el índice de la escena actual en el orden de construcción. int currentSceneIndex = SceneManager.GetActiveScene () .buildIndex; // Si hay más escenas, cargue la siguiente escena. if (currentSceneIndex SceneManager es una clase en el espacio de nombres Unity.SceneManagement. La escena actual es devuelto por SceneManager.getActiveScene (). buildIndex identifica la escena por el orden en que se construyeron las escenas. SceneManager.sceneCountInBuildSettings es el número total de escenas. SceneManager.LoadScene () carga un escena por nombre o por índice.

    Después de guardar la escena actual, crear una nueva escena haciendo clic en Archivo-> Nueva escena. Arrastre Ártico de Activos / Modelos a la escena, o importar su propio modelo. Arrastre jugador de activos / Prefabs a la escena, y que la posición en la que desea el jugador para iniciar el recorrido. Arrastre los waypoint de activos / Prefabs tantas veces como desee, y personalizar el nombre y la descripción de cada waypoint. A continuación, arrastre los objetos de punto de referencia en puntos intermedios gama del Jugador en el inspector en el orden que desee que se visitaron.

    Construcción del Proyecto

    Una vez que esté listo para probar el juego, seleccione Archivo-> configuración de generación en el menú. Arrastre todas las escenas que desee incluir en el panel del proyecto a la ventana de “Escenas en Build” en la configuración de generación. Seleccionar Android como plataforma.

    Haga clic en el botón “Configuración del reproductor” para cargar la configuración en el panel Inspector . Introduzca un nombre de la empresa y el nombre del producto. Vaya a la sección de representación, y asegúrese de que está marcada “Realidad virtual compatible”. Haga clic en “+” en “SDK de Realidad Virtual” y añadir Oculus.


    En la sección “Identificación”, dar al juego un nombre de paquete. Típicamente, los nombres de paquetes son nombres de dominio invertido, tales como org.gamedevacademy.gearvr.vrtour. Usted no está limitado a los nombres de dominio existentes. Eligió un nivel mínimo de la API de Android 6.0 “malvavisco”, que es el nivel más bajo de la API que soporta el material VR.

    Cuando esté listo para poner a prueba su juego, haga clic en el botón “Ejecutar Construir y” en el Archivo -.>”Construir y Ejecutar” ventana para construir un APK y ejecutarlo en un teléfono conectado

    Disfrute de la gira!

    Mensajes relacionados
    > <img src =

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *