C# 在运行时添加/删除组件

C# 在运行时添加/删除组件,c#,unity3d,C#,Unity3d,我正在用脚本(c#)创建一个多维数据集。我想删除BoxCollider,因为我正在开发一个2D游戏,并通过BoxCollider2d进行交换。然后我想添加一个RigiBody2D并在我的世界中显示立方体。问题是我总是得到错误: 无法将组件“BoxCollidater2D”添加到多维数据集,因为它与 现有的“BoxCollider”派生组件! 游戏对象:AddComponent() CreateCube:OnCollisionInter2D(碰撞2D)(位于 Assets/Scripts/Crea

我正在用脚本(c#)创建一个多维数据集。我想删除BoxCollider,因为我正在开发一个2D游戏,并通过BoxCollider2d进行交换。然后我想添加一个RigiBody2D并在我的世界中显示立方体。问题是我总是得到错误:

无法将组件“BoxCollidater2D”添加到多维数据集,因为它与 现有的“BoxCollider”派生组件! 游戏对象:AddComponent() CreateCube:OnCollisionInter2D(碰撞2D)(位于 Assets/Scripts/CreateCube.cs:15)

我得到了这个错误,但代码仍然有效。但它只会一直持续到线被破坏(立方体碰撞器);就这样!BoxCollider被正确地移除,因为当我查看创建的对象时,它不见了。我真的不知道为什么编译器告诉我有一个现有的BoxCollider

using UnityEngine;
using System.Collections;

public class CreateCube : MonoBehaviour
{
    void OnCollisionEnter2D(Collision2D coll)
    {
        // Create Cube
        GameObject cube = GameObject.CreatePrimitive(PrimitiveType.Cube);

        // Destroy BoxCollider
        Destroy(cube.collider);

        // Add BoxCollider2D
        cube.AddComponent<BoxCollider2D>();

        // Add RigiBody2D
        cube.AddComponent<Rigidbody2D>();

        // Show Cube in World
        cube.transform.position = new Vector3(0, 0.5f, 0);
    }
}
使用UnityEngine;
使用系统集合;
公共类CreateCube:单行为
{
空心OnCollisionInter2D(碰撞2D coll)
{
//创建多维数据集
GameObject cube=GameObject.CreatePrimitive(PrimitiveType.cube);
//电子对撞机
销毁(立方体对撞机);
//添加r2d
AddComponent();
//添加RigiBody2D
AddComponent();
//在世界上展示立方体
cube.transform.position=新矢量3(0,0.5f,0);
}
}

有人有什么想法吗?

Destroy
将始终等到当前
更新
循环之后删除组件,因此添加
框collider2d
时不会删除
碰撞器。改用
destrominate

不过,我建议您创建一个带有所需内容的
预置
,并使用
实例化
。像这样:

// Create Cube
GameObject cube = Instantiate(yourPrefab, new Vector(0, 0.5f, 0), Quaternion.identidy) as GameObject;

你可能不应该创建一个立方体原语,而应该创建一个2D精灵。这是一篇1年前的文章,我不知道为什么它会在列表中出现得这么早。但我的回答可能会帮助另一个人:P