【发布时间】:2016-12-10 01:07:09
【问题描述】:
我正在开发一个统一项目,该项目类似于统一页面上的滚球项目教程,基本上我希望球只跳一次,为此我已经实现了逻辑,但是有些失败,我想不通。
这是我的代码
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));
}
}
恢复:我刚刚添加了一个 inAir 变量,该变量在开始时设置为 false,因为球从地板开始,然后如果该对象与另一个对象发生碰撞,我检查碰撞输入我将标签更改为 Terrain inAir 为假,否则为真,然后在 FixedUpdate 结束时检查键是否为空格,如果球不在空中,则在这种情况下球可以跳跃
发生了什么:变量inAir总是为假,if总是进入第一个,一直保持为假,从来不进入else,那么这里出了什么问题?
【问题讨论】:
-
它永远不会与其他任何东西发生碰撞?
-
您可能希望在玩家跳跃后将
inAir设置为true(就在第二次AddForce调用之后)。