我有一段代码试图通过点击让玩家在2个盒子之间跳过Cube 1(左侧位置)和Cube 2(右侧)。
Move()函数的问题在于它开始从Cube 1跳到Cube 2,然后Cube 2回到Cube 1,但是从这一点开始,玩家从Cube 1跳到左边的对面立方体2。
跳转功能正常,但我认为逻辑错误。
移动
void Move(){
int i = 0;
while ((isGrounded == true) && (i < 10)) {
if(atCube1 == true){
JumpRight();
}
if(atCube2 == true){
JumpLeft();
}
i++;
}
}
OnCollisionEnter:
void OnCollisionEnter (Collision col)
{
Debug.Log("OnCollisionEnter");
if (col.gameObject.name == "Cube 1"){
Debug.Log ("++++++ C U B E 1 H I T ++++++++");
atCube1 = true;
isGrounded = true;
}
if(col.gameObject.name == "Cube 2"){
Debug.Log ("Cube 2 hit");
atCube2 = true;
isGrounded = true;
}
}
答案 0 :(得分:0)
离开cube1后你应该atCube1 = false;
(也可以为cube2做)。此外,您可以在isGrounded = false;
没有发生任何冲突时添加。{/ p>
1 - 你从cube1,atCube1 = true
2 - 跳转到cube2,atCube1 = true
,atCube2 = true
3-再次跳转到cube1,它向左跳,因为仍然是atCube2 = true
。实际上,由于您的if
语句顺序,它首先向右跳,然后向左跳。只需将false
值添加到布尔值即可修复它。