Juego de disparo
Abrimos Unity
./UnityHub.AppImage
Seleccionamos NEW y la versión 2019
Ponemos nombre disparo y seleccionamos 3D
Configuramos el proyecto para Android, vamos a File, Build Settings, seleccionamos Android y pulsamos Switch platform. Tarda 30 segundos.
Pulsamos player Settings y ponemos el nombre de nuestra compañia y de la aplicación y la versión si queremos
Mas abajo, en Minium API Level seleccionamos Android 6.0 api level 23 en el desplegable
Instalamos el plugin de XR
Tarda unos segundos y seleccionamos oculus que tarda otros pocos segundos:
Ahora instalamos el paquete de Oculus. Aquí explico como descargar: http://wiki.legido.com/doku.php?id=informatica:realidad_virtual:unity#descarga_de_unity_integration
Para instalarlo, en la barra del menú, vamos a Assets > Import Package > Custom Package y seleccionamos el paquete de la versión 18 al ser las GO OculusIntegration_v18.unitypackage
Nos aparece ventana para importar. Pulsamos import. Tarda bastante, como unos 10 minutos Sale un aviso que la api es obsoleta, le damos a Go Ahead!. Pide también instalar una nueva versión de OVRPlugin, decimos que si y nos pedirá reiniciar
Vamos a usar una escena ya creda para reutilizar los componentes. Vamos a Assets > Oculus > VR > Scenes y añadimos GearVrControllerTest, bien haciendo doble click o arrastrando a la ventana de arriba Hierarchy
Eliminamos elementos que no usaremos como cube y un Canvas
Lo grabamos en file > Save as dentro de el directorio Scenes
Vamos a File > Build Settings y pulsamos Add Open Scenes y seleccionamos la que acabamos de grabar
Creamos elementos para la escena. Un suelo y unos cubos con un cilindro encima. El cilindro tenemos que añadir componente de rigidBody para que se caiga
Que quede algo así:
Para crear la bala, creamos una esfera y le ponemos tamaño 0.3
En la parte de abajo añadimos componente Rigidbody pulsando Add Component
Una vez añadido deeselccionamos el check en “Use Gravity”
Sobre Assets, botón derecho, create folder Scripts donde guardaremos nuestros scripts.
Dentro de la carpeta, botón derecho Create > C# Script. Lo llamamos Bala. El nombre es importante porque lo pone en la línea:
public class Bala : MonoBehaviour
Podemos poner otro nombre pero tenemos que tener cuidado con eso. Contenido del Script:
using System.Collections; using System.Collections.Generic; using UnityEngine; public class Bala : MonoBehaviour { public float speed = 20.0f; private Rigidbody rb; // Start is called before the first frame update void Start() { rb = gameObject.GetComponent<Rigidbody>(); Destroy(gameObject, 10); } // Update is called once per frame void Update() { rb.AddForce(transform.forward * speed); } private void OnCollissionEnter(Collision collision) { Destroy(gameObject); } }
Ahora asignamos el script al elemento. Lo podemos hacer arrastrando sobre el elemento en Hierarchy o seleccionando el elemento y arrastrarlo en las propiedades de la derecha. Tiene que quedar así. Podemos modificar la variable velocidad de la bala porque la hemos hecho pública:
Creamos una carpeta Prefabs en Assets y arrastramos el elemento que hemos creado como bala ahí. Ya podemos borrar el elemento de hierarchy.
Para probar que funciona, pulsamos el play y seleccionamos la pestaña Scene. Arrastramos la bala de Asset a la escena y vemos que se mueve como una bala
Creamos el script gatillo (recordad que el nombre del fichero es importante, es el nombre de la clase)
using System.Collections; using System.Collections.Generic; using UnityEngine; public class gatillo : MonoBehaviour { public GameObject bullet; public float fireRate; private float nextFire; // Update is called once per frame void Update() { if(OVRInput.GetDown(OVRInput.Button.PrimaryIndexTrigger) && Time.time > nextFire) { nextFire = Time.time + fireRate; Instantiate(bullet, gameObject.transform.position,gameObject.transform.rotation); } } }
Lo añadimos al mando derecho arrastrándolo encima
Tenemos que arrastrar la bala al objeto bala del script gatillo y ponemos el tiempo entre disparo y disparo, por ejemplo 0.5
Seleccionamos la camara y la ponemos a la altura de los ojos