2013-08-11 9 views
6

実行時にプレハブをインスタンス化して破壊する必要があります。私はこれらを試してみました:Unity3Dのインスタンシエーションと破壊

public Transform prefab;  //I attached a prefab in Unity Editor 

Object o = Instantiate(prefab); 
//using this I cannot get the transform component (I don't know why) so useless 

Transform o=(Transform)Instantiate(prefab); 
//gives transform and transform component cannot be destroyed 

GameObject o=(GameObject)Instantiate(prefab); 
//invalid cast 

それではどうやってですか?

+0

。これはすべて変数TYPEに関するものです。 – Chchwy

答えて

3

あなたはそれがTRANSFORMAコンポーネントをしていない先祖オブジェクトの魔女を取得しなければあなたは、オブジェクトとしてインスタンスを宣言する必要はありません。

public GameObject prefab; 
GameObject obj = Instantiate(prefab); 

あなたがcomponantを変換取得したい場合は、 平和

を助けオブジェクト型 Destroy(obj);

希望をdestryたい場合は、単に

+0

は暗黙的に変換できません...そこで(GameObject)を追加して正常に実行されましたが、検証して実装するためにいくつかの点を確認する必要があります –

3

Transform成分が結合されたGameObjectを破壊成分は

を破壊することができない変換および変換与える:

GameObject.Destroy(o.gameObject); 

Instantiate方法は、として渡されたオブジェクトの同じタイプを返しますパラメータ。 Transformですので、GameObjectにキャストすることはできません。これを試してみてください:

GameObject o=((Transform)Instantiate(prefab)).gameObject; 
+0

発信元から宛先にキャストできないと言います –

+0

どちらの部分ですか? Heisenbugの両方のスニペットはうまく機能し、そのままコピーされます。 – Jerdak

1

あなたのコードは意味がありません。.. obj.transform を入力

public Transform prefab; 
Object o = Instantiate(prefab); 

トランスフォームをインスタンス化していますか?あなたは代わりにプレハブをつけてみませんか?

あなたは試してみてください:

public GameObject prefab; // attach the prefab in Unity Editor 
GameObject obj = Instantiate(prefab); 
GameObject.Destroy(obj); 
+2

彼のコードは理にかなっています。 [公式文書](http://docs.unity3d.com/Documentation/ScriptReference/Object.Instantiate.html)も同じ 'public Transform Prefab'表記を使用します。 – Jerdak

+0

'public Transform prefab;'は大丈夫です。あなたの要求に応じて、変数型をTransformまたはGameObjectとして宣言できます。 – Chchwy

+0

面白い..変換をインスタンス化することができます..ありがとう.. – xuanweng

0

を私は受け入れ答えは、実際に間違って気づきました。

MonoBehaviourクラスのインスタンス化関数を使用する場合は、インスタンス化するものの型を指定する必要があります。私は読むことを強くお勧めしますInstantiate API referenceTransformとしてプレハブをインスタンス化し、3次元空間における位置を提供するためにGameObject

GameObject g = Instantiate(prefab) as GameObject; 

としてプレハブをインスタンス化する


Transform t = Instantiate(prefab, new Vector3(1,10,11), new Quaternion(1,10,11,100)); 

コンポーネントを破壊すると、gameObjectsに付属するスクリプトとrigibodyやその他のコンポーネントを破棄することができます。あなたは、いくつかのオブジェクト指向の概念を勉強する必要が

Destroy(g); 

または

Destroy(t.gameObject) 

関連する問題