Unity-Prefab & Instantiate
Prefab çoğaltılabilir nesne anlamına gelmektedir. Aynı biçimde ki objeleri tekrar tekrar oluşturmak yerine bir defa oluşturup sahnede bu objeyi kullanmamıza yarar. Örnek vermek gerekirse sahnede 20 tane nesnemiz var. Bu nesneler birbirinin aynısı. Bu nesneleri tekrar tekrar sırasıyla oluşturmak yerine önce 1. nesneyi oluştururuz. Sonra bu objeyi Prefab haline getiririz. Prefab haline getirilen bu nesneyi sahneye sürükle bırak yaparak geri kalan objeleri hızlıca oluşturmuş oluruz.
Şimdi Prefab olayını çok daha iyi anlamak amacıyla Unity de bununla ilgili bir örnek yapalım.
Öncelikle sahnemizde 1 adet Sphere türünde bir obje oluşturalım. Ve oluşturduğumuz bu nesneyi sürükleyerek alt kısımda bulunan Prefabs klasörümüzün içerisine bırakalım.
Hierarchy panelin de gördüğünüz üzere Obje adlı nesnenin başında mavi bir kutucuk oluştu. Bu kutucuk nesnenin bir Prefab olduğunu belirtir.
Şimdi Prefabs klasöründe de bulunan Obje adlı Prefab ile sahnemizde 3 tane daha klon obje oluşturalım. Bunun için Prefab’ ı sahnemize ya da Hierarchy paneline sürükleyip bırakmamız yeterli olacaktır.
Evet yukarıda ki resimde de görüldüğü üzere toplam da 4 adet klon objemiz oldu. Peki şimdi Prefab kullanımının en güzel özelliklerinden birisi olan toplu etki özelliğine bakalım. Bunun için öncelikle Prefab klasörü içerisinde ki Obje adlı Prefab’ ı seçiniz.
Seçim yaptıktan sonra Hierarchy panelinde gözüken Open Prefab butonuna tıklayınız.
Karşımıza şöyle bir prefab arayüzü çıkacaktır.
Şimdi toplu etki olayı için basit bir deneme yapalım. Inspector panelinde bulunan Mesh Filter componentinde Mesh seçeneğini Sphere değil de Cube olarak seçelim.
Değişikliği yaptıktan sonra sahnemize dönmek için Hierarchy panelinde Prefab’ın yanında bulunan ok simgesine tıklayalım.
Sahnemize döndükten sonra olan değişikliği görüyorsunuz. Başlangıçta nesneler birer Sphere iken şimdi hepsi birer Cube görünümünde. Sahnede ki objeler Prefab ile oluşturulduğu için Prefab içerisinde yapılan her türlü değişikliğe bu nesnelerde maruz kaldı.
Şimdi istediğimiz yerde, istediğimiz zamanda kod ile bu Prefabdan nesne oluşturup kullanmayı gösterelim.
Öncelikle Prefab içerisine girip Rigidbody componenti ekleyelim.
Daha sonra sahnemize dönüp 1 adet boş obje oluşturalım.
Bu boş obje içerisine Olustur adında bir Script dosyası oluşturalım.
Script içerisine şu kodları yazalım.
Bu kod basitçe şu işlemi yapıyor.
Biz C tuşuna her basışımızda belirttiğimiz prefabdan bir nesne oluşturup 2 saniye sonra da bu objeyi yok ediyor.
Unity içerisinde Instantiate adında bir obje oluşturma metodu vardır.
Bu metot 3 parametre alır.
1. parametre oluşturulacak obje,
2. parametre objenin oluşturulacağı pozisyon
3. parametre objenin dönme açısı
Biz kodumuzda oluşturulacak objeyi dışarıdan belirteceğimizi söyledik.
Daha sonra C tuşuna basınca bir Instantiate işlemi olacağını belirttik.
Instantiate metoduna 1. parametre olarak dışarıdan belirleyeceğimiz Prefab objesini girdik.
2. parametre de ise transform.position dedik. Yani bu kodun içerisinde bulunduğu objenin konumunu al dedik. Hatırlarsanız biz boş bir obje oluşturmuştuk. Objeler oluştuğu an bu boş objemizin olduğu konumda oluşturulacaklar.
3. parametre de Quaternion.identiny diyerek aslında açısının (X,Y,Z) değerlerinin 0,0,0 olacağını belirttik.
En sonda ise bu objelerin 2 saniye sonra yok olması için Destroy metodunu kullandık.
Şimdi sahnemize dönelim. Kodumuzda public olarak belirtiğimiz GameObject’ e atama yapalım.
Atama yaptıktan sonra şöyle görünecektir.
Oyunumuzu çalıştıralım. C tuşuna ard arda basalım. Objeler belirtilen yerde oluşmaya başlıyor ve 2 saniye sonra da yok oluyor.
Prefab ve Instantiate oyunlarda sıklıkça kullanıyor. Örneğin oyunlarda kullanılan mermi sistemini bunlarla yapabiliriz.