Stratos: Punto de Encuentro de Desarrolladores

¡Bienvenido a Stratos!

Acceder

Foros





Script multitouch en C# para Unity no funciona

Iniciado por Ítizhor, 09 de Julio de 2015, 04:38:07 PM

« anterior - próximo »

Ítizhor

¡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.

Darago_malaga

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.


Ítizhor

#2
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.

Darago_malaga

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.

montaycabe

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.
Plutón ¡Planeta! Poniendo a los terricolas en su sitio.
http://www.plutonplaneta.com

Ítizhor

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.






Stratos es un servicio gratuito, cuyos costes se cubren en parte con la publicidad.
Por favor, desactiva el bloqueador de anuncios en esta web para ayudar a que siga adelante.
Muchísimas gracias.