【问题标题】:How do I add a BoxCollider2D directly after removing a BoxCollider (3D) from a GameObject?从游戏对象中删除 BoxCollider (3D) 后,如何直接添加 BoxCollider2D?
【发布时间】:2016-04-06 01:38:19
【问题描述】:

我正在使用 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 附加在编辑器中不可见时?

【问题讨论】:

    标签: c# unity3d


    【解决方案1】:

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

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2016-07-23
      • 1970-01-01
      • 2021-11-22
      • 2016-02-25
      • 1970-01-01
      • 2022-08-05
      • 1970-01-01
      相关资源
      最近更新 更多