【问题标题】:Unity: Player Jumping IssueUnity:玩家跳跃问题
【发布时间】:2015-12-15 21:58:01
【问题描述】:

我有一段代码试图让玩家通过点击在 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;

    }
}

【问题讨论】:

  • 我已经修正了你的格式。两件事:1)你不需要== true 。 2) 如果atCube1atCube2 都是真的呢?
  • 您的 JumpRight 函数是否会重置 atCube1 和 isGrounded 字段值?
  • 嗨@Wai,感谢您的回复,我认为atCube1和2不能同时为真,因为这是在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 = 真; isGrounded =真; } if(col.gameObject.name == "Cube 2"){ Debug.Log ("Cube 2 hit"); atCube2 = 真; isGrounded =真; } }
  • 嗨@Neil,没有跳转函数不会重置 atCube1 和 isGrounded ,这些值在 OnCollisionEnter() 函数中设置为 true。应该在 OnCollisionExit() 函数中将它们设置为 false 还是在哪里?谢谢!
  • ... 您可以通过在多维数据集 1 上将 atCube2 设置为 false 并在多维数据集 2 上将 atCube1 设置为 false 来轻松检查。

标签: c# unity3d


【解决方案1】:

你应该在它离开 cube1 之后创建atCube1 = false;(对 cube2 也这样做)。你也可以在没有碰撞任何东西时添加isGrounded = false;

1-你从 cube1 开始,atCube1 = true

2-跳转到 cube2,atCube1 = trueatCube2 = true

3- 再次跳转到 cube1,它向左跳转,因为仍然是 atCube2 = true 。实际上,由于您的if 语句的顺序,它首先向右跳然后向左跳。只需将 false 值添加到布尔值即可修复它。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2019-10-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-12-27
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多