从GameObject中删除BoxCollider(3D)后如何直接添加BoxCollider2D?

时间:2016-01-01 15:13:32

标签: c# unity3d

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

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

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

附加默认的BoxCollider(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时仍然认为它是附加的?

1 个答案:

答案 0 :(得分:1)

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

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