TriggerEnter不适用于&&统一运算符2D

时间:2014-09-30 14:22:48

标签: c# unity3d 2d

我有2个球精灵&一个洞精灵,当这个2球精灵进入洞时,需要加载新场景。

我试图找到与AND运算符的多次碰撞,但它不起作用,如果我尝试使用一个条件它工作正常,我不知道为什么。

void OnTriggerEnter2D(Collider2D col)
{
    if ((col.gameObject.tag == "ball2") && (col.gameObject.tag == "ball")) {
        Application.LoadLevel("Main");
    }

}

2 个答案:

答案 0 :(得分:1)

从逻辑上讲,您提供的代码永远不会等同于true,因为您将相同的字符串与两个不同的值进行比较。如果它从第一次测试返回false,则返回false。如果它从第一次测试返回true,那么它将始终从第二次测试返回false,因为第一次将其评估为“ball2” - 因此它将返回false。

如果你想要 (不是两个)一边为真,那么你要使用or运算符(condition1 || condition2

void OnTriggerEnter2D(Collider2D col)
{
    if ((col.gameObject.tag == "ball2")
        || (col.gameObject.tag == "ball"))
    {
        Application.LoadLevel("Main");
    }
}

ps,是的,我喜欢Visual Studio代码格式,特别是对于条件块是多行的情况

编辑:按照你的评论,你正在等待两个物体进入碰撞。在这种情况下,您无法执行此AND测试,因为您只测试了同一个对象,因为您只收到col参数一次。因为您将每次碰撞视为一个谨慎的,单独的事件,所以您应该在每次出现时设置一个标志,然后在设置两个标志时前进。

private bool ball = false;
private bool ball2 = false;
void OnTriggerEnter2D(Collider2D col)
{
    // Set each flag individually to allow for separate events triggering each
    if(col.gameObject.tag == "ball") ball = true;
    if(col.gameObject.tag == "ball2") ball2 = true;

    // Perform operation once both flags have been set
    if(ball && ball2) Application.LoadLevel("Main");
}

答案 1 :(得分:0)

使用两个不同的Gameobject添加两个不同的对撞机,并添加两个不同的对撞机脚本。从其他脚本访问一个变量,如果真的那么继续......

void OnTriggerEnter2D(Collider2D col) // Collider1 Script
{
  if ((col.gameObject.tag == "ball2"))
  {
      firstcollider = true;
  }
}


void OnTriggerEnter2D(Collider2D col) // Collider2 Script
{
 if (Collider1.firstcollider == true ) && (col.gameObject.tag == "ball"))
 {
     Application.LoadLevel("Main");
 }
}

如果您不知道,请参阅Google以访问从一个脚本到另一个脚本的变量。我不知道这是代码的最佳方式,但只是为了破解......