【问题标题】:Unity - OnTriggerStay2D() for 2 colliders simultaneouslyUnity - OnTriggerStay2D() 同时用于 2 个对撞机
【发布时间】:2017-01-23 01:21:45
【问题描述】:

我正在使用OnTriggerStay2D() 函数,该函数在对象位于对撞机内部时执行某些操作(不管怎样)。但是,有时我还有另一个,所以总共有 2 个对撞机可能会留在该对撞机内。两个对撞机不在同一个Game Object 上。 我正在尝试这样:

void OnTriggerStay2D(Collider2D other)
{
    if (other.gameObject.CompareTag("Obj1"))
    {
        //do something
    } 
    if (other.gameObject.CompareTag("Obj2"))
    {
        //do something else
    }
}

但是做点别的事情Obj1已经在里面时就永远不会发生。对于OnTriggerStay2D(),如何让一个碰撞器同时感知两个碰撞器?

编辑澄清:

OnTriggerStay2D() 仍然被调用。问题是代码永远不会到达if 语句,我必须做其他事情评论。

【问题讨论】:

  • 你是说OnTriggerStay2D如果有一个对象已经发生碰撞就不会再调用了?如果这是错误的,请编辑您的问题并进行更多解释。
  • 不,我准确地说,做其他事情不会发生。这只意味着代码永远不会“进入”if 语句。
  • @Programmer 已编辑,很抱歉造成混淆。
  • 没关系。您不应该期望在同一帧中调用 OnTriggerStay2D。 Collider2D other 不能包含多个触发器信息。返回 Obj1 后,将在下一帧左右调用 OnTriggerStay2D 并返回 Obj2。这是您正在寻找的答案吗?
  • 这解释了很多,但对于我的对撞机Obj2 就像它甚至不存在一样。如何解决这个问题?我再次确保我没有拼错标签,游戏对象确实设置了标签等等

标签: c# unity3d collision-detection


【解决方案1】:

当调用OnTriggerStay2D 函数时,它不会报告多个正在触摸的游戏对象。它只返回一个触发器/Collider2D 信息。在下一个物理帧左右之后,它将再次被调用。这一次它会返回触碰同一个 GameObject 的其他 trigger/Collider2D 信息。

在您的情况下,返回 Obj1 后,OnTriggerStay2D 将在下一个物理帧左右被调用,并返回 Obj2

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2022-07-20
    • 2020-11-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多