2016-03-28 4 views
0

Ich mache gerade ein 2D-Überlebensspiel von oben nach unten. Ich habe den Player-Controller codiert und es funktioniert gut, außer einem Problem, das den Mist aus mir herausfindet! Mein Charakter hört nicht auf sich zu bewegen (oder verlangsamt sich sehr langsam), wenn ich die Bewegungstasten nicht mehr drücke. Wie kann ich es so machen, dass es sofort aufhört, wenn nicht fast sofort? Irgendwelche Tipps helfen Danke! Hier ist der Code, den ich benutze!Wie kann ich meinen 2D-Charakter vom Gleiten nach Bewegung stoppen

using UnityEngine; 
using System.Collections; 

public class CharacterMovement : MonoBehaviour{ 
public float speed; 
private Rigidbody2D rb2d; 

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

void FixedUpdate() 
{ 
float moveHorizontal = Input.GetAxisRaw ("Horizontal"); 
float moveVertical = Input.GetAxisRaw ("Vertical"); 

Vector2 movement = new Vector2 (moveHorizontal, moveVertical); 

rb2d.AddForce (movement * speed); 
} 
} 
+0

Wie sind Sie in der Computerposition? Es sieht so aus, als ob es eine Art "Kraft" benutzt, die besagt, dass die Bewegungsverzögerung vielleicht nicht hoch genug ist? – Kaz

+0

Das ist das Problem. Ich weiß nicht, wie man die Verzögerung erhöht –

+0

Konnten Sie den Code bekanntgeben, der wirklich die Position des Charakters berechnet? – Kaz

Antwort

0

Ich habe einen Weg gefunden, die Verzögerung zu erhöhen. Ich habe meinen Code verschrottet und die Mechanik so geändert, dass der Charakter der Maus folgt und mit der "W" -Taste oder dem Pfeil nach oben vorgeht. Dadurch wurden die Richtungsänderungen geglättet und das Gameplay genussvoller gemacht. Bei der Verlangsamung löste ich das Problem, indem ich den Linear Drag im rigidbody2D Inspector mehr als eins machte und die Geschwindigkeit erhöhte, um den Geschwindigkeitsverlust auszugleichen. Hier ist mein Code für zukünftige Antwort Suchende!

using UnityEngine; 
using System.Collections; 

public class CharacterMovement : MonoBehaviour{ 
public float speed; 
private Rigidbody2D rbtd; 

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

void FixedUpdate() 
{ 
    var mousePosition = Camera.main.ScreenToWorldPoint (Input.mousePosition); 
    Quaternion rot = Quaternion.LookRotation(transform.position - mousePosition, 
              Vector3.forward); 

    transform.rotation = rot; 
    transform.eulerAngles = new Vector3 (0, 0, transform.eulerAngles.z); 
    rbtd.angularVelocity = 0; 

    float input = Input.GetAxis ("Vertical"); 
    rbtd.AddForce (gameObject.transform.up * speed * input); 
} 
} 
Verwandte Themen