2013-08-11 15 views
6

Tôi cần khởi tạo và hủy một prefab khi đang chạy. Tôi đã thử các cách sau:Khởi tạo và tiêu diệt 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 

Vậy làm cách nào để thực hiện điều đó?

+0

Bạn cần phải nghiên cứu một số khái niệm OO. Đó là tất cả về TYPE biến. – Chchwy

Trả lời

3

Bạn không phải khai báo cá thể của bạn dưới dạng đối tượng, nếu bạn nhận được đối tượng tổ tiên không phải là thành phần transforma.

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

nếu bạn muốn có được chuyển đổi componant chỉ cần gõ obj.transform nếu bạn muốn destry các loại đối tượng Destroy(obj);

Hy vọng rằng sẽ giúp Hòa bình

+0

không thể chuyển đổi ngầm ... vì vậy tôi đã thêm (GameObject) ở đó và nó chạy thành công nhưng tôi cần phải kiểm tra thêm một vài điều để xác minh và sau đó thực hiện nó –

3

cho chuyển đổi và biến đổi thành phần không thể bị phá hủy

Phá hủy GameObject mà thành phần Transform được gắn vào:

GameObject.Destroy(o.gameObject); 

Instantiate phương thức trả về cùng loại của đối tượng thông qua như tham số. Vì đó là số Transform bạn không thể truyền số này đến GameObject. Hãy thử điều này:

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

nó nói không thể truyền từ nguồn đến đích –

+0

Phần nào? Cả hai đoạn trích của Heisenbug đều hoạt động tốt, được sao chép đúng nguyên văn. – Jerdak

1

mã của bạn không có ý nghĩa ..

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

Bạn đang tạo một Biến đổi? Tại sao bạn không thử gắn prefab thay vào đó?

Bạn nên thử:

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

Mã của ông có ý nghĩa hoàn hảo. [Tài liệu chính thức] (http://docs.unity3d.com/Documentation/ScriptReference/Object.Instantiate.html) thậm chí sử dụng cùng một ký hiệu 'Biến đổi công khai Prefab'. – Jerdak

+0

'public Transform prefab;' là ok, bạn có thể khai báo kiểu biến là Transform hoặc GameObject, phụ thuộc vào nhu cầu của bạn. – Chchwy

+0

Thú vị .. Vì vậy, bạn có thể nhanh chóng chuyển đổi .. Cảm ơn .. – xuanweng

0

tôi nhận thấy câu trả lời chấp nhận thực sự là sai.

Khi sử dụng chức năng Instantiate của lớp học MonoBehaviour, chúng tôi phải chỉ định loại nội dung chúng tôi đang khởi tạo. Tôi khuyên bạn nên đọc số Instantiate API reference.


Để tạo một prefab như một GameObject

GameObject g = Instantiate(prefab) as GameObject; 

Để tạo một prefab như một Transform và cung cấp một vị trí trong không gian 3D.

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

Để hủy cấu phần, có nghĩa là bạn có thể tiêu diệt tập lệnh đính kèm với gameObject cũng như rigibodies và các thành phần khác.

Destroy(g); 

hoặc

Destroy(t.gameObject)