2014-10-07 127 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

相關問題