让球只跳一次

Making a ball jump just once

我正在做一个统一项目,它的工作原理类似于统一页面上的滚球项目教程,基本上我希望球只跳一次,为此我已经实现了逻辑,但有些东西失败了我想不通。

这是我的代码

public bool inAir = false;


void OnCollisionEnter(Collision other){
    if (other.gameObject.tag=="Terrain") 
        inAir = false;
        else
        inAir = true;
    }

void FixedUpdate () {
    float moveHorizontal = Input.GetAxis ("Horizontal");
    float moveVertical = Input.GetAxis ("Vertical");

    Vector3 movement = new Vector3 (moveHorizontal, 0.0f, moveVertical);

    rb.AddForce (movement * speed);
    Debug.Log (inAir);

    if (Input.GetKeyDown ("space") && !inAir){
        rb.AddForce(new Vector3(0,jump,0));
    }

}

恢复: 我刚刚添加了一个在开始时设置为 false 的 inAir 变量,因为球从地板开始,然后我检查碰撞输入是否对象处于碰撞中对于另一个对象,我将标签更改为 Terrain inAir 是错误的,否则它是正确的,然后在 FixedUpdate 结束时检查键是否为 space 以及在这种情况下球是否不在空中球会跳

发生了什么:变量inAir总是false,它总是进入第一个if,并且一直保持false,它永远不会进入else,所以这里有什么问题?

不要在 OnCollisionEnter 函数中将 inAir 设置为 truefalse,而是实现 OnCollisionExit 然后在两个函数中设置它。这样比较靠谱。

public bool inAir = false;

void OnCollisionEnter(Collision other)
{
    if (other.gameObject.tag == "Terrain")
        inAir = false;
}

void OnCollisionExit(Collision other)
{
    if (other.gameObject.tag == "Terrain")
        inAir = true;
}