ShV Geschrieben 25. Dezember 2020 Melden Share Geschrieben 25. Dezember 2020 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? Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen More sharing options...
Sascha Geschrieben 25. Dezember 2020 Melden Share Geschrieben 25. Dezember 2020 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. 1 Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen More sharing options...
Recommended Posts
Join the conversation
You can post now and register later. If you have an account, sign in now to post with your account.