TriggerEnter不适用于&&;单位2D中的运算符

本文关键字:amp 运算符 2D 不适用 适用于 TriggerEnter 单位 | 更新日期: 2023-09-27 18:25:02

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

我试图用AND运算符找到多个冲突,但它不起作用,如果我用一个条件尝试,它很好,我不知道为什么。

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

TriggerEnter不适用于&&;单位2D中的运算符

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

如果其中一个(而不是两个)为true,则使用或运算符(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");
}

用两个不同的游戏对象添加两个不同碰撞器,并添加两个相同的碰撞器脚本。从另一个脚本访问一个变量,如果这是真的,那么继续…

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");
 }
}

如果你不知道的话,请参考谷歌从一个脚本访问另一个脚本中的变量。我不知道这是代码的最佳方式,但只是破解。。。。