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
}
}