我的角色的跳跃在直线对撞机上工作得很好,然后我注意到,每次角色跳跃为曲线形对撞机时,我的跳跃总是变得异常强烈。我怎样才能解决这个问题?我将在下面提供跳跃运动的初始代码。
这是img:
这是跳转代码:
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);
}
答案 0 :(得分:2)
当跳上斜坡时,您的Physics2D.OverlapCircle
与斜坡相交,从而使isgrounded=true
,如果按下UpArrow,则可以施加更大的力。
一种解决方法是在跳跃之前检查角色是否尚未向上移动
if (isgrounded && Input.GetKeyDown(KeyCode.UpArrow) && myrb.velocity.y <= 0.0f)
这样,如果您已经向上行驶,就不会再次跳动。
也许您可以尝试使用较小的groundradius
和/或尝试以不与坡度相交的方式移动checkslot.position
。
答案 1 :(得分:2)
对于跳跃的人,将Rigidbody2D.AddForce
与Forcemode.Impulse
一起使用。
还可以更改
if (isgrounded && Input.GetKeyDown(KeyCode.UpArrow))
到
if (Input.GetKeyDown(KeyCode.UpArrow) && myrb.velocity.y == 0)
因此您无需bool isgrounded
希望对您有所帮助:)