Jump to content
Unity Insider Forum

Gleichzeitig springen und laufen


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 to post
Share on other sites

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.

  • Thanks 1
Link to post
Share on other sites

Join the conversation

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

Guest
Reply to this topic...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

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

Loading...
×
×
  • Create New...