Jump to content
Unity Insider Forum

Tippen und wischen


Kojote

Recommended Posts

Grüße! :)

Ich habe mal eine Frage zur Gestensteuerung. Habe mir folgendes Script geschrieben:

public void FixedUpdate() {
        if (pause) {
            return;
        }
        // Raycasting für Objektanwahl
        if (mobilePlatform == true) {
            // Steuerung über Touch
            if (heySpielemenueSteuerung.hexagonAktivierungsTyp == 0) {
                // Gestensteuerung wischen
                if(Input.touchCount > 0 & Input.GetTouch(0).phase == TouchPhase.Moved) {
                    if (Physics.Raycast(Camera.main.ScreenPointToRay(Input.GetTouch(0).position), out hit)) {
                        for (int hexagonNR = 0; hexagonNR < hexagonFeld.Length; hexagonNR++) {
                            string name = "Hexagon_";
                            if (hit.collider.gameObject.name == (name + hexagonNR.ToString())) {
                                // Wir haben unser Hexagon gefunden!
                                HexagonAuswahl(hexagonNR);
                            }
                        }
                    }
                }    
            } else {
                // Gestensteuerung Tippen
                if (Input.touchCount > 0) {
                    if (Physics.Raycast(Camera.main.ScreenPointToRay(Input.GetTouch(0).position), out hit)) {
                        for (int hexagonNR = 0; hexagonNR < hexagonFeld.Length; hexagonNR++) {
                            string name = "Hexagon_";
                            if (hit.collider.gameObject.name == (name + hexagonNR.ToString())) {
                                // Wir haben unser Hexagon gefunden!
                                HexagonAuswahl(hexagonNR);
                            }
                        }
                    }
                }
            }
            
        } else {
            // Steuerung mit Maus
            if (Input.GetMouseButtonDown(0)) {
                if (Physics.Raycast(Camera.main.ScreenPointToRay(Input.mousePosition), out hit)) {
                    for (int hexagonNR = 0; hexagonNR < hexagonFeld.Length; hexagonNR++) {
                        string name = "Hexagon_";
                        if (hit.collider.gameObject.name == (name + hexagonNR.ToString())) {
                            // Wir haben unser Hexagon gefunden!
                            HexagonAuswahl(hexagonNR);
                        }
                    }
                }
            }
        }
    }

Ich möchte gerne 3 Steuerungen haben, einmal eine Steuerung mit der Maus, diese funktioniert und können wir mal ausklammern. Dann möchte ich mit der Touchsteuerung eine "Wischsteuerung" und eine "Tippsteuerung" haben. Beide funktionieren, jedoch kann ich bei beiden das selbe machen, ich kann bei der Wischsteuerung auf Tippen und bei der Tippsteuerung auf wischen. Ich hab nun schon einiges versucht, aber entweder funktioniert es gar nicht oder beides gleich, kann man das differenzieren?

Grüße von Kojote

Link zu diesem Kommentar
Auf anderen Seiten teilen

Input.touchCount > 0 & Input.GetTouch(0).phase == TouchPhase.Moved

Finde den Fehler!

Außerdem würde ich Touch-Code echt nicht in FixedUpdate machen, weil du da sehr leicht fehlerhafte unerwartete Werte kriegen kannst.

Als nächstes würde ich den Code mal aufräumen. Pack den Maus-Code und den Touch-Code jeweils in eine Extramethode. Statt zur Laufzeit "mobilePlatform" abzufragen, kannst du Preprozessor-Direktiven benutzen:

#if UNITY_ANDROID || UNITY_IOS
private void UpdateInput()
{
  // Touch-Input
}
#else
private void UpdateInput()
{
  // Maus-Input
}
#endif

Dann werden beide Touch-Methoden plötzlich dieselbe, aber nur die für die richtige Plattform wird mitkompiliert.

Wenn der Code erstmal aufgeräumt ist, kannst du dich viel besser auf das eigentliche Problem konzentrieren. Du willst gleichzeitig Antippen und Wischen anbieten. Mit dem Problem bist du bei weitem nicht der erste, und deshalb gibt es da schon Lösungen für. Der Standard ist, zu schauen, wie Weit vom Startpunkt des Touchs losgelassen wird. Wenn der Touch weniger als x Pixel neben dem Start wieder aufhört, gilt das als antippen, sonst als Wischen. Alternativ kannst du statt Pixel zählen auch schauen ob der Touch auf dem selben Hexagon-Feld wieder aufhärt, auf dem er begonnen hat.

Link zu diesem Kommentar
Auf anderen Seiten teilen

Verrätst du mir den Fehler? Ich kapier das mit dem Touchscreen Count und dem Phase nicht. :-(

Bisher hab ich den Touchscreen immer in Tutorials in Fixen Updates gesehen. Eben wegen dem Ray.  Aber könnte erklären das die Eingabe nicht immer 100 pro erkannt wird, da ja Fixen nicht so oft ausgeführt wird wie Updates.

Des weiteren gibt es einen signifikanten Unterschied zwischen der Touchscreen Abfrage Touch-Input und der Maus Abfrage Mouse-Input? Beides scheint ja auf dem Tabletten zu funktionieren.

Link zu diesem Kommentar
Auf anderen Seiten teilen

Operator für "Und" bei booleans: &&
Operator für bitweises "Und": &

Was Maus-Input auf Touch-Geräten angeht, weiß ich nicht genau bescheid. Müsste da nochmal experimentieren. Jedenfalls ist davon auszugehen, dass Maus weniger kann als Touch. So mehrereTouches und Touch-Phasen und so.

Link zu diesem Kommentar
Auf anderen Seiten teilen

Ich würde da auch noch einmal nachlesen, aber rein von der Funktion wenn man nur kontrollieren will, ob ein Klicks erfolgte,  müsste Mouse-Input reichen. Das da irgendwie Probleme bei der Erfassung wären, habe ich nicht bemerkt.  Denke mal geht dabei eher um den Funktionsumfang.

Also rein gelernt habe ich bei && und & bzw. | bzw. || das es dabei rein um Recourcensparung geht. Das bei Bitweise zu Boolean was anders wäre, wäre mir neu, würde ich aber mal nachverfolgen.  :-)

Link zu diesem Kommentar
Auf anderen Seiten teilen

Archiviert

Dieses Thema ist jetzt archiviert und für weitere Antworten gesperrt.

×
×
  • Neu erstellen...