Table of Contents

Enero 2023

Descarga Unity

Descargamos Unity hub

https://unity3d.com/get-unity/download

Método de instalación con apt metiendo el server en sources:

echo "deb https://hub.unity3d.com/linux/repos/deb stable main" > /etc/apt/sources.list.d/unityhub.list'

Descargamos la key. La mete en trusted.gpg pero eso es deprecated y la movemos a trusted.gpg.d

mv /etc/apt/trusted.gpg /etc/apt/trusted.gpg_old 
wget -qO - https://hub.unity3d.com/linux/keys/public | sudo apt-key add -
mv /etc/apt/trusted.gpg /etc/apt/trusted.gpg.d/hub.unity3d.com.gpg

Luego lo instalamos

apt update
apt-get install unityhub

Instalamos hub/editor (son unas 5Gb)

Instalamos la última versión LTS que es 2021.3.16f1 y la última que hay que es 2022.2.2f1

https://developer.oculus.com/downloads/package/unity-integration-archive/

Nuevo Proyecto

https://www.youtube.com/watch?v=apL9lIkKLHQ

Nuevo Proyecto como 3D

Vamos a “File > Build Settings” y seleccionamos android y pulsamos switch platform

En “Texture Compression” seleccionamos la recomendada para Oculus: ASTC

Ahora instalamos el plugin de XR. “Edit > Project Settings” luego “XR Plugin Management” y “Install XR Plugin Management”. También lo podemos instalar desde “Window > PAckage Manager”

En la pestaña de Android, seleccionamos Oculus

Instalamos “XR Interaction Toolkit unity”. Seleccionamos “Window > Package Manager”

Seleccionamos “Unity Registry” e instalamos “XR Interaction Toolkit”

Nos dice que reiniciar, le damos que si.

Importamos los ejemplos:

Añadimos las acciones a las manos. Vamos a “Assets > Samples > XR Interaction Toolkit > 2.04 > Starter Assets”. Para verlo en modo lista, seleccionamos la barra de preview de la derecha al mínimo.

Seleccionamos los siguientes Assets:

XRI Default Left Controller
XRI Default Left Grab Move
XRI Default Right Controller
XRI Default Right Grab Move

y pulsamos a la derecha: “Add to ActionBaseController default”

Ahora vamos a “Edit > Project Settings” y en “Preset Manager” y ponemos “Left” y Right“

Añadimos a la escena el jugador, que sería “XR > XR Origin (Action-Based)” En la última versión es “XR Origin (VR)” Importante haber hecho antes lo de asignar los Assets en los controles, sinó, nos añadirá el XR Origin pero sin acciones en las manos.

Añadimos un plano para tener referencia

Si queremos bajamos el suelo un poco para que quede por debajo del jugador

Nos fijamos que XR Origin tenga el componente “Input Action Manager” y que en “Action Assets” tenga “XRI Default Input Actions”

Coger un objeto a distancia

https://www.youtube.com/watch?v=rhD4_NJMl-g

Descargamos linterna de asset store pulsando “add to my assets”

https://assetstore.unity.com/packages/3d/props/electronics/flashlight-18972

En unity lo importamos, Vamos a “Window > Package Manager” y seleccionamos “My Assets”

Si no nos aparece, le damos abajo a refrescar. Seleccionamos la linterna y damos a download

Luego nos aparecerá import, pulsamos y se abrirá otra ventana y nuevamente import.

Nos aparece en nuestros Assets. La arrastramos a nuestra escena, en la pantalla o a la lista de izquierda.

Añadimos cubos a la escena para iluminar con la linterna:

Deshabilitamos la luz de ambiente. Seleccionamos “Directional Light” y quitamos el check.

Apagamos también la linterna. Abrimos el desplegable y en “White light” desmarcamos el check

Añadimos el componente a la linterna para que la podamos coger. Abajo en el menu de la derecha y está “Add Component” y selecctioamos “XR Grab Interactable”

Para evitar que la linterna atraviese el suelo, le añadimos el componente “Box Collider”

La coge con el botón (dedo anular) pero en perpendicular:

Tenemos que crear un un nuevo elemento a la linterna. Pulsamos botón derecho y pulsamos “Create Empty”

