Jump to content
Unity Insider Forum

Gleichzeitig springen und laufen


ShV

Recommended Posts

Ich habe folgendes Bewegungsscript geschrieben:

public class Bewegung : MonoBehaviour
{
    private Rigidbody2D myRB;
    public int rechts = 2;
    public int links = -2;
    private bool canJump = false;
    public int sprung = 1;

    private void Start()
    {
        myRB = GetComponent<Rigidbody2D> ();
    }

    private void Update()
    {
        if (Input.GetKey("d"))
        {
            myRB.velocity = new Vector2(rechts, 0);
        }
        if (Input.GetKey("a"))
        {
            myRB.velocity = new Vector2(links, 0);
        }
        if(Input.GetKeyDown("space"))
        {
            if(canJump == true)
            {
                myRB.velocity = new Vector2(0, sprung);
                canJump = false;
                Debug.Log("Jump");
            }
            
        }
        
    }
    private void OnCollisionEnter2D(Collision2D other)
    {
        canJump = true;
    }
}

Der Spieler soll nach Links und Rechts laufen können und springen können. Außerdem soll er in der Lage sein sich zu bewegen und gleichzeitig zu springen. Wenn man aber z.B. a und space drückt, bewegt er sich nur nach links, springt aber nicht und danach kann er auch nicht mehr springen. Was muss ich an meinem Code ändern, damit das möglich wird?

Link zu diesem Kommentar
Auf anderen Seiten teilen

Wenn du springst und dabei a gedrückt hältst, dann springst du in einem Frame und im nächsten Frame setzt du velocity wieder auf (links, 0) - die vertikale Geschwindigkeit ist also 0.

Du kannst einfach die Komponenten eines Vektors überschreiben, anstatt ihn komplett neu zu setzen. Statt

velocity = new Vector( ... );

machst du

velocity.x = ...;

Du änderst dabei x, fasst aber y nicht an. Wenn du gerade im Sprung bist und dann zur Seite steuerst, bleibt die vertikale Komponente intakt. Gleichermaßen überschreibt der Sprung nicht die horizontale Bewegung.

Das Problem: C# hat eine Eigenart, die an dieser Stelle bedeutet, dass du das nicht mit myRB.velocity machen kannst. Ist ne lange Geschichte, erspare ich dir lieber hier. Um das zu umgehen, kannst du den Vektor in eine lokale Variable kopieren...

var velocity = myRB.velocity;

...dann an dieser Variable machen, was du willst...

velocity.x = dieses;
velocity.y = jenes;

...und am Ende den veränderten Wert wieder in den Rigidbody zurückschieben:

myRB.velocity = velocity;

Wenn du das auf deinen aktuellen Code anwendest, sollte das schon gleich viel besser funktionieren.

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...