在运行时添加/删除组件

时间:2014-10-07 19:15:31

标签: c# unity3d

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

  

无法将组件'BoxCollider2D'添加到Cube,因为它与之冲突   现有的'BoxCollider'衍生组件!   UnityEngine.GameObject:AddComponent()   CreateCube:OnCollisionEnter2D(Collision2D)(at   资产/脚本/ CreateCube.cs:15)

我收到此错误,但代码仍然有效。但它只会到Destroy(cube.collider)行;这就是它! 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);
    }
}

有人有想法吗?

1 个答案:

答案 0 :(得分:1)

Destroy将始终等到当前Update循环之后删除该组件,因此在您添加Collider时不会删除BoxCollider2D。请改用DestroyImmediate

但是,我建议您创建一个包含所需内容的prefab,然后使用Instantiate。像这样:

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