我正在用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时仍然认为它是附加的?
答案 0 :(得分:1)
Destroy()
不会立即销毁给定的对象。它会将其标记为要删除,并且只会删除帧末尾的所有标记对象作为优化。
在你的情况下,你应该使用DestroyImmediate()
,它将立即销毁对象,允许你添加新的对撞机。