Unity / C#Trigger使其他东西消失

时间:2016-10-25 08:24:32

标签: c# unity3d triggers

我试图这样做,以便当我在Unity中触发一个触发器时,它不会移除触发器,但它会删除触发器附加的内容。但我似乎无法弄明白该怎么做。

void OnTriggerEnter(Collider other)
{
    if (other.gameObject.CompareTag("pickup"))
    {
        audio.Play(); //Play it

        other.gameObject.SetActive(false);
        count = count + 1;
        SetCountText();
    }
}

这是我尝试做的一个例子,但想象一下它试图将其他东西设置为无效。

2 个答案:

答案 0 :(得分:2)

停用游戏对象时,附加的对撞机也将被停用。如果你想要停用游戏对象并让碰撞器存在,你需要区分这两个游戏对象,即有两个游戏对象:一个仅用于对撞机,一个用于实际对象。现在你可以在对撞机继续运行时移除实际物体。

实施取决于您处理触发器的方式。

案例1:

OnTriggerEnter写在附加到游戏对象的脚本中,该脚本附有静态对撞机(地面)。

  

静态对撞机是没有刚体的对撞机。

  1. 将一个孩子添加到此游戏对象中并将视觉效果放入其中(即渲染器或音频源)。

  2. public GameObject Child;添加到脚本中。

  3. 通过统一检查窗口设置子项的引用。

  4. OnTriggerEnter方式停用儿童而不是对手的游戏对象:Child.SetActive(false);

  5. 案例2:

    OnTriggerEnter是在附加到另一个游戏对象的脚本中编写的,该游戏对象还具有动态对撞机(球)和刚体。

      

    动态对撞机是与刚体碰撞的对撞机。

    1. 将儿童添加到静态对撞机附加到的游戏对象

    2. 向游戏对象(MyScript)添加脚本

    3. public GameObject Child;添加到脚本中。

    4. 通过统一检查窗口设置子项的引用。

    5. OnTriggerEnter方式停用儿童而不是对手的游戏对象:(other as MyScript).Child.SetActive(false);

答案 1 :(得分:1)

当您使用gameObject.SetActive(false);停用对象时,您会自动停用对象上的每个组件(RendererTriggersScripts,...)

有两种方法可以实现您的目标:

  • 使用其他对象作为触发器(Plane或Cube并从此新对象中停用对象)

  • 或者根据@madjlzz的建议,您可以停用渲染器和RigidBody