C# 跳转2D platformer后立即重置跳转计数
我对这一切都很陌生,所以对于新手犯的错误我很抱歉。我正在做一个2D平台 我正在通过RayCast检查地面,在玩家跳跃后,跳跃计数器重置为0,因此我得到一个额外的跳跃。我尝试添加一个0.2秒的计时器,然后它才能重置,但这在连续多次跳跃(兔子跳跃)时造成了麻烦。有什么帮助吗C# 跳转2D platformer后立即重置跳转计数,c#,unity3d,C#,Unity3d,我对这一切都很陌生,所以对于新手犯的错误我很抱歉。我正在做一个2D平台 我正在通过RayCast检查地面,在玩家跳跃后,跳跃计数器重置为0,因此我得到一个额外的跳跃。我尝试添加一个0.2秒的计时器,然后它才能重置,但这在连续多次跳跃(兔子跳跃)时造成了麻烦。有什么帮助吗 private void FixedUpdate() { GroundCheck(); if (state != State.hurt) { Mov
private void FixedUpdate()
{
GroundCheck();
if (state != State.hurt)
{
Movement();
DoubleJump();
StateMachine();
}
HurtCheck();
anim.SetInteger("state", (int)state);
}
private void Movement()
{
//Input.GetAxis returns a value between -1 up to 1
//Edit> Project Settings> Input> Axis> Horizontal
float hDirection = Input.GetAxisRaw("Horizontal");
//holding down "D" makes the value positive and vice versa
if (hDirection < 0)
{
rb.velocity = new Vector2(-speed, rb.velocity.y);
transform.localScale = new Vector2(-1, 1);
}
else if (hDirection > 0)
{
rb.velocity = new Vector2(speed, rb.velocity.y);
transform.localScale = new Vector2(1, 1);
}
else
{
}
if (Input.GetButtonDown("Jump") && isGrounded == true)
{
Jump();
}
}
private void Jump()
{
rb.velocity = new Vector2(rb.velocity.x, jumpforce);
state = State.jumping;
jumpCount += 1;
}
private void GroundCheck()
{
Debug.DrawRay(transform.position, Vector2.down * hitDistance, Color.green);
RaycastHit2D hit = Physics2D.Raycast(transform.position, Vector2.down, hitDistance, ground);
if(hit.collider != null)
{
isGrounded = true;
jumpCount = 0;
}
else
{
isGrounded = false;
}
}
private void DoubleJump()
{
if (Input.GetButtonDown("Jump") && isGrounded == false && jumpCount < 2)
{
rb.velocity = new Vector2(rb.velocity.x, jumpforce);
jumpCount += 1;
}
}
private void FixedUpdate()
{
地面检查();
if(state!=state.hurt)
{
运动();
双跳();
状态机();
}
HurtCheck();
anim.SetInteger(“状态”,(int)状态);
}
私人空虚运动()
{
//Input.GetAxis返回一个介于-1到1之间的值
//编辑>项目设置>输入>轴>水平
float hddirection=Input.GetAxisRaw(“水平”);
//按住“D”键可使值为正,反之亦然
如果(hDirection<0)
{
rb.velocity=新矢量2(-speed,rb.velocity.y);
transform.localScale=新向量2(-1,1);
}
否则如果(hddirection>0)
{
rb.velocity=新矢量2(速度,rb.velocity.y);
transform.localScale=新向量2(1,1);
}
其他的
{
}
if(Input.GetButtonDown(“Jump”)&&isground==true)
{
跳跃();
}
}
私有无效跳转()
{
rb.velocity=新矢量2(rb.velocity.x,跳跃力);
state=state.jumping;
跳跃计数+=1;
}
私人空位地面检查()
{
Debug.DrawRay(transform.position,Vector2.down*命中距离,Color.green);
RaycastHit2D hit=Physics2D.Raycast(transform.position,Vector2.down,hitDistance,ground);
if(hit.collider!=null)
{
isGrounded=true;
跳数=0;
}
其他的
{
isfounded=false;
}
}
私有无效双跳()
{
if(Input.GetButtonDown(“Jump”)&&isground==false&&jumpCount<2)
{
rb.velocity=新矢量2(rb.velocity.x,跳跃力);
跳跃计数+=1;
}
}
嘿,你有没有确定你的玩家的图层不是地面
图层,或者设置地面
图层掩码是否正确,或者光线投射的命中距离
太高,应该非常低,比如0.1
或者跳转次数
从0
或1
开始,试试看换一种方式,或者让它从两个开始,失去额外的奖金跳跃…这将是我会看到的地方,祝你好运 嘿,你有没有确定你的玩家的图层不是ground
图层,或者设置ground
图层掩码是否正确,或者raycast
的hittrance
太高,应该非常低,比如0.1
或者jumpCount
从0
或1
开始,然后尝试替换或者可能从两个开始就失去额外的奖金跳跃…这将是我要看的地方,祝你好运 HurtCheck
在做什么?我感觉到Vector2.down*hittrance
的值太大,光线在跳转后的第一帧击中平台,因此将其重置为0。尝试在地板上的脚本中使用OnCollisionCenter
进行重置。这解决了我的问题。Raycast太大了,但我需要它在斜坡上运行动画,所以我创建了一个不同的,并将isground
移动到OnCollisionInter2D
。非常感谢你的帮助!HurtCheck
在做什么?我感觉到Vector2.down*hittrance
的值太大,光线在跳转后的第一帧击中平台,因此将其重置为0。尝试在地板上的脚本中使用OnCollisionCenter
进行重置。这解决了我的问题。Raycast太大了,但我需要它在斜坡上运行动画,所以我创建了一个不同的,并将isground
移动到OnCollisionInter2D
。非常感谢你的帮助!raycast的命中距离非常高,只是因为我希望它能够在玩家站在斜坡上时到达地面。当你降低命中距离时,它是否能像预期的那样工作?对于坡度检测,最好使用BoxCast而不是raycast。这是一个非常好的教程,介绍了如何进行坡度检测。祝你好运,如果我解决了你的问题,请给我打勾!raycast的命中距离非常高,只是因为我希望它能够在玩家站在斜坡上时到达地面。当你降低命中距离时,它是否能像预期的那样工作?对于坡度检测,最好使用BoxCast而不是raycast。这是一个非常好的教程,介绍了如何进行坡度检测。祝你好运,如果我解决了你的问题,请给我打勾!