Jump to content
UnitySpain

Aceptamos donaciones vía Paypal.

UnitySpain.com es un servicio gratuito, pero mantener la Comunidad conlleva una serie de gastos.

Fondo Anual Unityspain: Donados 58,34€ de 150,00€

  • Servidor: Dominio.com y Hosting Web
  • Mantenimiento de los Foros
  • Contenido y Servicios Extras
  • Mantenimiento para Redes Sociales
megaPRO

MENU FLOTANTE EN REALIDAD VIRTUAL

Recommended Posts

A ver si me podeis echar un cable, que ya ando espeso.

Quiero poner un menu flotante en World Space, que se controla con el tipico puntero Gvr Pointer Physics Raycaster, el tema es que me estoy peleando con los vectores, y como existe rotación en el Player, no consigo posicionarlo delante del Player.

Tengo hecho este metodo al que llamo para actualizar su posición, en el que queda orientado como el player y en la posición del player, pero tengo que mover el player hacia atras para poderlo ver.

Si pudiese sumar el vector en la direccion de donde esta mirando, ese seria una opción.

La otra que se me ocurre, es mover al player cada vez que saque ese menu o cualquier otro hacias atras, que tampoco lo se hacer, y quedaria chulo ese efecto.

Os dejo el codigo:

GOExit es el menu y el TargetPosVR es en este caso el Player.

public void PositionMenuExitVR()
    {
        float relativo = 1f;
        Vector3 position = TargetPosVR.transform.position;
        Vector3 rotationMenu = TargetPosVR.transform.eulerAngles;
        GOExit.transform.position = new Vector3(TargetPosVR.transform.position.x, TargetPosVR.transform.position.y, TargetPosVR.transform.position.z);
        GOExit.transform.eulerAngles = new Vector3(0f, rotationMenu.y, 0f);

    }

Me voy a tener que empapar de vectores...

Saludos.

Jesus

Share this post


Link to post
Share on other sites

Venga, vamos a ver si te lo echo.

Olvídate de hacer rotaciones con los ángulos. Solo los Quaternions te van a servir. Las 3 reglas básicas de oro:

- Para sumar rotaciones, se multiplican dos Quaternions.

- Para restar rotaciones, se multiplica un Quaternion por el Quaternion.Inverse del otro.

- No asignes nunca el valor 0 a un eje de una rotación. Réstale el offset inicial de rotación para mantener el eje fijo.

Aplícalo al código y lo vemos.

Saludos

Share this post


Link to post
Share on other sites

yo los menus para los juegos con HTC vive los hago con objetos 3d (con colliders) y usando un rayo (raycast) lanzado desde la "mano" para señalar...

planos con imagenes de los botones y textos y eso....

miro que collider de que "boton" estas señalando y al pulsar el gatillo del controlador pues ejecuto lo que sea que hace ese boton...

el menu hago que este fijo en una posicion pero que siempre mire a la camara (al cameraContainer, el que contienen la camara VR)

si abres un menu inGame pues este aparece en frente del jugador, pero puedes moverte, dejandolo a un lado o atras.... aunque el menu siempre te mirara a ti... 

si esta el menu abierto y "pinchas" fuera (pulsas el gatillo apuntando fuera) se cierra...

Share this post


Link to post
Share on other sites

Bueno,

Pues lo he resuelto de la siguiente forma:

 public void PositionMenuExitVR()
    {
        // Le asigno la posición del player al Menu Exit
        MenuExit.transform.position = TargetPosVR.transform.position;
        
        // Asigno la rotación del Player al Menu Exit
        MenuExit.transform.rotation = TargetPosVR.transform.rotation;
        
        // Muevo el Menu Exit hacia delante para que sea visible al Player
        MenuExit.transform.Translate(Vector3.forward);
    }

Gracias por la ayuda, @iRobb e @Igor

La solucion que aplicas @Igor es interesante, supongo que aplicas algun transform.LookAt o algo así, el caso es que el menu que saco, es el de Salir, y volver al menu de inicio, y necesito que sea rapido encontrarlo, y no ir a una posición en concreto, que me guardo la idea.Gracias tambien.

He estado mirando que son los Quaternions... despues de unos cuantos videos, al cual más gracioso, en fin... aún creo que no se si realmente existen....hahaha, habrá que ponerse, de momento soluciono la papeleta así, aunque no tenga todo el control, y sea una forma chapucera de conseguir lo que buscaba. Como lo habrias resuelto con los Quaternions @iRobb?

La verdad es que entre numeros imaginarios, y reales, ya solo me faltaban los Quaternions...

Saludos.

Jesus.

Share this post


Link to post
Share on other sites

Me gusta que me hagas esa pregunta :4_joy:

Pues le crearía un Canvas en root de ScreenSpace Camera. Le asignaría la cámara VR. Le colgaría un panel de un tamaño de 200x200 por ejemplo. Ajustaría la distancia con plane distance para que me quede donde quiero y hala! Ni transforms ni rotations. Recuerda ajustar el canvas scaler.

Con esto tendrías un UI sencillito para info que te servirá para empezar.

 

Si quieres el menú fijo en uno de los ejes (y por ejemplo), asociado a position y rotation del player que entiendo que tiene la cámara pues:

- Crea un gameobject en root y lo llamamos menú.

- En el start toma el offset de la rotation respecto al player. rotation.player - rotation.menú (mira lo que puse sobre las Q's)

- Luego en el update (posiblemente otro tipo de update) del menú asignas la position.menú del player. Y creas un q con el eje x de la rotation del menú, eje y con la rotation del player y z con la rotation del menú y la asignas a la rotation del menú + el rotation offset que obtuviste en el Start. Esto hará que el menú se mueva en todos los ejes menos en el eje y. Lo mismo para otro.

Si asignas la rotation.menú directamente con las del player + el offset, el menú estará sincronizado con todos los ejes de rotation del player.

En este caso, al estar las rotations sincronizadas, el menú siempre estará apuntando al player sin tener que hacer nada, ya que los dos rotan al unísono.

Edited by iRobb

Share this post


Link to post
Share on other sites

×
×
  • Create New...