Noticias

¡RECUERDA QUE SI ERES UN NUEVO USUARIO, DEBES PRESENTARTE PARA PODER PUBLICAR MENSAJES! | TENEMOS CANAL OFICIAL DE TELEGRAM: t.me/unity3dspain

Android Utilizar dos botones a la vez

Iniciado por gele81, Abril 11, 2018, 08:55:39 PM

Tema anterior - Siguiente tema
Buenas a todos
 
estoy creando un juego donde he creado dos botones, en realidad son dos objetos con un collider.  quiero decir no son buttons del GUI de Unity
 
Cuando pulso una llamado MOV (es invisible), player se mueve hasta esa dirección utilizando un RaycastHit
 
código:
 

RaycastHit hiter;
        Ray ray = Camera.main.ScreenPointToRay(Input.mousePosition);
        if (Physics.Raycast(ray, out hiter))
            if (hiter.collider.name == ("MOV"))
            {
         player.transform.position; = hiter.point;  
            }

 
El otro lo he generado para que realice un disparo. Su código es el siguiente:
 

   private void OnMouseDown()
    {
        player.Fire();
    }

 
 
 
El caso es que no puedo mover y disparar eal mismo tiempo, si quiero disaprar tengo que levantar el botón de movimiento. 
 
Espero que se haya entendido todo... 
 
Y si alguien tiene una solución... Por que cada vez que modifico algo tengo que compilar, instalar... es un poco tedioso
 
Gracias por su tiempo...

Abril 11, 2018, 11:32:28 PM #1 Ultima modificación: Abril 11, 2018, 11:37:37 PM por Igor

player.tranform.position;(punto y coma) = hiter.point;

 
eso creo que esta mal... sobra el punto y coma...
 
 
 
la verdad no lo entiendo muy bien,si puedes explicalo otra vez...
 
"disparas" un rayo desde la posicion del raton para ver si detecta el el objeto boton (que no es GUI)... si lo detecta (y si se supone que tienes esa linea bien, sin el punto y coma) el personaje se "teletransportara" el hiter.point... 
 
pero lo otro no lo entiendo... es un boton GUI? lo detectas tambien con el raton? como puedes detectar dos cosas con el raton?
 
podrias hacerlo igual con un rayCastAll que "traspasa" los objetos y te dice todas las colisiones... aunque no entiendo muy bien que quieres hacer...

Cita de: gele81 date=1523472939El caso es que no puedo mover y disparar eal mismo tiempo, si quiero disaprar tengo que levantar el botón de movimiento. 
   
   
      Espero que se haya entendido todo... 
   
      Y si alguien tiene una solución... Por que cada vez que modifico algo tengo que compilar, instalar... es un poco tedioso
   
   
      Gracias por su tiempo...
   


Supongo que es porque Input.Mouseposition considera que el mouse está en un lugar y no en dos al mismo tiempo, sirve pero necesitas más info... usá touch. del manual:
 
" iOS and Android devices are capable of tracking multiple fingers touching the screen simultaneously. You can access data on the status of each finger touching screen during the last frame by accessing the Input.touches property array. "
 
Fijate las propiedades de los Touch y las cosas que podés sacarle:
 
https://docs.unity3d.com/ScriptReference/Touch.html
 
Es decir podés pasar por todos los "touches" y lanzar rays a cada uno y ver si se apretó tal botón o no, tené cuidado si se da el caso que dos o más touch apretan el mismo botón, para eso tendrías que tener un flag que lo indique (un bool)
 
Te va a interesar la "touchPhase" que te da info del estado del touch
 
https://docs.unity3d.com/ScriptReference/TouchPhase.html
 
entonces te interesa
 
Began: ahí es donde tirás el ray y activás el flag de arriba, también verificás que si estás tocando "MOV" pero está ya ocupado no lo reactivás (Ej tres dedos tocando MOv o disparar). También te puede interesar llevar cuenta de que el "touch i" (el dedo i , o bueno con lo que te interese apoyar en pantalla ) está siendo usado para tal cosa pero no el "touch j" , cosas así.
 
Ended o Moved: Acá es donde verificas nuevamente lo de arriba y reseteas el flag, quizás el "touch i" salió del area de interés o levantaste el dedo.
 
 
 
 
 
 

Buenas 
 
 
 
Después de empaparme todo lo del   Touch y demás... lo he intentado de muchas maneras. (por cierto el touch no lo pilla Unity, tienes que compilar por narices, ¿no?) Sigue el tema igual, si me muevo y lo dejo pulsado y dispara...
 
es decir es como si solo hubiera un Touch
 
Pongo el CODE
 

       Touch myTouch = Input.GetTouch(0);
        if (Input.touchCount >= 0)
        {
            for (var i = 0; i < Input.touchCount; ++i)
            {
                Touch G = Input.GetTouch(i);
                RaycastHit hiter;
                Ray ray = Camera.main.ScreenPointToRay(Input.mousePosition);
                if (G.phase == TouchPhase.Stationary || G.phase == TouchPhase.Moved)
                {
                   
                    if (Physics.Raycast(ray, out hiter))
                        if (hiter.collider.name == ("MOV")) {
                            {
                           
                            player.transform.position = hiter.point;
                            }
                           
                        }
                }
                if (G.phase == TouchPhase.Began)
                {
                    if (Physics.Raycast(ray, out hiter))
                    {
                        if (hiter.collider.name == ("Fire"))
                        {
                            player.CmdFire();
                        }
                    }
                }
            }
        }

 
 
 
Yo creo que esta todo correcto... genero un bocle que me pilla el numeor de toques y cada uno de ellos genera un raycast, dependiendo de donde golpeen o en objeto movimiento o en el de disparo, van a moverse o disparar.
 
pero cuando pulso los dos a la vez no vale... :-(
 
A ver si alguien ve algún fallo o algo por que me estoy volviendo loco... 
 
 

y por qué estás usando la posición del mouse para el ray?
 

Ray ray = Camera.main.ScreenPointToRay(Input.mousePosition);

 
tenés para cada touch una "position" usá eso y fijate que pasa
 
 
 
 

Buenas
 
 pero que clase de brujería es esta!!!!!
 
He cambiado:
 

Ray ray = Camera.main.ScreenPointToRay(Input.mousePosition);

 
por
 

Ray ray = Camera.main.ScreenPointToRay(G.position);

 
y ya vale!!!
 

 
muchas gracias Lightbug, jamas se me hubiera ocurrido modificar eso...

Es que era la raiz de tu problema inicial, el mouse funciona como el touch 0 tengo entendido (por eso te andaba uno solo), es decir hiciste todo bien, pero se te olvidó el último paso
 
Saludos

Etiquetas: