为什么我不碰撞?

时间:2017-03-23 16:52:41

标签: c# unity3d collision

我有一个标记为"播放器"的立方体,需要在某些位置跳转,由Empty GameObjects表示。

我想建立一个点数系统,为什么我把其他游戏对象标记的地方放在一起" Coin"

立方体有一个动画,每当它移动到通过用鼠标点击识别的另一个点时播放 当我跳到硬币位置时,我希望硬币对象被摧毁。

我使用这个功能:

void OnTriggerEnter(Collider col){
    if (col.gameObject.tag == "Coin") {
        Debug.Log ("Plm");
        stroy (col.gameObject);
    }

问题在于,当我在Coin位置跳跃时,没有任何事情发生 我在两个对象上都有盒子对撞机,并且OnTrigger都检查了它们。

1 个答案:

答案 0 :(得分:2)

1)确保一个游戏对象有一个僵尸

要让OnTriggerEnter发生,您需要两个对象中至少有一个附加RigidBody

2)静态触发器对撞机

一个对象已经检查过isTrigger但没有被检查过但被认为是Static Trigger Collider From Unity Documentation:

  

这是一个具有Collider但没有Rigidbody的GameObject。静态对撞机用于水平几何,它总是停留在同一个地方,永远不会四处移动。传入的刚体对象将与静态对撞机发生碰撞,但不会移动它。

这种类型的对撞机互动非常适合您的硬币,因为它们不会移动并保持静止。

3)Rigidbody Trigger Collider

下一种类型的对撞机互动是Rigidbody Trigger Collider,它们是:

  

这是一个Game Collider,附有一个普通的,非运动的Rigidbody。刚体碰撞器由物理引擎完全模拟,可以对脚本施加的碰撞和力作出反应。它们可能会与其他物体碰撞(包括静态碰撞器)

这种类型的对撞机是您player所需要的,正如它在Unity文档中所说的那样,它将能够与Static trigger collider发生碰撞。

重要观察:

在您的玩家对撞机上将IsTrigger设置为true会导致您的玩家不作为固体对象做出响应

  

配置为触发器的对撞机(使用Is Trigger属性)不会像固体对象那样运行,只会允许其他对撞机通过。

这对您来说可能不是最佳解决方案,因为大多数时候您希望您的玩家能够与地面等其他事物发生碰撞。因此,您可以将isTrigger设置为false,并在您的播放器上设置一个刚体,如果它们设置为Static Trigger Collider,它将对硬币作出反应。

如果您想要一种简单的方法来了解哪些内容可能会与Read the colliders documentation发生冲突,并查看此图表以更简单的方式显示它。

enter image description here