如何在从游戏对象中移除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吗?
Destroy()
不会立即销毁给定的对象。它将把它标记为要删除,并且只删除帧末尾的所有标记对象作为优化。
在您的情况下,您应该使用DestroyImmediate()
,它将立即销毁对象,允许您添加新的对撞机。