我试图这样做,以便当我在Unity中触发一个触发器时,它不会移除触发器,但它会删除触发器附加的内容。但我似乎无法弄明白该怎么做。
void OnTriggerEnter(Collider other)
{
if (other.gameObject.CompareTag("pickup"))
{
audio.Play(); //Play it
other.gameObject.SetActive(false);
count = count + 1;
SetCountText();
}
}
这是我尝试做的一个例子,但想象一下它试图将其他东西设置为无效。
答案 0 :(得分:2)
停用游戏对象时,附加的对撞机也将被停用。如果你想要停用游戏对象并让碰撞器存在,你需要区分这两个游戏对象,即有两个游戏对象:一个仅用于对撞机,一个用于实际对象。现在你可以在对撞机继续运行时移除实际物体。
实施取决于您处理触发器的方式。
OnTriggerEnter写在附加到游戏对象的脚本中,该脚本附有静态对撞机(地面)。
静态对撞机是没有刚体的对撞机。
将一个孩子添加到此游戏对象中并将视觉效果放入其中(即渲染器或音频源)。
将public GameObject Child;
添加到脚本中。
通过统一检查窗口设置子项的引用。
以OnTriggerEnter
方式停用儿童而不是对手的游戏对象:Child.SetActive(false);
OnTriggerEnter是在附加到另一个游戏对象的脚本中编写的,该游戏对象还具有动态对撞机(球)和刚体。
动态对撞机是与刚体碰撞的对撞机。
将儿童添加到静态对撞机附加到的游戏对象
向游戏对象(MyScript)添加脚本
将public GameObject Child;
添加到脚本中。
通过统一检查窗口设置子项的引用。
以OnTriggerEnter
方式停用儿童而不是对手的游戏对象:(other as MyScript).Child.SetActive(false);
答案 1 :(得分:1)
当您使用gameObject.SetActive(false);
停用对象时,您会自动停用对象上的每个组件(Renderer
,Triggers
,Scripts
,...)
有两种方法可以实现您的目标:
使用其他对象作为触发器(Plane或Cube并从此新对象中停用对象)
或者根据@madjlzz的建议,您可以停用渲染器和RigidBody