Unity’de Işınlanma Sistemi Yapımı

Unity’de Işınlanma Sistemi Yapımı

8 Şubat 2020 4 Yazar: Ahmet Güler

Merhaba, bir önceki dersimizde Unity‘de basit bir oyuncu kontrolü yapmıştık.Bunun içerisinde hareket, zıplama ve kamera kontrol mekanikleri bulunuyordu.Bu dersimizde ise, Unity ile ışınlanma sistemi yapacağız.Böylece projelerimizde kontrol ettiğimiz nesnenin, başka koordinatlara hızlıca geçeceği bir teleport sistemi olacak.Şimdi yeni bir proje oluşturalım ve dersimize başlayalım.

Sahnemizin hazırlanması.

Bu senaryomuzda, iki adet ışınlanma kapımız olacak.Bunların birinden geçtiğimiz zaman, diğer noktanın pozisyonuna taşınacağız.Şimdi ilk olarak sahnemize bir Plane nesnesi ekleyelim.Bu zemin eğer ışınlanacak nesnemiz dışarıya doğru düşecek olursa, boşluğa gitmesin diye bir engel görevi görecek.Daha sonra iki adet Cylinder nesnesi oluşturuyoruz.Bu silindir nesneleri bizim ışınlanma kapılarımızı oluşturacak.Bunları altlı üstlü olacak şekilde sahnemize yerleştiriyoruz.

Tabi daha öncesinde bu nesneleri, Scene penceresinden istediğimiz boyutlarda ayarlamayı unutmuyoruz.Şimdi bu Cylinder nesnelerimizin collider bileşenlerini silmemiz gerekiyor.Çünkü bize düz bir collider gerekiyor.Bunun için Inspector penceresinden BoxCollider bileşenini her iki silindir nesnemize de ekliyoruz.Daha sonra bu nesneler için yeni etiketler oluşturuyoruz.Bu arada ben sahneme bu şekilde konumlandırmayı tercih ettim.Siz istediğiniz şekilde yerleştirebilirsiniz.Daha sonra bir Cube nesnesi oluşturuyoruz.Bu nesne, oyuncumuzun üzerinde hareket edeceği köprümüzü oluşturacak.

Sahnemin görseline bakacak olursanız, daha iyi anlayacaksınız.Bu nesnenin boyutları ile oynayarak istediğimiz şekle sokuyoruz.Sonra bir Cube nesnesi daha oluşturuyoruz.Bu nesne ise, bizim kontrol edeceğimiz ve portaldan geçecek olan oyuncumuzu oluşturacak.Bu nesneye Inspector penceresinde, Rigidbody bileşenini ekliyoruz.Sonra bu nesne için yeni bir etiket oluşturuyoruz ve sonra nesnemize ekliyoruz.Son olarak istediğimiz kaplamaları nesnelerimize ekledikten sonra sahnemiz hazır hale geliyor.Son hali bu şekildedir.

Unity-Işınlanma-Sistemi-Yapımı-portal tutorial

Script dosyalarımızı oluşturalım.

Bu proje için iki C# Script dosyası kullanacağız.Bir tanesi ışınlanma mekaniği için, diğeri oyuncu nesnemizin hareketi için kullanacağız.Şimdi ilk script dosyamızı editör ile açalım ve kod yazmaya başlayalım.

public Vector3 CikisNoktasi;

Öncelikle değişkenimizi oluşturuyoruz.Bu Vector3 değişkeninde, oyuncumuzun ikinci ışınlanma kapısından çıkması için gerekli koordinatları tutacağız.

CikisNoktasi = GameObject.FindWithTag ("cikis").transform.position;
CikisNoktasi = new Vector3 (CikisNoktasi.x, CikisNoktasi.y-0.1f, CikisNoktasi.z);

