Foros - Stratos

Programadores => General Programadores => Mensaje iniciado por: Ítizhor en 09 de Julio de 2015, 04:38:07 PM

Título: Script multitouch en C# para Unity no funciona
Publicado por: Ítizhor en 09 de Julio de 2015, 04:38:07 PM
¡Hola!

Veréis, llevo varias semanas desarrollando un juego para Android y una de las últimas funcionalidades que tengo que añadir es el multitouch, para poder arrastrar un objeto y pulsar un botón a la vez. El caso es que por más que corrijo y reviso el script, no consigo que funcione. Os dejo aquí el código entero:


using UnityEngine;
using System.Collections;

public class MultitouchController : MonoBehaviour
{
   public int touches = Input.touchCount;

   public LayerMask buttonLM;
   public LayerMask spaceshipLM;
   
   public Transform spaceship;
   public GameObject touchCircleExternal;
   public GameObject touchCircleInternal;

   // Update is called once per frame
   void Update ()
   {
      if (touches > 0)
      {
         for (int repetition = 0; repetition < touches; repetition++)
         {
            Touch touch = Input.GetTouch (repetition);

            Ray touchRay = camera.ScreenPointToRay (touch.position);
            RaycastHit hit;

            if (Physics.Raycast (touchRay, out hit, buttonLM))
            {
               if (touch.phase == TouchPhase.Began)
               {
                  NotificationCenter.DefaultCenter ().PostNotification (this, "Shoot");
               }
            }

            if (Physics.Raycast (touchRay, out hit, spaceshipLM))
            {
                if (touch.phase == TouchPhase.Began)
               {
                  touchCircleExternal.renderer.enabled = false;
                  touchCircleInternal.renderer.enabled = false;
                  touchCircleExternal.animation.enabled = false;
                  touchCircleInternal.animation.enabled = false;
               }

               if (touch.phase == TouchPhase.Moved || touch.phase == TouchPhase.Stationary)
               {
                  spaceship.position = new Vector2 (spaceship.position.x + touch.position.x, spaceship.position.y + touch.position.y);
               }

               if (touch.phase == TouchPhase.Ended)
               {
                  touchCircleExternal.renderer.enabled = true;
                  touchCircleInternal.renderer.enabled = true;
                  touchCircleExternal.animation.enabled = true;
                  touchCircleInternal.animation.enabled = true;
               }
            }
         }
      }
   }
}


Como información de interés decir solo que el script está colocado en la cámara, y que ambos colliders (de la capa buttonLM y de la spaceshipLM) son 3D, para poder ser afectados por el Ray.

Saludos y gracias de antemano,
Ítizhor.
Título: Re:Script multitouch en C# para Unity no funciona
Publicado por: Darago_malaga en 11 de Julio de 2015, 11:47:30 AM
No estoy seguro, pero me parece que cuando haces:

   public int touches = Input.touchCount;

almacenas el valor de "Input.touchCount" que tiene en ese preciso momento (casi seguro 0) en a variable "touches" y luego ya no la vuelves a actualizar en ningún momento.

Yo probaría a cambiar la linea :

if (touches > 0)

por

if (Input.touchCount > 0)

Y colocar Logs para ver si se mete en cada uno de los IFs


Prueba y nos cuentas que tal.

Título: Re:Script multitouch en C# para Unity no funciona
Publicado por: Ítizhor en 12 de Julio de 2015, 12:48:50 AM
Ostras, ¡es verdad! No había caído en ese detalle :O.

Pero con los Debug.Log va a haber un problema: dado que no puedo probarlo en el mismo Unity (es código para input táctil) y las apps de simulación no me van, tendré que compilarlo entero para probarlo, lo cual no deja de ser un fastidio (se aceptan ideas sobre cómo adaptarlo a que sea también testeable desde el propio PC, je, je).

¡Pero gracias! Es algo que ni se me había pasado por la cabeza ;).

Qué haría yo sin tus consejos, ja, ja, ja.
Título: Re:Script multitouch en C# para Unity no funciona
Publicado por: Darago_malaga en 12 de Julio de 2015, 02:05:07 AM
En iOs existe un app llamada Unity Remote 4. Conectas el iPhone/iPad al ordenador y puedes testear el multitouch directamente usando el dispositivo como imput. No se si en android existe algo parecido. Esto te permitira comprobar el multitouch directamente en unity.

Tambien podrias añadir momentaneamente unos labes al canvas y actualizarlos como si fueran el log.
Título: Re:Script multitouch en C# para Unity no funciona
Publicado por: montaycabe en 13 de Julio de 2015, 05:48:02 PM
Cita de: Darago_malaga en 12 de Julio de 2015, 02:05:07 AM
En iOs existe un app llamada Unity Remote 4. Conectas el iPhone/iPad al ordenador y puedes testear el multitouch directamente usando el dispositivo como imput. No se si en android existe algo parecido. Esto te permitira comprobar el multitouch directamente en unity.

Tambien existe para android pero nunca he conseguido que funcionara, en ios funciona del tiron y a la primera y permite controlar el acelerometro y el multitouch en escritorio.
Título: Re:Script multitouch en C# para Unity no funciona
Publicado por: Ítizhor en 14 de Julio de 2015, 01:17:34 AM
Bien, he conseguido que funcione, pero ahora tengo otro problema: cuando toco cualquier punto de la pantalla, se activa lo que correspondería a tocar el layer ButtonLM ("Shoot").

¿Por qué se detecta el toque fuera de los colliders? ¿He indicado bien las fases?

Gracias de antemano,
Ítizhor.