2014-10-07 69 views
0

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

Can't add component 'BoxCollider2D' to Cube because it conflicts with the existing 'BoxCollider' derived component! UnityEngine.GameObject:AddComponent() CreateCube:OnCollisionEnter2D(Collision2D) (at Assets/Scripts/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); 
    } 
} 

有没有人有想法?

+0

你可能不应该创建一个立方体基本而是一个2D精灵与 – LearnCocos2D 2014-10-08 08:08:43

回答

1

Destroy将一直等到当前Update循环移除组件后,因此在添加BoxCollider2D时不会删除Collider。改为使用DestroyImmediate

但是,我会建议创建一个prefab与你想要的东西,并使用Instantiate来代替。就像这样:

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

锯现在开始,这是一个1岁后,我不知道为什么它显示在列表中这么早。但我的回答可能会有助于另一个:P – 2015-10-23 11:15:54

相关问题