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 {{:informatica:realidad_virtual:oculus_01.png|}} Vamos a "File > Build Settings" y seleccionamos android y pulsamos switch platform {{:informatica:realidad_virtual:oculus_02.png|}} En "Texture Compression" seleccionamos la recomendada para Oculus: ASTC {{:informatica:realidad_virtual:oculus_03.png|}} 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" {{:informatica:realidad_virtual:oculus_04.png|}} En la pestaña de Android, seleccionamos Oculus {{:informatica:realidad_virtual:oculus_05.png|}} Instalamos "XR Interaction Toolkit unity". Seleccionamos "Window > Package Manager" {{:informatica:realidad_virtual:oculus_06.png|}} Seleccionamos "Unity Registry" e instalamos "XR Interaction Toolkit" {{:informatica:realidad_virtual:oculus_07.png|}} Nos dice que reiniciar, le damos que si. {{:informatica:realidad_virtual:oculus_08.png|}} Importamos los ejemplos: {{:informatica:realidad_virtual:oculus_09.png|}} 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. {{:informatica:realidad_virtual:oculus_11.png|}} 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"\\ {{:informatica:realidad_virtual:oculus_13.png|}} Ahora vamos a "Edit > Project Settings" y en "Preset Manager" y ponemos "Left" y Right" {{:informatica:realidad_virtual:oculus_12.png|}} 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. {{:informatica:realidad_virtual:oculus_10.png|}} Añadimos un plano para tener referencia {{:informatica:realidad_virtual:oculus_14.png|}} 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" {{:informatica:realidad_virtual:oculus_18.png|}} Si no nos aparece, le damos abajo a refrescar. Seleccionamos la linterna y damos a download {{:informatica:realidad_virtual:oculus_19.png|}} Luego nos aparecerá import, pulsamos y se abrirá otra ventana y nuevamente import. {{:informatica:realidad_virtual:oculus_20.png|}} Nos aparece en nuestros Assets. La arrastramos a nuestra escena, en la pantalla o a la lista de izquierda. {{:informatica:realidad_virtual:oculus_21.png|}} Añadimos cubos a la escena para iluminar con la linterna: {{:informatica:realidad_virtual:oculus_22.png|}} Deshabilitamos la luz de ambiente. Seleccionamos "Directional Light" y quitamos el check. {{:informatica:realidad_virtual:oculus_23.png|}} Apagamos también la linterna. Abrimos el desplegable y en "White light" desmarcamos el check {{:informatica:realidad_virtual:oculus_24.png|}} 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" {{:informatica:realidad_virtual:oculus_25.png|}} Para evitar que la linterna atraviese el suelo, le añadimos el componente "Box Collider" {{:informatica:realidad_virtual:oculus_26.png|}} La coge con el botón (dedo anular) pero en perpendicular: {{:informatica:realidad_virtual:linterna_01.jpg|}} Tenemos que crear un un nuevo elemento a la linterna. Pulsamos botón derecho y pulsamos "Create Empty" {{:informatica:realidad_virtual:oculus_40.png|}} Por defecto pone "GameObject", le cambiamos el nombre a "PuntoCogida" {{:informatica:realidad_virtual:oculus_41.png|}} Será el punto en el que lo cojamos. Ponemos Rotation: -90, 0, 180 {{:informatica:realidad_virtual:oculus_28.png|}} Ahora para aplicar la transformación, tenemos que arrastrar el gameobject "PuntoCogida" a la linterna, en "XR Grab Interactable > Attach Transform" o seleccionarlo. {{:informatica:realidad_virtual:oculus_29.png|}} Quedaría así: {{:informatica:realidad_virtual:oculus_30.png|}} Ahora ya la coge bien. {{:informatica:realidad_virtual:linterna_02.jpg|}} 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" {{:informatica:realidad_virtual:oculus_31.png|}} 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. {{:informatica:realidad_virtual:oculus_32.png|}} Para que se apague, hacemos lo mismo en Deactivated pero sin marcar el check: {{:informatica:realidad_virtual:oculus_33.png|}} ====== 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:\\ {{ :informatica:realidad_virtual: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 {{:informatica:realidad_virtual:oculus_44.png|}} ====== 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" {{:informatica:realidad_virtual:oculus_35_1.png|}} Y ahora añadimos "XR Direct Interactor" {{:informatica:realidad_virtual:oculus_35.png|}} Para que pueda coger el objeto, tenemos que añadir en la mano también el componente "Sphere Collider" {{:informatica:realidad_virtual:oculus_36.png|}} Y luego marcarlo como Trigger {{:informatica:realidad_virtual:oculus_37.png|}} 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": -Continuous Move provider -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" {{:informatica:realidad_virtual:oculus_42.png|}} Para la mano izquierda, lo mismo pero con "XRI LeftHand Locomotion/Move" {{:informatica:realidad_virtual:oculus_43.png|}} 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. {{:informatica:realidad_virtual:oculus_46.png|}} 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: {{:informatica:realidad_virtual:oculus_51.png|}} 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. {{:informatica:realidad_virtual:oculus_52.png|}} 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 {{:informatica:realidad_virtual:oculus_53.png|}} ====== Teleport ====== Teletransportación https://www.youtube.com/watch?v=ukZWzDqtcCQ