Unity Obje Oluşturma (Instantiate)

Unity Obje Oluşturma (Instantiate)

C# 13 Kasım 2021 - 17:47:09 39 Gösterim 0 Yorum

Unity herhangi bir obje oluşturup onun içerisine nesneler ekleyebilirsiniz. Ya da projenize dahil ettiğiniz Prefabları dilediğiniz gibi kullanabilirsiniz. Bunun için Instantiate() kullanıyoruz. Oyun esnasında random olarak yada daha önceden belirlediğiniz Transform alanlarına belirli nesneleri atamak için kullanıma uygundur. Hemen bir test yapalım.

public class Test : MonoBehaviour
{
 
public Transform Hedef;
public GameObject Nesne;

void Start()
{
 Instantiante(Nesne, Hedef.position, Hedef.rotation);
}

}

Bu kullanım Nesne olarak belirlediğimiz nesneyi Hedef olarak belirlediğimiz Transform alanının position ve rotation bilgilerine göre ekler. Kullanımı biraz daha geliştirelim ve oluşturduğumuz nesneyi Hedef'in alt elemanı olarak ekletelim. Kodumuzun hemen altına;

Nesne.transform.parent = Hedef.transform;

Böylece Nesne objemiz Transform'un alt elemanı olacaktır. Yani onu Parent olarak belirledik. Peki oluşturduktan sonra  yerini değiştirebilir miyiz? Tabiki değiştirebiliriz.

Nesne.position = New Vector3(x,y,z);

Direk oluştururkende olması gereken yerin verilerini Vector3 olarak atayabiliriz. Tekrar oluşturalım..

Instantiante(Nesne, New Vector3(x,y,z));

Belirlediğimiz alanda Nesne Objemiz oluşacaktır. Atama yaparak herkes bunu anlatır peki senin yazında bilgime bilgi katacak ne var? diyen sevgili senyörlerim; Biraz daha fazla detaylandıralım o zaman. İlk olarak atanan Objeyi bir GameObject haline çevirelim.

GameObject obje = Instantiate(Nesne, new Vector3(0,0,0), Quaternion.identity) as GameObject;

O bizim için artık obje. Veya classın içinde tanımlayacağınız public bir Gameobject'e atama yapabilirsiniz.

public class Test : MonoBehaviour
{
 
public Transform Hedef;
public GameObject Nesne;
public  GameObject YeniObje;
void Start()
{
 YeniObje = Instantiante(Nesne, Hedef.position, Hedef.rotation) as GameObject;
}

}

Peki ya herşey tamam, şimdi bu oluşturduğumuz nesneyi atama yoluyla değil de projemizde bir yerden bulup getirsek? Emriniz olur :)

public class Test : MonoBehaviour
{
 
public Transform Hedef;
public GameObject Nesne;
public  GameObject YeniObje;
void Start()
{
 YeniObje = Instantiante(Resources.Load("Resources Klasöründe Nesnenin Yeri"), Hedef.position, Hedef.rotation) as GameObject;
}

}

Resources isimli bir klasör oluşturun Assets'in içerisine. Prefablarınızı orada tutun mesela Assets > Resources> Prefab > ev.prefab dosyanız var diyelim.

Resources.Load("Prefab/ev");

Bunuda anladığınızı umuyorum. Ne anlattık derleyelim toplayalım. Derli toplu olsun; Instantiate ile bir objeyi mevcut sahnemize dahil ettik. parent ile bir transformun içine ekledik. Pozisyonunu değiştirdik ve projemizde bir yerde olan prefab yada nesneyi oyuna eklettik. Hepsi bu. Farklı kullanımları için aşağıdaki bağlantıya gidebilirsiniz.

https://docs.unity3d.com/ScriptReference/Object.Instantiate.html

Hepinize iyi kodlamalar.

Yorum Yapılmamış

Bu yazıya henüz bir yorum yapılmamış, hemen bir tane yapmak ister misin ?

Yorum Yapın