有没有办法通过touchInput按钮在Unity中保持跳远?

时间:2019-07-15 18:50:35

标签: c# unity3d game-engine

我正在制作游戏,我想跳起来就像在《超级马里奥兄弟》中跳起来一样。我能够使用键盘或控制器来获得想要的结果,因为它们具有KeyDown,Key(同时按下)和KeyUp。但是touchButtons只有一个布尔值。 (已按下或未按下)我是否可以解决此问题?

我尝试使用Input.GetTouch并使用开始和结束阶段,这给出了正确的结果,但是我不确定如何将其实现为GUI按钮。

我正在使用的代码具有一个GUI按钮,其中包含一个脚本,按下该脚本时,joybutton.Pressed = true

void PlayerJump()
{
    bool canJump = charController.isGrounded;

    //Button Pressed start jumpDuration
    if (joybutton.Pressed && canJump)
    {
        isJumping = true;
        jumpDuration = jumpTime;
    }


    if (isJumping == true)
    {
        if (jumpDuration > 0)
        {
            vertical_Velocity = jump_Force;
            jumpDuration -= Time.deltaTime;
        }

    //timer runs out
        else
        {
           isJumping = false;
        }
    }

    //cancel jump if mid-air
    if (!joybutton.Pressed)
    {
        isJumping = false;
    }
}

当他们使用GUI touchButton着陆时,我无法阻止其跳动。使用键盘和游戏手柄按钮可获得理想的结果。

1 个答案:

答案 0 :(得分:0)

添加一个变量以记住按钮最后一帧的状态。这样,只有当它是按钮被按下的第一帧时,您才能进入跳转开始块:

private bool wasJumpPressedLastFrame = false;

void PlayerJump()
{
    bool canJump = charController.isGrounded;

    //Button Pressed start jumpDuration
    if (joybutton.Pressed && canJump && !wasJumpPressedLastFrame )
    {
        isJumping = true;
        jumpDuration = jumpTime;
    }


    if (isJumping == true)
    {
        if (jumpDuration > 0)
        {
            vertical_Velocity = jump_Force;
            jumpDuration -= Time.deltaTime;
        }

    //timer runs out
        else
        {
           isJumping = false;
        }
    }

    //cancel jump if mid-air
    if (!joybutton.Pressed)
    {
        isJumping = false;
    }

    wasJumpPressedLastFrame = joyButton.Pressed;
}