Unity ile Oyunda Nasıl Bölüm Geçilir?

Unity ile Oyunda Nasıl Bölüm Geçilir?

29 Ocak 2020 0 Yazar: Ahmet Güler

Merhaba, bir önceki yazımızda Unity ile bir roket adam yapmıştık.Bu roket adamın hareketlerini kontrol ederek, roketlerini açıp kapatabiliyorduk.Bugünkü yazımızda ise Unity’de yapmış olduğunuz projelerde, nasıl bölümü geçeceğinizi yada bir başka değişle nasıl level atlayacağımızı öğreneceğiz.Evet vakit kaybetmeden yeni bir proje oluşturalım ve dersimize başlayalım.

Kullanacağımız bölümlerin tasarlanması.

Bu projemizdeki senaryo gayet basit olacak.Bir oyuncumuz ve iki adet bölümümüz (levelimiz) olacak.Biz diğer bölüme geçmek için bir geçit kullanacağız.Evet şimdi ilk bölümümüzü yapmakla başlayalım.Sahnemize iki adet Plane nesnesi ekleyelim.Bunlardan biri zeminimizi oluşturacak diğeri ise bölümümüzün arkaplanını oluşturacak.Yanlız ikinci Plane nesnemizi x ekseninde 90 derece döndürmemiz gerekiyor ki, duvar halini alsın.Daha sonra bir Cube nesnesi ekliyoruz.

Bu nesne bölümü geçmek için kullanacağımız geçit görevi görecek.Bu geçit nesnemize yeni bir etiket belirliyoruz ve bu nesneye ekliyoruz.Daha sonra collider bileşeninin, “isTrigger” özelliğini true hale getiriyoruz.Şimdi bir tane daha Cube nesnesi oluşturalım.Bu nesne ise, bizim kontrol edeceğimiz oyuncumuz olacak.Bu nesneye bir Rigidbody bileşeni ekliyoruz.Daha sonra bu nesnemiz içinde yeni bir etiket oluşturuyoruz ve nesnemize ekliyoruz.Daha sonra sahnemizde ki nesnelere istediğimiz gibi kaplama ekliyoruz.

Yapmış olduğumuz bu bölümü kaydetmek için, kısayol olarak crtl+s yada sol üstte bulunan “File” menüsünden Save Scenes butonuna tıklıyoruz.Yeni bir isim verdikten sonra kaydediyoruz.Son olarak yine sol üstte bulunan “File” menüsüne tıklıyoruz ve Build Settings menüsüne giriyoruz.Buradan Add Open Scenes butonuna tıklıyoruz.Artık yapmış olduğumuz sahne projemize eklendi ve level atlayacağımız zaman buradan çağırabileceğiz.Şimdi yeni bir sahne oluşturalım.

Bunu ctrl+n kısayolu yada “File” menüsünden New Scene butonu ile yapabilirsiniz.Yeni bölümümüzü de, aynı şekilde tasarlayabilirsiniz.Bu projede, örnek olarak iki benzer sahne oluşturdum.Sadece kaplamalarını değiştirdim.Burada unutmamanız gereken oluşturmuş olduğunuz levelleri, Add Open Scenes butonu ile projenize eklemek.Benim yaptığım sahnelerin son hali bu şekildedir.

Kodlarımızı yazmaya başlayalım.

Bu projede iki adet script dosyası kullanacağız.Bunlardan birini oyuncumuzu hareket ettirmek için kullanacağız.Diğerini ise, geçitlerimizi kontrol etmek için kullanacağız.Yani tetikleyici görevi görecekler ve diğer bölüme oyuncumuzu geçirecekler.Şimdi iki adet C# Script dosyası oluşturalım ve bunlara isimlerini verelim.Daha sonra ilk script dosyamızı editörde açalım ve kodlarımızı yazmaya başlayalım.

public float OyuncuHizi;

Evet ilk olarak oyuncumuz hızını kontrol edebilmek için, float türünde değişken oluşturuyoruz.

OyuncuHizi = 5f;
DontDestroyOnLoad(this.gameObject);

