简体   繁体   中英

Moving a RigidBody2D a specific amount of units

In my 2D side-scrolling game I move my character using the built-in physics engine by manipulating the rigidbody.velocity .

I would like to add some sort of dodge (roll) ability, where the character moves 3 units in its direction.

Here is the code I used:

void FixedUpdate() {
    if (Input.GetKeyDown(KeyCode.A) ) {
        Vector2 pos = rb.position;
        pos.x -= 5;
        rb.MovePosition (pos);
    }
}

This method works but the character kind of jumps to the position rather than moving to it (Lerping?) and also doesn't detect collisions despite the body type being dynamic.

Then I tried this:

if (Input.GetKeyDown(KeyCode.A)) {
    rb.AddForce(new Vector2(-50, 0));
}

I found the AddForce way isn't accurate at all.

Is there a proper way of doing this?

Maybe you could change the Transform.pos inside Vector2.Lerp to make it look smooth? (Sorry, not enough experience with 2D in unity.)

Just increase rigibody.velocity for a set time. Your chararter object could then play a fitting aniamtion. If The player should not be able to cancle midrole jsut block the controls for that time.

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM