it-swarm.com.de

Klicken Sie in unity3D auf = Berühren?

Ich möchte ein Klick-/Berührungsereignis auf meinem gameObject 2D erkennen.

Und das ist mein Code:

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

Debug.Log("Touch"); wird nicht angezeigt, wenn ich auf den Bildschirm oder mein Spielobjekt klicke.

28
Lnitus

Kurze Antwort: Ja, Berührung kann mit Input.GetMouseButtonDown() behandelt werden.

  • Input.GetMouseButtonDown(), Input.mousePosition und zugehörige Funktionen funktionieren als Tipp auf dem Touchscreen (was seltsam, aber willkommen ist). Wenn Sie kein Multi-Touch-Spiel haben, ist dies eine gute Möglichkeit, das Spiel im Editor funktionsfähig zu halten, während die Berührungseingabe für Geräte beibehalten wird. (Quelle: nity Community )
    Die Maussimulation mit Berührungen kann mit der Option Input.simulateMouseWithTouches aktiviert/deaktiviert werden. Diese Option ist standardmäßig aktiviert.
    Obwohl es gut zum Testen ist, glaube ich, dass Input.GetTouch() im Produktionscode verwendet werden sollte (weil es in der Lage ist, simultane Berührungen zu verarbeiten).

  • Interessanter Ansatz ist es, dem Ereignis OnMouseUp()/OnMouseDown() das Touch-Handling hinzuzufügen:

    //  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");
                }
        }
    }
    

    (Quelle: nity Answers )

UPD.: Es gibt nity Remote eine mobile App zum Simulieren von Berührungen im Editor-Modus (funktioniert mit Unity Editor 4 und Unity Editor 5 ).

30
naXa

Soweit ich weiß, können Sie mit dem Unity-Player keine Berührungsereignisse auslösen, nur Mausereignisse.

Sie können jedoch gefälschte Berührungsereignisse basierend auf Mausereignissen simulieren, wie in diesem Blogeintrag erläutert: 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

Die Antwort ist nein, es gibt eine Einheitsfernbedienung Android App ( Play Store ) Zum Simulieren von Berührungen im Editor-Modus. Ich denke, das ist vielleicht hilfreich.

2
tim