让球只跳一次
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
设置为 true
或 false
,而是实现 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;
}
我正在做一个统一项目,它的工作原理类似于统一页面上的滚球项目教程,基本上我希望球只跳一次,为此我已经实现了逻辑,但有些东西失败了我想不通。
这是我的代码
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
设置为 true
或 false
,而是实现 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;
}