Şimdi start() fonksiyonunun içerisine bu kodları yazalım.İlk satırda az önce tanımladığımız Vector3 değişkenimize, etiketi “cikis” olan nesnemizin pozisyonlarını eşitliyoruz.İkinci satırda ise, aldığımız pozisyon değerlerini biraz değiştiriyoruz.Şöyle ki, çıkış kapımızın üzerine ışınlanmamak için y ekseninin pozisyonunu eksi “0.1” azaltıyoruz.Böylelikle ışınlanma kapımızın tam altına geleceğiz.

void OnCollisionEnter(Collision Denetim) {
   if (Denetim.gameObject.tag == "oyuncu") {
      Denetim.transform.position = CikisNoktasi;
   }
}

Sonra yeni bir OnCollisionEnter fonksiyonu oluşturuyoruz.Bu fonksiyon ile oyuncu nesnemizin ışınlanma kapısı ile temasını kontrol edeceğiz.İkinci satırda, yeni bir koşul oluşturuyoruz.Eğer ışınlanma kapısı ile temas eden nesnenin etiketi “oyuncu” ise, koşulumuz doğru oluyor ve içerisindeki kodları çalıştırıyor.

Üçüncü satıra bakacak olursak, bu kapı ile temas eden nesnemizin pozisyonunu, daha önce oluşturduğumuz değişkenin değerlerine eşitliyoruz.Böylelikle oyuncu nesnemizi diğer kapının pozisyonuna ışınlamış oluyoruz.Eğer ışınlanma kapısının içerisine girip ışınlanmak istiyorsanız, Trigger fonksiyonlarından birini kullanmanız gerekiyor.

transform.Rotate(0, 90f * Time.deltaTime * 0.1f, 0);

Bu kodu ise update() fonksiyonunun içerisine yazıyoruz.Bu kod ile, ışınlanma kapılarımızı y ekseninde sürekli olarak döndürmüş oluyoruz.Bu dönüşün hızını belirlemek içinde, “0.1” değeri ile çarpıyoruz.Bu değeri arttırarak, dönüş hızını değiştirebilirsiniz.Evet ilk script dosyamız hazır.

Işınlanacak nesnemize hareket kazandıralım.

Evet şimdi ikinci script dosyamızı açılım ve kodlarımızı yazmaya başlayalım.

public float OyuncuHizi;

İlk olarak değişkenimizi oluşturuyoruz.Bu değişken ile oyuncu nesnemizin hareket hızını belirleyebileceğiz.

OyuncuHizi = 5f;

Daha sonra start() fonksiyonumuzun içerisine bu kodu yazıyoruz.Az önceki değişkenimiz için bir değer belirliyoruz.

transform.Translate (Input.GetAxis("Vertical")*Vector3.forward*OyuncuHizi*Time.deltaTime);
transform.Translate (Input.GetAxis("Horizontal")*Vector3.right*OyuncuHizi*Time.deltaTime);

Son olarak update() fonksiyonunun içerisine bu kodları yazıyoruz.İlk satırda Translate fonksiyonunu kullanıyoruz.Burada Vector3.forward yani ileri yöndeki hareketini sağlamak için, hızı ayarladığımız değişkenimiz ile çarpıyoruz.Bu hareketin her karede aynı olması içinse, Time.deltaTime fonksiyonu ile çarpıyoruz.İkinci satırda da aynı görevleri yerine getiriyoruz.Ancak bu kez, yatay eksen için bu işlemleri yapıyoruz.Evet ikinci script dosyamızda hazır duruma geldi.

Evet artık script dosyalarımızı nesnelerimize ekleyebiliriz.İlk script dosyamızı, ışınlanma kapılarını oluşturan nesnelerimizin üzerine sürükleyip bırakıyoruz.Hareket için oluşturduğumuz ikinci script dosyamızı ise, oyuncu nesnemizin üzerine sürükleyip bırakıyoruz.Artık projemiz hazır.Evet bu projemizin de sonuna geldik.Bir sonraki yazıda görüşmek üzere…

Unity-Işınlanma-Sistemi-Yapımı-portal tutorial