Object.Instantiate
Deklarasyon
public static Object Instantiate(Object original);
Deklarasyon
public static Object Instantiate(Object original, Transform parent);
Deklarasyon
public static Object Instantiate(Object original, Transform parent, bool instantiateInWorldSpace);
Deklarasyon
public static Object Instantiate(Object original, Vector3 position, Quaternion rotation);
Deklarasyon
public static Object Instantiate(Object original, Vector3 position, Quaternion rotation, Transform parent);
Parametreler
original Kopyasını oluşturmak istediğiniz mevcut bir nesne.
position Yeni nesnenin konumu.
rotation Yeni nesnenin yönlendirilmesi.
parent Yeni nesneye atanacak olan ebeveyn.
instantiateInWorldSpace Eğer bir ebeveyn nesne atarsanız, yeni nesneyi dünya uzayında doğrudan
konumlandırmak için true değerini geçin. Eğer false değerini
geçirirseniz, nesnenin konumunu yeni ebeveynine göre ayarlayacaktır.
Dönüş Değeri
Object Instantiate edilen klon.
Açıklama
Orijinal öğeyi klonlar ve klonu döndürür.
Bu fonksiyon, editördeki Duplicate komutuyla benzer şekilde bir nesnenin kopyasını oluşturur. Eğer bir GameObject klonluyorsanız, onun konumunu ve rotasyonunu belirtebilirsiniz (aksi takdirde varsayılan olarak orijinal GameObject'in konumu ve rotasyonu kullanılır). Bir Component(Bileşen) klonluyorsanız, ona bağlı olan GameObject de aynı şekilde klonlanır ve yine isteğe bağlı olarak bir konum ve rotasyon belirtilebilir.
Bir GameObject veya Component(Bileşen) klonlandığında, tüm alt öğeler ve bileşenler de özellikleri orijinal nesneyle aynı şekilde klonlanır.
Not: Bu metod, bir alt öğe klonlandığında alt öğenin kendi alt öğelerini de klonlar. Yığın taşması önlemek için Unity, bu iç içe klonlamayı sınırlandırır. Yığın boyutunuzun yarısını aşıyorsanız, Unity InsufficientExecutionStackException hatası verir.
Varsayılan olarak, yeni nesnenin ebeveyni yoktur; yani orijinal nesnenin "kardeşi" değildir. Ancak, yine de üst öğeyi aşırı yüklenmiş metodlarla belirleyebilirsiniz. Bir üst öğe belirtilirse ve konum ve rotasyon belirtilmezse, klonlanan nesnenin yerel konumu ve rotasyonu için orijinal nesnenin konumu ve rotasyonu kullanılır, veya instantiateInWorldSpace parametresi true ise dünya konumu ve rotasyonu kullanılır. Konum ve rotasyon belirtilirse, dünya uzayında nesnenin konumu ve rotasyonu olarak kullanılırlar.
Klonlama anında, bir GameObject'un aktif durumu korunur, bu nedenle orijinal pasifse klon da pasif olarak oluşturulur. Ayrıca nesne ve hiyerarşideki tüm alt nesneler için, her bir Monobehaviour ve Bileşenin Awake ve OnEnable metodları, bu metod çağrısının yapıldığı anda hiyerarşide aktiflerse yalnızca çağrılır.
Bu metodlar, yeni oluşturulan nesne için bir prefab bağlantısı oluşturmaz. Nesneleri prefab bağlantısıyla oluşturmak için PrefabUtility.InstantiatePrefab kullanılabilir.
Ayrıca bakınız:
Instantiating Prefabs at run time
PrefabUtility.InstantiatePrefab.
// Prefab'ın 10 kopyasını birbirinden 2 birim uzaklıkta olacak şekilde oluştur. using UnityEngine; public class Example : MonoBehaviour { public GameObject prefab; void Start() { for (var i = 0; i < 10; i++) { Instantiate(prefab, new Vector3(i * 2.0f, 0, 0), Quaternion.identity); } } }
Instantiate, çalışma zamanında yeni nesneler oluşturmak için kullanılabilir. Örnekler arasında mermi veya patlama efektleri için kullanılan nesneler bulunur.
using UnityEngine; // Rigidbody nesnesini oluşturun ve daha sonra hızını ayarla public class Example : MonoBehaviour { // Oluşturmak için inspector'de bir Rigidbody bileşenini atayın public Rigidbody projectile; void Update() { // Ctrl tuşuna basıldığında bir mermi fırlat if (Input.GetButtonDown("Fire1")) { // Bu transformun pozisyonu ve rotasyonuyla mermiyi oluşturun. Rigidbody clone; clone = Instantiate(projectile, transform.position, transform.rotation); //Klonlanmış nesneye mevcut nesnenin Z ekseni boyunca başlangıç hızı verin clone.velocity = transform.TransformDirection(Vector3.forward * 10); } } }
Instantiate doğrudan komut dosyası örneklerini de klonlayabilir. Tüm oyun nesnesi hiyerarşisi klonlanacak ve klonlanmış komut dosyası örneği döndürülecektir.
using UnityEngine; using System.Collections; public class Missile : MonoBehaviour { public int timeoutDestructor; // ...diğer kod... } public class ExampleClass : MonoBehaviour { // Bir Missile komut dosyası eklenmiş bir Prefabı oluştur public Missile projectile; void Update() { // Ctrl tuşuna basıldı, bir mermi fırlat if (Input.GetButtonDown("Fire1")) { // Mermiyi, bu transformun konumunda ve dönüşümünde oluştur Missile clone = Instantiate(projectile, transform.position, transform.rotation); // Mermi zaman aşımı yok ediciyi 5 olarak ayarla clone.timeoutDestructor = 5; } } }
Bir nesneyi klonladıktan sonra, klonlanan nesneye bağlı belirli bir bileşeni ayarlamak için GetComponent kullanabilirsiniz.
Deklarasyon
public static T Instantiate(T original);
Deklarasyon
public static T Instantiate(T original, Transform parent);
Deklarasyon
public static T Instantiate(T original, Transform parent, bool worldPositionStays);
Deklarasyon
public static T Instantiate(T original, Vector3 position, Quaternion rotation);
Deklarasyon
public static T Instantiate(T original, Vector3 position, Quaternion rotation, Transform parent);
Parametreler
original Klonlamak istediğiniz T türündeki nesne.
Dönüş Değeri
Açıklama
Nesneleri oluşturmak için Generics kullanabilirsiniz. Daha fazla detay için Generic Fonksiyonlar sayfasına bakabilirsiniz.
Generics kullanarak sonucu belirli bir türe dönüştürmeye ihtiyaç duymayız.
using UnityEngine; public class Missile : MonoBehaviour { // ...diğer kod... } public class InstantiateGenericsExample : MonoBehaviour { public Missile missile; void Start() { Missile missileCopy = Instantiate<Missile>(missile); } }
Bu blog Unity Docs'un Türkçeye çevrilmiş halidir.
Yorumlar
Yorum Gönder