Jump to content
Unity Insider Forum

Mit einer Taste nacheinander 2 Aktionen ausführen


killstriker64

Recommended Posts

Guten Tag liebe Community,

ich arbeite gerade an einem Soccer-Spiel in 2D, wo ein Ball den Hütchen ausweichen und man Coins einsammeln muss. Ich habe es hinbekommen, dass man mit a nach links und mit d nach rechts dribbeln kann. Mein Ziel ist es beide Aktionen auf die Leertaste zu verlegen und zwar so, dass beim ersten drücken nach links und beim zweiten drücken nach rechts usw. gedribbelt wird. Habt ihr möglicherweise eine Ahnung, wie man dies hinkriegt? Über eine Hilfe würde ich mich sehr freuen :)

 

Viele Grüße

killstriker64

Link zu diesem Kommentar
Auf anderen Seiten teilen

Hi,

also am einfachsten würde es sein, dass du in der Update Funktion eine Input Abfrage machst mit GetKeyDown und dann in der Abfrage zwei Funktionen hintereinander aufrufst. Wenn das zweite Dribbeln verzögert nach dem ersten Dribbeln auftauchen soll (weil ja erstmal nach Links gedribbelt wird), dann eventuell die zweite Funktion mit einem Invoke aufrufen. 

 

using System.Collections;
using System.Collections.Generic;
using UnityEngine;

public class dribbeln : MonoBehaviour
{
    // Start is called before the first frame update
    void Start()
    {
        
    }

    // Update is called once per frame
    void Update()
    {
        if(Input.GetKeyDown(KeyCode.Space)) //Einmalige Tastaturabfrage für die Taste Space (Leertaste)
        {
            Dribbeln1(); //Erstmal wird die Funktion Dribbeln1 direkt aufgerufen
            Invoke("Dribbeln2", 2f); //Erst mit zwei Sekunden verzögerung, nachdem der Ball nach Links gedribbelt ist, wird die zweite Funktion aufgerufen und der Ball dribbelt nach Rechts
        }
    }

    void Dribbeln1()
    {
        //Funktion zum Dribbeln nach Links
    }
    void Dribbeln2()
    {
        //Funktion zum Dribbeln nach Rechts
    }
}

 

Link zu diesem Kommentar
Auf anderen Seiten teilen

Hi,

ich glaube er meinte das etwas anders. Wenn ich dich richtig verstanden habe, willst du, dass sich der Ball die ganze Zeit bewegt und jedes mal, wenn die Leertaste gedrückt wird, sich die Richtung ändert.

Das kannst du so umsetzen, dass du immer die aktuelle Richtung speicherst und beim Tastendruck den Wert umkehrst. Also etwa so:

int direction = 1;

void Update(){
	if(Input.GetKeyDown(KeyCode.Space)){
		direction *= -1;
	}
	if(direction > 0){
		//move right
	}
	else{
		//move left
	}
}

 

Link zu diesem Kommentar
Auf anderen Seiten teilen

Hallo,

ich habe eine Lösung gefunden. Dieses Problem habe ich mit einer Bool Abfrage gelöst:

	bool direction = true;


        if (Input.GetKeyDown(KeyCode.Space)) {
            if (direction == true) {
                //direction left
                direction = false;
            }
            else {
                //direction right
                direction = true;
            }
        }

Ich möchte mich für die große Hilfe und für die schnellen Antworten bedanken :) Schönen restlichen Sonntag noch.

 

Viele Grüße

killstriker64

Link zu diesem Kommentar
Auf anderen Seiten teilen

vor 12 Stunden schrieb killstriker64:

bool direction = true; if (Input.GetKeyDown(KeyCode.Space)) { if (direction == true) { //direction left direction = false; } else { //direction right direction = true; } }

Ist jetzt nicht nötig, aber vielleicht trotzdem interessant.

Das kannst Du auch (gut leserlich) kürzen:

bool direction = true;

if (Input.GetKeyDown(KeyCode.Space))
{
  direction = !direction; //direction wird einfach negiert
}

 

Link zu diesem Kommentar
Auf anderen Seiten teilen

Archiviert

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

×
×
  • Neu erstellen...