如何在从游戏对象中移除BoxCollider(3D)后直接添加BoxCollider2D

本文关键字:3D BoxCollider2D 添加 BoxCollider 游戏 对象 | 更新日期: 2023-09-27 18:28:35

我正在用Cube网格实例化一个新的游戏对象。我希望这个有一个BoxCollider2D组件。

我首先使用GameObject.CreatePrimitive用一个基元实例化一个新的GameObject。"用基元网格渲染器和适当的碰撞器创建一个游戏对象。"

GameObject inst = GameObject.CreatePrimitive(PrimitiveType.Cube);

将附着默认的长方体碰撞器(3D)。我不想要这个,所以我删除了它。

Destroy(inst.GetComponent<Collider>());

这是有效的,在编辑器中,我可以看到我现在有一个没有BoxCollider的立方体。

现在我尝试添加BoxCollider2D

inst.AddComponent<BoxCollider2D>();

完整的方法看起来像这个

private GameObject createSnakeCube()
    {
        GameObject inst = GameObject.CreatePrimitive(PrimitiveType.Cube);
        Destroy(inst.GetComponent<Collider>());
        inst.AddComponent<BoxCollider2D>();
        return inst;
    }

然而。我将得到以下错误消息

Can't add component 'BoxCollider2D' to Cube because 
it conflicts with the existing 'BoxCollider' derived component!    
UnityEngine.GameObject:AddComponent()

有人知道为什么Unity仍然认为在编辑器中看不到BoxCollider的情况下附加了BoxCollider吗?

如何在从游戏对象中移除BoxCollider(3D)后直接添加BoxCollider2D

Destroy()不会立即销毁给定的对象。它将把它标记为要删除,并且只删除帧末尾的所有标记对象作为优化。

在您的情况下,您应该使用DestroyImmediate(),它将立即销毁对象,允许您添加新的对撞机。