web-dev-qa-db-fra.com

Dans Unity3D, Click = Touch?

Je veux détecter un événement click/touch sur mon gameObject 2D.

Et voici mon code:

void Update()
{
   if (Input.touchCount > 0)
   {
     Debug.Log("Touch");
   }
}

Debug.Log("Touch"); ne s'affiche pas lorsque je clique sur l'écran ou sur mon gameObject.

28
Lnitus

Réponse courte: oui, le toucher peut être géré avec Input.GetMouseButtonDown().

  • Input.GetMouseButtonDown(), Input.mousePosition, et les fonctions associées fonctionnent en tapant sur l'écran tactile (ce qui est un peu étrange, mais bienvenu). Si vous n'avez pas de jeu multi-touch, c'est un bon moyen de maintenir le bon fonctionnement du jeu dans l'éditeur tout en conservant la saisie tactile pour les appareils. (source: Communauté Unity )
    La simulation de la souris avec des touches peut être activée/désactivée avec l'option Input.simulateMouseWithTouches . Par défaut, cette option est activée.
    Bien qu'il soit bon pour les tests, je crois que Input.GetTouch() devrait être utilisé dans le code de production (car il est capable de gérer les touches simultanées).

  • Une approche intéressante consiste à ajouter la gestion tactile à l'événement OnMouseUp()/OnMouseDown():

    //  OnTouchDown.cs
    //  Allows "OnMouseDown()" events to work on the iPhone.
    //  Attach to the main camera.
    
    using UnityEngine;
    using System.Collections;
    using System.Collections.Generic;
    
    public class OnTouchDown : MonoBehaviour {
        void Update () {
            // Code for OnMouseDown in the iPhone. Unquote to test.
            RaycastHit hit = new RaycastHit();
            for (int i = 0; i < Input.touchCount; ++i)
                if (Input.GetTouch(i).phase.Equals(TouchPhase.Began)) {
                    // Construct a ray from the current touch coordinates
                    Ray ray = Camera.main.ScreenPointToRay(Input.GetTouch(i).position);
                    if (Physics.Raycast(ray, out hit))
                        hit.transform.gameObject.SendMessage("OnMouseDown");
                }
        }
    }
    

    (source: Réponses Unity )

UPD.: Il existe nity Remote application mobile pour simuler le toucher en mode éditeur (fonctionne avec Unity Editor 4 et Unity Editor 5 ).

30
naXa

D'après ce que je comprends, le lecteur Unity ne vous permet pas de déclencher des événements tactiles, uniquement des événements de souris.

Mais vous pouvez simuler de faux événements tactiles basés sur les événements de la souris, comme expliqué dans cet article de blog: http://2sa-studio.blogspot.com/2015/01/simulating-touch-events-from-mouse. html

void Update () {
    // Handle native touch events
    foreach (Touch touch in Input.touches) {
        HandleTouch(touch.fingerId, Camera.main.ScreenToWorldPoint(touch.position), touch.phase);
    }

    // Simulate touch events from mouse events
    if (Input.touchCount == 0) {
        if (Input.GetMouseButtonDown(0) ) {
            HandleTouch(10, Camera.main.ScreenToWorldPoint(Input.mousePosition), TouchPhase.Began);
        }
        if (Input.GetMouseButton(0) ) {
            HandleTouch(10, Camera.main.ScreenToWorldPoint(Input.mousePosition), TouchPhase.Moved);
        }
        if (Input.GetMouseButtonUp(0) ) {
            HandleTouch(10, Camera.main.ScreenToWorldPoint(Input.mousePosition), TouchPhase.Ended);
        }
    }
}

private void HandleTouch(int touchFingerId, Vector3 touchPosition, TouchPhase touchPhase) {
    switch (touchPhase) {
    case TouchPhase.Began:
        // TODO
        break;
    case TouchPhase.Moved:
        // TODO
        break;
    case TouchPhase.Ended:
        // TODO
        break;
    }
}
17
sdabet

La réponse est non, il existe une télécommande à distance Android app ( Play Store ) pour simuler le toucher en mode éditeur. Je pense que cela peut être utile.

2
tim