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# 检查bool是否至少在x时间内为真?_C#_Unity3d - Fatal编程技术网

C# 检查bool是否至少在x时间内为真?

C# 检查bool是否至少在x时间内为真?,c#,unity3d,C#,Unity3d,目前,我有一个光线投射设置,可以检查玩家是否停飞并可以跳跃。在某些情况下,此地面检查可能为真,但着陆动画尚未完成。出于这个原因,我想做一些事情,比如如果isground在至少x秒/帧内为真,那么做一些事情。如何实现这一检查 void JumpRun() { if (JumpCheck()) { float jumpVelocity = Mathf.Sqrt(-2 * gravity * jumpHeight); velocityY = jumpVe

目前,我有一个光线投射设置,可以检查玩家是否停飞并可以跳跃。在某些情况下,此地面检查可能为真,但着陆动画尚未完成。出于这个原因,我想做一些事情,比如如果isground在至少x秒/帧内为真,那么做一些事情。如何实现这一检查

void JumpRun()
{
    if (JumpCheck())
    {
        float jumpVelocity = Mathf.Sqrt(-2 * gravity * jumpHeight);
        velocityY = jumpVelocity;
        anim.SetTrigger("JumpRun");
        canJump = Time.time + 0f; //Delay after jump input
    }
}

private bool JumpCheck()
{
    Debug.DrawRay(transform.position, Vector3.down * distanceForJump, Color.red);

    if (Physics.Raycast(transform.position, Vector3.down, distanceForJump))
        return true;

    return false;
}

JumpCheck()
函数和跳转
标志都
true
时启动计时器。在计时器之前,将该标志设置为
false
,使其不能再次跳转。在计时器结束时,再次将标志设置为
true
。有很多方法可以做到这一点。这只是其中之一。在下面的示例中,标志是
readyToJumpReach
。默认值应为
true

bool readyToJumpAgain = true;

void JumpRun()
{
    if (JumpCheck() && readyToJumpAgain)
    {
        float jumpVelocity = Mathf.Sqrt(-2 * gravity * jumpHeight);
        velocityY = jumpVelocity;
        anim.SetTrigger("JumpRun");
        //Start a timer that waits for 4 seconds
        StartCoroutine(waitForAnimation(4f));
    }
}

private IEnumerator waitForAnimation(float time)
{
    readyToJumpAgain = false;
    //Wait for x seconds
    yield return new WaitForSecondsRealtime(time);
    //Ready to jump again
    readyToJumpAgain = true;
}

bool为真时启动计时器。在计时器结束时,检查bool是否仍然为true。没什么复杂的。如果您仍然有问题,请使用我上面所说的代码修改您的问题哇,这是一个快速响应,我不知道如何编写这样的检查,将使用我的相关代码更新问题。
isground
代码的一部分在哪里?这与跳跃相关是的,我使用了JumpCheck这个词,这是我的地面检查,而不是这样做,用于你的地面检查这确实是为了延迟跳跃,但我还没有弄清楚当用户不是跳跃而是摔倒时如何实现这一点。但是,这在当前代码中应该是可能的。当用户不跳转时,您的意思是什么?我想你应该解释一下当前的行为以及你所期望的我只是在按下跳转按钮时才实现的。因此,延迟仅在按下跳转按钮时起作用。不过也有一些情况,玩家没有按下跳转按钮,而是沿着边缘行走。在那次检查中,我没有添加协同程序,这就是它不起作用的原因。