我的角色有时会在统一2d中跳得太强

时间:2018-08-16 07:49:28

标签: unity3d

我的角色的跳跃在直线对撞机上工作得很好,然后我注意到,每次角色跳跃为曲线形对撞机时,我的跳跃总是变得异常强烈。我怎样才能解决这个问题?我将在下面提供跳跃运动的初始代码。

这是img:

enter image description here

这是跳转代码:

float checkgroundradius = 0.50f;
public bool isgrounded2;
public Transform grouncheckslot;
public LayerMask LM;
public float JumpPower;

public float movespeed;
Rigidbody2d RB;

void Update () {

    if (isgrounded && Input.GetKeyDown(KeyCode.UpArrow))
    {
        isgrounded = false;
        jumping = true;
        myanim.SetBool("groundedanim", isgrounded);
        myrb.AddForce(new Vector2(0, jumpower));

    }
}

void FixedUpdate()
{
    isgrounded = Physics2D.OverlapCircle(checkslot.position, groundradius, LM);
    myanim.SetBool("groundedanim", isgrounded);
    myanim.SetFloat("verticalspeed", myrb.velocity.y);

    float move = Input.GetAxis ("Horizontal");
    RB.velocity = new Vector 2 (move * movespeed, RB.velocity.y);
}

2 个答案:

答案 0 :(得分:2)

当跳上斜坡时,您的Physics2D.OverlapCircle与斜坡相交,从而使isgrounded=true,如果按下UpArrow,则可以施加更大的力。

一种解决方法是在跳跃之前检查角色是否尚未向上移动

if (isgrounded && Input.GetKeyDown(KeyCode.UpArrow) && myrb.velocity.y <= 0.0f)

这样,如果您已经向上行驶,就不会再次跳动。

也许您可以尝试使用较小的groundradius和/或尝试以不与坡度相交的方式移动checkslot.position

答案 1 :(得分:2)

对于跳跃的人,将Rigidbody2D.AddForceForcemode.Impulse一起使用。

还可以更改

if (isgrounded && Input.GetKeyDown(KeyCode.UpArrow))

if (Input.GetKeyDown(KeyCode.UpArrow) && myrb.velocity.y == 0)

因此您无需bool isgrounded

希望对您有所帮助:)