Por defecto pone “GameObject”, le cambiamos el nombre a “PuntoCogida”

Será el punto en el que lo cojamos. Ponemos Rotation: -90, 0, 180

Ahora para aplicar la transformación, tenemos que arrastrar el gameobject “PuntoCogida” a la linterna, en “XR Grab Interactable > Attach Transform” o seleccionarlo.

Quedaría así:

Ahora ya la coge bien.

Si pulsamos el stick del mando el objeto se aleja. Si queremos quitar este efecto es con “Anchor Control”

Ahora falta hacer que al pulsar el botón se encienda la luz. Usamos los action events. Vamos a “XR Grab Interactable > Interactable Events”

El botón de activar es el gatillo. El botón “Select” es el anular y “Activate” el gatillo. Pulsamos el + en Activate para añadir propiedad. Arrastramos la luz encendida (WhiteLight) ponemos “GameObject.SetActive” y marcamos el check.

Para que se apague, hacemos lo mismo en Deactivated pero sin marcar el check:

Añadir manos

Descargamos el asset “Oculus Hands Physics.unitypackage”

https://download2270.mediafire.com/ikdov34vpujg/r8vmytboostszzj/Oculus+Hands+Physics.unitypackage

Lo adjunto por si acaso:
oculus_hands_physics.unitypackage.gz

Para instalar el Asset, arrastramos dentro de Assets el fichero “oculus_hands_physics.unitypackage” o lo añadimos desde “Assets” > “import package” > “Custom Package”

Ahora lo añadimos a las manos arrastrando el asset “Oculus Hands Physics > Prefabs > Left Hand Presence” a la mano izquierda y el derecho a la derecha

Coger un objeto a mano

Vamos a hacer que la mano izquierda coja los elementos en local sin necesidad del rayo. Vamos a left hand controller y eliminamos “XR Ray Interactor”

Y ahora añadimos “XR Direct Interactor”

Para que pueda coger el objeto, tenemos que añadir en la mano también el componente “Sphere Collider”

Y luego marcarlo como Trigger

Si no coge el objeto, cuidado que a veces se cambian las coordenadas del Box Colider que le hemos puesto en la mano. Poner a 0

Movimiento Continuo

https://www.youtube.com/watch?v=706Bx0hutM0

Creamos GameObject y lo llamamos “LocomotionSystem” y le asignamos con “Add Component” > “Locomotion System”

Arrastramos nuestro “XR Origin” a la casilla “XR Origin” del componente “Locomotion System”

Al jugador (XR Origin) le añadimos con “Add Component”:

  1. Continuous Move provider
  2. Continuous Turn provider

Seleccionamos la mano derecha para girar. Pulsamos en “Continuous Turn Provider”, marcamos el check de “Use Reference” y en “Reference” ponemos “XRI RightHand Locomotion Turn”

Para la mano izquierda, lo mismo pero con “XRI LeftHand Locomotion/Move”

Ahora tenemos que añadir que haga colisión con los objetos. Añadimos a “XR Origin” el componente “Character Controller” y “Character Controller Driver”. En “Character Controller Driver” ponemos “Min Height” 1 y “Max Height” 2 que sería altura entre 1 metro y 2 metros.

Hay un problema que hace colisión con un objeto cogido y empiezas a volar

https://forum.unity.com/threads/grab-able-objects-interfering-with-locomotion-system.1258443/

Una posible solución:

https://forum.unity.com/threads/grabbed-rigidbody-is-moving-my-xr-rig.1087481/

Lo he solucionado de momento poniendo los objetos en diferentes layers que el cuerpo. Para crear una layer en las propiedades del objeto dentro de layers:

Ponemos el XR Origin (pero sin los children) en un layer, por ejemplo que se llame “jugador” y los objetos en otra layer que se llame objetos. Al cambiar “XR Origin” a la layer Jugador, le tenemos que decir que no cambie los children, porque sinó, también cambiaría las manos y no podríamos coger los onjetos.

Ahora en la matriz de colisiones decimos que esas dos layers no colisionen. Vamos a “Edit > Project Settings” y en “Physics” quitamos el check en el que coinciden las dos layers

Teleport

Teletransportación

https://www.youtube.com/watch?v=ukZWzDqtcCQ