Juego de disparo
====== Oculus GO ======
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.
{{:informatica:realidad_virtual:app:disparo_01.png|}}
Pulsamos player Settings y ponemos el nombre de nuestra compañia y de la aplicación y la versión si queremos
{{:informatica:realidad_virtual:app:disparo_02.png|}}
Mas abajo, en Minium API Level seleccionamos Android 6.0 api level 23 en el desplegable
{{:informatica:realidad_virtual:app:disparo_03.png|}}
Instalamos el plugin de XR
{{:informatica:realidad_virtual:app:disparo_04.png|}}
Tarda unos segundos y seleccionamos oculus que tarda otros pocos segundos:
{{:informatica:realidad_virtual:app:disparo_05.png|}}
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
{{:informatica:realidad_virtual:app:disparo_06.png|}}
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
{{:informatica:realidad_virtual:app:disparo_07.png|}}
Eliminamos elementos que no usaremos como cube y un Canvas
{{:informatica:realidad_virtual:app:disparo_08.png|}}
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
{{:informatica:realidad_virtual:app:disparo_09.png|}}
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
{{:informatica:realidad_virtual:app:disparo_10.png|}}
Que quede algo así:
{{:informatica:realidad_virtual:app:disparo_11.png|}}
Para crear la bala, creamos una esfera y le ponemos tamaño 0.3
{{:informatica:realidad_virtual:app:disparo_12.png|}}
En la parte de abajo añadimos componente Rigidbody pulsando Add Component
{{:informatica:realidad_virtual:app:disparo_14.png|}}
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();
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:
{{:informatica:realidad_virtual:app:disparo_13.png|}}
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
{{:informatica:realidad_virtual:app:disparo_15.png|}}
Tenemos que arrastrar la bala al objeto bala del script gatillo y ponemos el tiempo entre disparo y disparo, por ejemplo 0.5
{{:informatica:realidad_virtual:app:disparo_16.png|}}
Seleccionamos la camara y la ponemos a la altura de los ojos
{{:informatica:realidad_virtual:app:disparo_17.png|}}