Daha sonra start() fonksiyonumuzun içerisine bu kodları yazıyoruz.İlk satırda, değişkenimize bir değer atıyoruz.İkinci satırda ise daha önceki yazılarımda görmediğiniz bir fonksiyon yer alıyor.DontDestroyOnLoad fonksiyonu ile yeni bir sahne yada level yüklenirken, hedef nesnemizin silinmemesini sağlıyor.Normalde yeni bir bölüme geçtiğimiz zaman, sahnedeki nesnelerin hepsi silinir.Yani o bölümde kalır.Bu fonksiyon ile, hedef nesnelerimizin silinmemesini ve yeni sahneye taşınmasını sağlıyoruz.İşte son satırda, oyuncu nesnemizin diğer levele, silinmeden geçişini sağlıyoruz.

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

Şimdi update() fonksiyonumuzun içersine, bu kodları yazıyoruz.İlk satırda oyuncumuzun dikey eksendeki hareketini kontrol ederken, ikinci satırda ise yatay eksendeki hareketini kontrol ediyoruz.Bunu Translate fonksiyonu ile yapıyoruz.Bu kodları daha önceki yazılarımda detaylı anlattığım için kısa geçiyorum.Bu script dosyamız artık hazır.

 

public GameObject oyuncu;
public bool isinlanmaKontrolu;

Evet şimdi ikinci script dosyamızı açalım.Yine ilk olarak, bize gereken değişkenleri yazmakla başlıyoruz.İlk satırda, oyuncu nesnemizi kontrol edebilmek için bir GameObject oluşturuyoruz.İkinci satırda ise, bool türünde bir değişken oluşturuyoruz.Bu değişken ile geçide yanlışlıkla girdiğimizde bir önceki bölüme gitmemek için bir kontrol sağlıyoruz.Tabi projeye göre bir önceki bölüme dönülmesi de gerekebilir.Ben bu projede geçişi engelledim.

oyuncu = GameObject.FindWithTag ("oyuncu");
isinlanmaKontrolu = true;
if (Application.loadedLevelName == "BOLUM2") {
   oyuncu.transform.position = GameObject.FindWithTag ("gecit").transform.position;
   isinlanmaKontrolu = false;
}

Start() fonksiyonu içerisine bu kodları yazıyoruz.İlk satırda değişkenimize, etiketi “oyuncu” olan nesneyi tanımlıyoruz.İkinci satırda, bool değişkenimizi true olarak değiştiriyoruz.Üçüncü satırda, yeni bir koşul oluşturuyoruz.Eğer yeni yüklenen bölümün (levelin) ismi “BOLUM2” ise, koşulumuz doğru oluyor ve içindeki kodları çalıştırıyor.Dördüncü satırda, oyuncumuzun pozisyonunu etiketi “gecit” olan nesnenin pozisyonuna eşitliyoruz.Böylelikle diğer bölüme geçtiğimizde oyuncu nesnemiz, geçit nesnemizin içerisinde duracaktır.Beşinci satırda, bool değişkenimizi false değerine eşitliyoruz.Böylece yeni sahnede geçitten tekrar geçemiyoruz.

void OnTriggerEnter(Collider Kontrol) {
   if (Kontrol.gameObject.tag == "oyuncu" && isinlanmaKontrolu) {
      Application.LoadLevel(1);
   }
}

Evet şimdi yeni bir OnTriggerEnter fonksiyonu oluşturuyoruz.İkinci satırda, yeni bir koşul oluşturuyoruz.Eğer geçidimizin ile temas eden nesnemizin etiketi, “oyuncu” ise ve “isinlanmaKontrolu” değişkenimizin değeri true ise koşulumuz doğru olmuş oluyor.Üçüncü satırda ise, yeni bir fonksiyon görüyorsunuz.LoadLevel fonksiyonu ile, parantez içerisinde bulunan sayıya karşılık gelen bölümü yüklemiş oluyoruz.

Bu sayı bir index değeridir.Hatırlarsanız sahneleri projemize kaydederken, Add Open Scenes butonunu kullanmıştık.İşte bu menüde bulunan sahne isimlerinin hemen karşısında bir index numarası vardır.Benim projemde gideceğim levelin index numarası bir “1” olduğu için ben bunu yazdım.Evet bu script dosyamız ile de işimiz bitti.

Son olarak, ilk script dosyamızı oyuncu nesnemizin üzerine sürükleyip bırakıyoruz.İkinci script dosyamızı ise, geçit nesnelerimizin üzerine sürükleyip bırakıyoruz.Artık projemiz hazır konuma geldi.Mantığı anlamanız açısından son derece basit tutmaya çalıştım.Tabi ki geliştirmeye açıktır.Bu projemizde sonuna geldik.Bir sonraki yazıda görüşmek üzere…

unity-bolum-gecmek-level-atlama