Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/unity3d/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 跳转2D platformer后立即重置跳转计数_C#_Unity3d - Fatal编程技术网

C# 跳转2D platformer后立即重置跳转计数

C# 跳转2D platformer后立即重置跳转计数,c#,unity3d,C#,Unity3d,我对这一切都很陌生,所以对于新手犯的错误我很抱歉。我正在做一个2D平台 我正在通过RayCast检查地面,在玩家跳跃后,跳跃计数器重置为0,因此我得到一个额外的跳跃。我尝试添加一个0.2秒的计时器,然后它才能重置,但这在连续多次跳跃(兔子跳跃)时造成了麻烦。有什么帮助吗 private void FixedUpdate() { GroundCheck(); if (state != State.hurt) { Mov

我对这一切都很陌生,所以对于新手犯的错误我很抱歉。我正在做一个2D平台 我正在通过RayCast检查地面,在玩家跳跃后,跳跃计数器重置为0,因此我得到一个额外的跳跃。我尝试添加一个0.2秒的计时器,然后它才能重置,但这在连续多次跳跃(兔子跳跃)时造成了麻烦。有什么帮助吗

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。这是一个非常好的教程,介绍了如何进行坡度检测。祝你好运,如果我解决了你的问题,请给我打勾!