Object.Instantiate

Deklarasyon

public static Object Instantiate(Object original);

Deklarasyon

public static Object Instantiate(Object original, Transform parent);

Deklarasyon

public static Object Instantiate(Object originalTransform parent, bool instantiateInWorldSpace);

Deklarasyon

public static Object Instantiate(Object original, Vector3 position, Quaternion rotation);

Deklarasyon

public static Object Instantiate(Object originalVector3 positionQuaternion rotationTransform 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 originalTransform parent, bool worldPositionStays);

Deklarasyon

public static T Instantiate(T original, Vector3 position, Quaternion rotation);

Deklarasyon

public static T Instantiate(T originalVector3 positionQuaternion rotationTransform parent);


Parametreler

original     Klonlamak istediğiniz T türündeki nesne.

Dönüş Değeri

T T türündeki nesne.

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

Bu blogdaki popüler yayınlar

Important Classes - Vectors

RequireComponent

Important Classes - GameObject