其实名字就是问题。代码如下:
private bool isGrounded = true;
private bool isAir = false;
private void Update()
{
if (isGrounded) State = CharState.Idle;
if (isGrounded && Input.GetButtonDown("Jump")) Jump();
//if (isAir && Input.GetButtonDown("Jump")) DoubleJump();
//if (isGrounded && Input.GetButtonDown("Jump + Jump")) DoubleJump();
}
private void Jump()
{
if (Input.GetButtonDown("Jump")) DoubleJump();
else { rigidbody.AddForce(transform.up * jumpForce, ForceMode2D.Impulse); }
//rigidbody.AddForce(transform.up * jumpForce, ForceMode2D.Impulse);
//isAir = true; isGrounded = false;
}
private void DoubleJump()
{
rigidbody.AddForce(2 * transform.up * jumpForce, ForceMode2D.Impulse);
//isAir = false;
//isGrounded = true;
}
上一次尝试是这样的,但是当 Jump 方法被激活时,角色立即陷入了 DoubleJump,虽然不应该这样。
我同意这个问题下的评论,即这不是一个非常正确的实现,最好制作一个状态机。这不是很困难,我建议谷歌搜索最简单的状态机示例(幸运的是,它们有很多)。但是,如果您仍然想使用这种方法,那么请尝试以下代码: