Unity3d 统一:如何处理复合对撞机二维物理

Unity3d 统一:如何处理复合对撞机二维物理,unity3d,collision-detection,rigid-bodies,Unity3d,Collision Detection,Rigid Bodies,我正在做一个小游戏,基本的游戏机制是在关卡上拖动东西。我的玩家G.O.是在关卡周围拖动其他物体的人。这个G.O.(玩家GO)有一个刚体组件,为了拖动其他对象,我将拖动的对象转化为玩家的子对象,这样我只通过刚体组件移动玩家,拖动的对象沿着玩家对象移动 问题是,每当有东西接触到被拖动的物体时,即使玩家没有接触到危险物体,也会触发玩家死亡。这显然不是预期的结果,如果想要杀死玩家的东西与被拖动的物体接触,而不是玩家,那么不应该杀死玩家。我怎样才能解决这个问题 编辑:杀戮意味着摧毁玩家围棋。如果你删除你的

我正在做一个小游戏,基本的游戏机制是在关卡上拖动东西。我的玩家G.O.是在关卡周围拖动其他物体的人。这个G.O.(玩家GO)有一个刚体组件,为了拖动其他对象,我将拖动的对象转化为玩家的子对象,这样我只通过刚体组件移动玩家,拖动的对象沿着玩家对象移动

问题是,每当有东西接触到被拖动的物体时,即使玩家没有接触到危险物体,也会触发玩家死亡。这显然不是预期的结果,如果想要杀死玩家的东西与被拖动的物体接触,而不是玩家,那么不应该杀死玩家。我怎样才能解决这个问题


编辑:杀戮意味着摧毁玩家围棋。

如果你删除你的父游戏对象,它的所有子游戏对象也会随之删除。为了不让你的拖动对象被删除,你应该在删除父游戏对象之前将它们删除到其他地方。您可以通过以下方式实现:
YourChildGameObject.transform.SetParent(OtherParentGameObject,false)


另外,.

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

另一种方法是检查敌人与OnCollisionCenter或OnTriggerCenter的碰撞情况(取决于您的操作方式)。您可以这样做:

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

祝你好运

我很抱歉,问题是,每当应该杀死玩家的东西与被拖动的物体相撞时,玩家就会被杀死,我试图阻止这种情况,你说的杀死是什么意思?从层次结构中完全删除它?有点难以理解你的要求。他说的是输掉比赛!是的,当危险对象与玩家接触时,玩家G.O.将从场景中删除。实际上,我这样做
void onCollisionInter2D(Collision2D other){if(other.gameObject.tag==“player”){other.gameObject.transform.DetachChildren();Destroy(other.gameObject);}
不幸的是,我不能将敌人层限制为仅与玩家层碰撞,因为敌人也需要碰撞其他层。目前,我的“杀死”只是一个简单的摧毁(玩家对象)。问题是,当某个危险对象(上面有我详细介绍的脚本的对象)与被拖动的对象接触时,会触发“kill”,玩家G.O.会被摧毁。奇怪。尝试添加一个Debug.Log,用于打印被命中对象的标记。此外,检查危险物品,在更改其父对象时不要更改其标签。我们会解决这个问题的。很抱歉这么晚才回答。出于某种奇怪的原因,Debug.Log显示敌人正在与箱子碰撞,即使根本没有碰撞。当敌人与玩家拖动的盒子相撞时,Debug.Log显示玩家已检测到碰撞。