Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/321.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# 如何防止循环?_C#_Unity3d - Fatal编程技术网

C# 如何防止循环?

C# 如何防止循环?,c#,unity3d,C#,Unity3d,我有一个按钮,我按下它可以跳转。我现在的问题是,一旦我按下这个按钮,我的播放器就会一直跳下去。但我想让它,这样我必须再次按下跳转按钮,一旦我击中地面。这是我当前的代码: public void onButtonJump() { if (controller.isGrounded ) { verticalVelocity = -gravity * Time.deltaTime; {

我有一个按钮,我按下它可以跳转。我现在的问题是,一旦我按下这个按钮,我的播放器就会一直跳下去。但我想让它,这样我必须再次按下跳转按钮,一旦我击中地面。这是我当前的代码:

  public void onButtonJump()
    {
         if (controller.isGrounded )
        {

            verticalVelocity = -gravity * Time.deltaTime;

            {

                verticalVelocity = jumpForce;
                animator.SetBool("is_in_air", true);
                jump.Play();


            }

        }
        else
        {
            animator.SetBool("is_in_air", false);
            verticalVelocity -= gravity * Time.deltaTime;
        }
    }

如何防止这种循环,并在接地后再次按下按钮?

不要在按钮下执行“重力”,只能在FixedUpdate(“物理帧”更新)中执行:


不要在按钮下执行“重力”,只能在FixedUpdate(“物理帧”更新)中执行:


你在哪里调用onButtonJump(),需要更多的代码。在哪里是
controller.IsGround
set?当我在游戏中单击画布ui按钮时,会调用onButtonJump(),因此它位于onClick()控制器上。isGrounded检查我是否在游戏中的地面上。这一部分是有效的,它可以告诉我是否在我的游戏底层。控制器在我的播放机上。愚蠢的问题:为什么不在设置animator.SetBool(“is_in_air”,true)的同一点显式设置
isground=false
--我有一种很好的感觉,可能会为您解决这个问题…您有两个不同的布尔值,它们似乎表示相同的概念,但表达方式相反:
IsGrounded
is in_air
)--注意,这种构造似乎很简单,但很容易变得非常混乱。这不是David的意思。他说你应该使用controller.isGrounded,并在动画中设置为false。你只是在检查它,却从来没有设置它。你在哪里调用onButtonJump(),需要更多的代码。而
控制器在哪里。IsGround
设置?当我在游戏中单击画布ui按钮时,会调用onButtonJump(),因此它位于onClick()控制器上。IsGround检查我是否在游戏中的地面上。这一部分是有效的,它可以告诉我是否在我的游戏底层。控制器在我的播放机上。愚蠢的问题:为什么不在设置animator.SetBool(“is_in_air”,true)的同一点显式设置
isground=false
--我有一种很好的感觉,可能会为您解决这个问题…您有两个不同的布尔值,它们似乎表示相同的概念,但表达方式相反:
IsGrounded
is in_air
)--注意,这种构造似乎很简单,但很容易变得非常混乱。这不是David的意思。他说你应该使用controller.isGrounded,并在动画中设置为false。你只是在检查它,你从来没有设置它。
void FixedUpdate() {
    if ( controller.isGrounded )
        verticalVelocity = 0;
    else
        verticalVelocity -= gravity * Time.deltaTime;

    // Apply velocity to transform here
}

void onButtonJump() {
    if (controller.isGrounded ) {
        verticalVelocity = jumpVelocity;
        // Play animation and sound here
    }
}