Jump to content
Unity Insider Forum

Touch richtig auswerten.


Recommended Posts

Hi Freunde,

 

ich stehe seit 2 Tagen vor folgendem Problem. Ich möchte in meinem Spiel folgendes könne bzw. Soll in meinem Spiel folgendes möglich sein.

 

[Alles für Android]

 

Nach links und rechts wischen sowie nach oben und unten wischen. Nun sollen gewisse Dinge passieren, wenn ich nach links und rechts bzw oben und unten wische.

 

Dies klappt alles auch super!

 

Jetzt habe ich mir gedacht wäre es viel spaßiger wenn ich eine weitere "Schwierigkeit" einbaue, nämlich das der Spieler zu bestimmten Zeitpunkten auch einfach nur einen single Tap machen kann/muss.

 

Sprich das Touch Verhalten sollte nun Vertical und Horizontal sowie Single Tap verstehen.

 

Das Problem ist nur ich bekomme es nicht hin, dass mein Single Tap registriert wird. Und wenn ich es schaffe, dass er registriert wird kommt es zu einem Fehler, da mein Gerät nicht genau weiß ob ich nun einen z.b. Horizontalen SWIPE machen möchte oder einen Single Touch machen will.

 

Ein anderes bsp. Stellt euch vor ihr müsst nach oben wischen um zu springen und tappen um eure super power zu aktivieren.

 

Jetzt passiert folgendes, dass sobald ich mein Display berühre mein Gerät denkt ich hätte einmal getoucht und schon bin ich im Spiel tod weil ich ja nicht gesprungen bin obwohl ich das hätte sollen. Stattdessen hat sich meine Super Power aktiviert..

 

Hier mal meinCode:

 

Befindet sich in Update()

 

if (Input.touchCount == 0)
	{
		return; //Abbrechen bei 0 Touches
	}
	touch = Input.GetTouch(0);
	switch (touch.phase)
	{
		case TouchPhase.Began:
			newTouch = true; //wir können jetzt wischen
			touchStart = touch.position;
			break;
		case TouchPhase.Moved:
			EvaluateSwipe(touch.position);
			break;
		case TouchPhase.Ended:	  
			newTouch = true;
			break;
		case TouchPhase.Canceled:
			newTouch = false;
			break;
	}

 

Befindet sich in einer Ausgelagerten Methode:

Habe alles unnötige mal rausgelöscht damit es übersichtlicher is.

Kann sein das ein paar klammern oder so nicht richtig sind jetzt, davon einfach nicht beirren lassen. Habe die dann vllt beim übersichtlicher gestalten versehentlich mit gelöscht^^

 

private void EvaluateSwipe(Vector2 touchNow)
{
	if (!newTouch)
	{
		return;
	}
	else
	{
		swipe.x = touchNow.x - touchStart.x;
		swipe.y = touchNow.y - touchStart.y;
		if (GameIsRunning)
		{			  
			if (Mathf.Abs(swipe.y) >= 50) // Beispielhaft wie ich die Verticalen bzw Horizontalen Swipes regle.
			{
				if (swipe.y > 0 && playerIsAllowedToSwipeAgain)
				{

				 }
			}
			if (!) // Hier soll der Code rein um den Single Tap abzufragen
			{
				if (modi2)
				{
				}
				else
				{
				}
				newTouch = false;
			}
		}
	}
}

 

 

 

EDIT: Habe es nun hinbekommen mit touch.tapCount == 2. Will aber nur ungern den double Tap benutzen, allerdings kommt wenn ich touch.tapCount == 1 mache immer noch ein fehler, weil scheinbar auch bei einem Swipe der wert 1 rauskommt. Vorschläge dies zu umgehen werden gerne angenommen :D

Link zu diesem Kommentar
Auf anderen Seiten teilen

  • 2 weeks later...

Eine spontane Idee meiner Seits wäre festzustellen welche Strecke zurückt gelegt wurde zwischen dem Punkt an dem Touch Began stattgefunden hat und dem Punkt an dem Touch Ended ausgelöst wurde. Du könntest dann beide Positionen speichern und am Ende berechnen wie groß die Distanz ist. Oder du misst die Zeit die zwischen den beiden Ereignissen vergangen ist.

Link zu diesem Kommentar
Auf anderen Seiten teilen

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Gast
Auf dieses Thema antworten...

×   Du hast formatierten Text eingefügt.   Formatierung jetzt entfernen

  Only 75 emoji are allowed.

×   Dein Link wurde automatisch eingebettet.   Einbetten rückgängig machen und als Link darstellen

×   Dein vorheriger Inhalt wurde wiederhergestellt.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

Lädt...
×
×
  • Neu erstellen...