Projelerde nesneleri tasarım aşamasında da kod aşamasında da oluşturabilirsiniz. Prefabs klasörü içinde oluşturduğunuz bir nesneyi kodla projeye dahil etmenin birden fazla faydası vardır.
Sıfırdan bir nesneyi oluşturmak için kullanılan kod fazlalığını önler.
Prefabs nesneleri test edilip üzerinde gerekli işlemlerin yapıldığı bir sahne sunar. Sıfırdan hazırlanan bir nesneyi test etmeniz için sürekli kodu çalıştırmanız gerekir.
Kodu değiştirmeden prefabs nesnesi üzerinde değişiklik yaparak kod yapısını bozmamış olursunuz.
Basit bir Prefabs örneği
Öncelikle kod sayfasında kullanacağınız prefabs nesnesinin yükleneceği bir değişken oluşturmalıyız. Tasarım aşamasında bu prefabs nesnesini bu değişkene yüklediğimizde kodla üzerinde değişiklik yapabiliriz. Bu örneğimizde myPrefab isminde bir değişken oluşturuyoruz. Prefabs klasörü içindeki nesnemizi bu değişkene aktarıyoruz.
Öncelikle 3D bir proje oluşturalım. Projemize boş bir nesne ekleyelim. Bu nesnede kodların çalışması için NesneEkle isminde bir script dosyası oluşturalım. Script dosyasına aşağıdaki kodları yazalım.
using UnityEngine;
public class NesneEkle : MonoBehaviour
{
public GameObject myPrefab;
void Start()
{
Instantiate(myPrefab, new Vector3(0, 0, 0), Quaternion.identity);
}
}
Prefabs nesnesini değişkene aktaralım ve projeyi çalıştıralım. Sahnede bir adet küp nesnesini görebiliriz.
Prefabs nesnesine component ekleme
Çalışma zamanında prefabs nesnelerinin kullanımıyla ilgili birkaç örnek verelim.
Bir tane Prefabs nesnesinden birden fazla nesne türeterek istenilen işlemleri gerçekleştirme
Bir silahtan çıkan mermi prefab nesnesine istenilen işe göre birden fazla component ekleyip üzerinde işlemler yapma
Birden fazla nesneden oluşan bir robot nesnesini düşünelim. Tek kodla bu robotu parçalara ayırabilir ya da parçaları birleştirerek robotu oluşturabiliriz
Aşağıdaki örnekler bu işlemleri nasıl yapacağımızı gösterecektir.Şimdi tek bir kutudan bir duvar nesnesi oluşturalım. Yeni bir 3D projesi oluşturalım. Boş bir nesne oluşturalım. Bu nesneyi baz alacak bir script dosyası oluşturalım. Bu dosyanın içine aşağıdaki kodları yazalım.
public GameObject block;
public int width = 10;
public int height = 4;
void Start()
{
for (int y = 0; y < height; ++y)
{
for (int x = 0; x < width; ++x)
{
Instantiate(block, new Vector3(x, y, 0), Quaternion.identity);
}
}
}
Burada prefab nesnesiyle birlikte nesnenin genişliğini ve yüksekliğini de tasarım aşamasında vereceğiz. Projeyi çalıştırdığınızda 40 tane kutudan oluşan duvar yapılmış olur. Burada bir prefab kullanarak 40 tane oluşturduk. Bunların her birine değişik özellikler ekleyebilir ya da her birine farklı prefab dosyası ekleyerek yeni oyun uzayları oluşturabiliriz. Ben burada kod yapısı üzerinde değişiklik yaparak kutuların daire şeklinde yan yana gelmelerini sağlayacağım. Yukarıdaki script dosyasını yeniden düzenleyelim.
public GameObject prefab;
public int numberOfObjects = 20;
public float radius = 5f;
void Start()
{
for (int i = 0; i < numberOfObjects; i++)
{
float angle = i * Mathf.PI * 2 / numberOfObjects;
float x = Mathf.Cos(angle) * radius;
float z = Mathf.Sin(angle) * radius;
Vector3 pos = transform.position + new Vector3(x, 0, z);
float angleDegrees = -angle * Mathf.Rad2Deg;
Quaternion rot = Quaternion.Euler(0, angleDegrees, 0);
Instantiate(prefab, pos, rot);
}
}