Jump to content
Unity Insider Forum

Input Touch Frage


SyntaxTalkstoMe

Recommended Posts

Hi,

ich habe jetzt doch mal wieder eine Frage. Und zwar möchte ich gerne, dass wenn man auf der linken Seite des Touchbildschirmes drückt das eine passiert und auf der anderen Hälfte, soll etwas anderes passieren.

Das funktioniert auch so wie ich es mir vorgestellt habe. Allerdings gibt es kleines Steuerungsproblem.

Beim gedrückt halten auf der linken seite des Screens soll der Character steigen. Das heißt man muss den Finger auf dem Display halten. Auf der rechten Seite soll ein einzelner Touchclick abgefragt werden zum schießen eines Feuerballs.

Allerdings vertragen sich irgendwie zwei "gleichzeitige" Befehle auf dem Touchdisplay irgendwie nicht. Die Eingabe auf der rechten Seite des Screens, hebt irgendwie die Eingabe des linken Touches auf. Gibts da irgendein Kniff? Hab zwar gegoogelt, allerdings finde ich nur Einträge, zu Multitouch Sachen, also bestimmte nacheinander folgende Touchbewegungen.

Das Input.MultitouchEnabled ist auf true.

Link zu diesem Kommentar
Auf anderen Seiten teilen

Ich rate jetzt einfach mal blind, dass du Input.GetTouch und dergleichen benutzt.

Denke mal, etwas Code hilft da mehr als tausend Worte:

private void Update()
{
  for (var touchIndex = 0; touchIndex < Input.touchCount; touchIndex++)
  {
    var touch = Input.GetTouch(touchIndex);

    // If touch is on left screen half
    if (touch.position.x <= Screen.width / 2)
    {
      MoveCharacterUpwards();
    }
    else
    {
      if (touch.phase == TouchPhase.Began)
      {
        ShootFireball();
      }
    }
  }
}

Wenn das nicht funktionieren sollte, würde ich stark darauf tippen, dass dein Testgerät extrem alt ist und gar kein Multitouch unterstützt.

Link zu diesem Kommentar
Auf anderen Seiten teilen

Mein Code sieht folgendermaßen aus:

 

Für die rechte Seite des Bildschirms:

 
Für den FEuerball

// die Mitte des aktuellen Kameraauschnittes
        float mitteDesBildschirms = Camera.main.pixelWidth * 0.5f;

        if (Input.GetTouch(1).position.x > mitteDesBildschirms)
        {
            //Up and Down
            if (GameLogic.gameStartet)
            {
                if (Input.touchCount > 0)
                {
                    Touch touch = Input.touches[0];
                    float count = touch.tapCount;
                    
                    if (touch.phase == TouchPhase.Stationary)
                    {
                        if (canFire)
                        {
                            StartCoroutine(Shoot());                            
                        }
                    }              
                    
                }
                
            }
        }

 

Für die linke Seite des Bildschirms:

 float mitteDesBildschirms = Camera.main.pixelWidth * 0.5f;

        //Ist die Touch Position kleiner als die mitte des Bildschirmes, fliegt der Charakter
        //nach oben. Befindet sich die Position größer als die Mitte des Bildschirms, wird ein Feuerball
        //geschossen.
        if (Input.GetTouch(0).position.x < mitteDesBildschirms)
        {
            //Up and Down
            if (!dead && !gameOver && GameLogic.gameStartet)
            {
                if (Input.touchCount > 0)
                {
                    Touch touch = Input.touches[0];
                    float count = touch.tapCount;

                    if (touch.phase == TouchPhase.Stationary)
                    {
                        rb2d.AddForce(new Vector2(0, 80), ForceMode2D.Force);
                    }
               
                }
            }
    

 

 

Link zu diesem Kommentar
Auf anderen Seiten teilen

Da haben wir's ja. Du schaust immer, ob Touch 1 rechts is und Touch 0 links. Da der Index aber neu vergeben wird, je nach dem, welcher Touch zuerst da war, klappt das gerne mal nicht. Hinzu kommt, dass mann mit seinen Patschehändchen durchaus versehentlich mal einen dritten Touch hat oder so.

Gehe deshalb wie bei meinem Code mit einer Schleife durch alle Touches durch, und jeder Touch kann, unabhängig vom Index, alles auslösen.

Link zu diesem Kommentar
Auf anderen Seiten teilen

Ah. Ok. Verstanden.

Also mit anderen Worten gesagt, werden die Touches erstmal in Form vom Count gespeichert und dann sauber per Schleife abgearbeitet.

Ich denke ich hab es verstanden.

Meine oben genannten Codeschnipsel sind aus zwei verschiedenen Skripten. Wäre es sinnvoller, diese dann zusammenzuführen und über einen Count, bzw die gleichen Variablen laufen zu lassen? 

Link zu diesem Kommentar
Auf anderen Seiten teilen

vor 4 Stunden schrieb SyntaxTalkstoMe:

werden die Touches erstmal in Form vom Count gespeichert

Uff... naja, nicht so wirklich. Da wird einfach hochgezählt und dann wird GetTouch mit der hochgezählten Zahl aufgerufen.

vor 4 Stunden schrieb SyntaxTalkstoMe:

Meine oben genannten Codeschnipsel sind aus zwei verschiedenen Skripten. Wäre es sinnvoller, diese dann zusammenzuführen und über einen Count, bzw die gleichen Variablen laufen zu lassen? 

Kommt immer darauf an. Modulare Herangehensweisen sind immer erstmal gut - ist zum Beispiel eine schöne Sache, wenn dein "Linke Seite"-Script drinbleiben kann, wenn du das "Rechte Seite"-Script deaktivierst. Zweimal oder sogar öfter eine Schleife zu haben, die GetTouch aufruft, ist auch kein Problem. Eine Aufteilung wird immer weniger sinnvoll, je mehr sie bedeutet, denselben Code doppelt zu haben. Da das hier nicht wirklich der Fall ist, kann man das schon getrennt lassen.

Link zu diesem Kommentar
Auf anderen Seiten teilen

Archiviert

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

×
×
  • Neu erstellen...