Unity:如何处理复合碰撞器2D物理

时间:2016-01-12 18:20:00

标签: unity3d collision-detection rigid-bodies

我正在制作一款小型游戏,其中基本的游戏机制正在拖动整个关卡。我的玩家G.O.是拖拽水平周围其他物体的人。这个GO(玩家GO)有一个rigidBody2D组件,为了拖动其他对象,我将拖动的对象转换为玩家的子对象,这样我只能通过rigidBody组件移动玩家,并且拖动的对象沿着玩家对象。

问题是,每当应该通过接触杀死玩家的东西与被拖动的物体接触时,即使玩家没有开始接触危险物体,玩家的死亡仍然会触发。这显然不是预期的结果,如果用于杀死玩家的东西与拖动的物体接触但不与玩家接触,则不应该杀死玩家。我该如何解决这个问题?

编辑:通过杀戮我的意思是摧毁玩家GO。

2 个答案:

答案 0 :(得分:0)

如果您删除了您的父GameObject,它的所有子GameObjects也将删除它。为了不删除拖动的对象,您应该在删除父GameObject之前将其删除。你可以这样做: YourChildGameObject.transform.SetParent(OtherParentGameObject, false);

另外,this link could help you

答案 1 :(得分:0)

这是碰撞问题。 为玩家和敌人设置不同的图层。 转到编辑 - >项目设置 - >物理。在底部,您将看到一个碰撞列表。您可以检查哪些图层与哪些图层相撞。将“敌人”图层设置为仅与“播放器”图层发生碰撞。

另一种方法是检查敌人与OnCollisionEnter或OnTriggerEnter发生碰撞的内容(取决于你是如何做的)。你可以这样做:

//You can change this to OnTriggerEnter and "Collision" with "Collider"
void OnCollisionEnter(Collision col) 
{
    if (col.gameObject.name == "player")
    {
      //Kill the player
    }
}
祝你好运!