Unity2D防止角色多跳

时间:2017-03-20 17:55:56

标签: c# unity3d

我的角色可以按你按下(W或空格)跳,我读过你可以用Raycast阻止它,但我不明白怎么做。这是我的角色代码(这是一个平台游戏):

private Rigidbody2D myRigidBody2D;
void Start () {

    myRigidBody2D = GetComponent<Rigidbody2D>();

}

private void Update()
{
    if (Input.GetButtonDown("Jump"))
    {
        myRigidBody2D.AddForce(new Vector2(0, jumpForce));
    }
}

1 个答案:

答案 0 :(得分:2)

  

我已经读过你可以用Raycast阻止它

是的,你可以,但你可能会遇到仍然可以解决的problems

执行此操作的最佳方法是使用布尔变量来检查角色是否接触地面。您可以在truefalse函数中将此变量设置为OnCollisionEnter2DOnCollisionExit2D

Create a tag名为“Ground”。将所有地面Gameobjects更改为此标记,然后下面的示例应该可以防止多次跳转。

bool isGrounded = true;

private float jumpForce = 2f;
private Rigidbody2D myRigidBody2D;

void Start()
{

    myRigidBody2D = GetComponent<Rigidbody2D>();

}

private void Update()
{
    if (Input.GetButtonDown("Jump") && isGrounded)
    {
        myRigidBody2D.AddForce(new Vector2(0, jumpForce));
    }
}

void OnCollisionEnter2D(Collision2D collision)
{
    if (collision.gameObject.CompareTag("Ground"))
    {
        isGrounded = true;
    }
}

void OnCollisionExit2D(Collision2D collision)
{
    if (collision.gameObject.CompareTag("Ground"))
    {
        isGrounded = false;
    }
}