Unity’de Pause Menüsü Yapımı

Unity’de Pause Menüsü Yapımı

22 Şubat 2020 0 Yazar: Ahmet Güler

Merhaba, bir önceki yazımızda Unity‘de yerden silah gibi nesneleri alma ve taşıma mekaniğini öğrenmiştik.Bu şekilde istediğimiz nesneleri yerden alıp pozisyonlarını değiştirebiliyorduk.Bugünkü dersimizde ise, daha önceki yazılarda anlattığım menü yapımının devamı niteliğinde olan pause menüsü yapımını öğreneceğiz.Evet vakit kaybetmeden yeni bir proje oluşturalım ve dersimize başlayalım.

Pause menümüzün arayüzünü oluşturalım.

Bu proje için gayet basit bir senaryo kullanacağız.Sadece sahnemizde arayüz (UI) elemanlarının dışında, iki nesne olacak.Pause mekaniğini daha iyi kavramak adına, yukarıdan bir Cube nesnesini aşağıya bırakacağız.Böylece arayüze geçtiğimiz zaman oyunun tam anlamıyla durduğunu daha iyi anlayacağız.Şimdi ilk olarak pause menüsü için arayüz (UI) elemanlarını oluşturmaya başlayalım.Öncelikle bir Canvas elemanı oluşturuyoruz.Bunu Hierarchy penceresinde sağ tıklayarak sırasıyla, UI > Canvas seçimi ile yapıyoruz.Daha önceki menü yapımı yazısında bu elemanları daha detaylı anlatmıştım.O yüzden yüzeysel geçiyorum.

Her çözünürlükte arayüz elemanlarımız aynı gözükmesi için Canvas Scaler bileşeninde yer alan, “UI Scale Mode” ayarını Scale With Screen Size seçeneğine getiriyoruz.Daha sonra X ve Y eksenleri için yeni bir çözünürlük veriyoruz.Tavsiyem “1920×1080” yani fullhd bir çözünürlüktür.Şimdi bu Canvas içerisine bir Panel ekliyoruz.Bu ilk panel bizim pause menümüzün arkaplanını oluşturacak.Bu işlemi İmage elemanını kullanarak da yapabilirdik.Bu panel için yeni bir etiket oluşturuyoruz.Daha sonra bu panel için bir arkaplan ekliyoruz.

Yalnız projeye dahil ettiğimiz arkaplan resmini ilk olarak Inspector penceresinde ayarlamamız gerekiyor.Resime tıkladığımız zaman sağ taraftaki Inspector penceresinden, Texture Type ayarını “Sprite (2D and UI)” seçeneğine getiriyoruz.Artık panel üzerinde kullanabiliriz.Bunun için, paneli seçiyoruz ve Image bileşeninin içerisinde bulunan Source Image bölümüne arkaplan resmimizi ekliyoruz.Eğer paneli transparan görürseniz, hemen altında bulunan Color bölümüne tıklıyoruz ve A (Alpha) olarak göreceğimiz paleti en sağa yani “255” değerine getiriyoruz.Artık panelimiz saydam değil.Şu anki hali bu şekildedir.

Unity-Pause-Menüsü-Yapımı-How-to-make-a-pause-menu-tutorial

Şimdi ilk panelimizi hazırladık.Toplamda üç panel kullanacağız.İkinci panelde oyunumuzun durdurulduğu uyarısı yer alacak.O zaman yapmaya başlayalım.İlk panelimize seçiyoruz ve yeni bir panel ekliyoruz.Yani ilk panelin ebeveyn olarak kalması gerekiyor.Daha sonra bu panelin Scene penceresinde konumunu ayarlıyoruz.Burada işimizi kolaylaştırmak için, çapaları “Anchors” kullanmak daha iyi olacaktır.İstediğimiz gibi ayarladıktan sonra, bu panelin içerisine yeni bir Text elemanı ekliyoruz.

Bu text elemanında uyarı mesajımız bulunacak.Yine eleman içinde gerekli pozisyon ayarlarını yapıyoruz.Yalnız burada yazdığımız yazı çok küçük gözükebilir.Bunu düzeltmek için, çervevesini istediğimiz boyutlara getiriyoruz.Daha sonra Text bileşeninin içerisinde bulunan Paragraph bölümünü resimdeki gibi düzenliyoruz.Bu panel için son olarak, arkaplan resmini bir önceki panelde kullandığımız resim gibi ayarladıktan sonra ekliyoruz.

Unity-Pause-Menüsü-Yapımı-How-to-make-a-pause-menu-tutorial

Şimdi gelelim son panelimizi oluşturmaya.Bu panelde oyuna geri dönmek için bir butonumuz bulunacak.Yine ilk panelimiz içerisinde yeni bir panel oluşturuyoruz.Daha sonra bu panelin Scene penceresinden konumunu ayarlıyoruz.Sonra paneli seçiyoruz ve altına yeni bir Button elemanı ekliyoruz.

Bu buton elemanımızı da istediğimiz gibi boyutunu ve konumu ayarlıyoruz.Ve tabi ki, butonumuzun yazısının gözükmesi içinde yine az önce yaptığımız işlemleri gerçekleştiriyoruz.Son olarak üçüncü panelimizin arkaplan resimi ekliyoruz.Artık pause menümüz için oluşturduğumuz arayüzümüz hazır duruma geldi.Son hali bu şekildedir.

Unity-Pause-Menüsü-Yapımı-How-to-make-a-pause-menu-tutorial

Sahnemizde kullanacağımız nesneleri hazırlayalım.

Şimdi pause menümüzün çalışıp çalışmadığını anlamak için bir sahne hazırlayacağız.Bunun için sahnemize bir Plane nesnesi ekliyoruz.Bu nesne bizim zeminimizi oluşturacak.Daha sonra bir Cube nesnesi ekliyoruz.Bu nesneyi havadan yere bırakacağız.Böylece nesnenin yer çekiminden etkilenmesini pause menüsüne geçerek durdurabileceğiz.Tabi bu yerçekimini oluşturmak için, Cube nesnemize Inspector penceresinden Rigidbody bileşenini ekliyoruz.Böylece nesnemiz fizik unsurlarından etkilenecek hale geldi.Sahnemizin görüntüsü ise bu şekildedir.

Unity-Pause-Menüsü-Yapımı-How-to-make-a-pause-menu-tutorial

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

Şimdi yeni bir boş nesne oluşturuyoruz.Bu nesneye birazdan oluşturacağımız script dosyamızı ekleyeceğiz.Daha sonra bu nesneyi arayüzümüzde bulunan Button elemanına ekleyeceğiz.Böylece butona basıldığında ne yapacağını belirlemiş olacağız.Tabi bunları yapmadan önce, yeni bir C# Script oluşturuyoruz.Bu dosyamızı editör yardımı ile açarak artık kod yazmaya başlayabiliriz.

public GameObject PauseMenuPaneli;
public bool PaneliAcKapat;

ilk olarak script dosyamızda kullanacağımız değişkenleri oluşturmakla başlıyoruz.İlk satırda yeni bir GameObject değişkeni oluşturuyoruz.Bu değişken ile panelimizi erişebileceğiz.İkinci satırda ise, bool türünde bir değişken oluşturuyoruz.Bu değişken ile de, panelimizi kontrol edeceğiz.

PauseMenuPaneli = GameObject.FindWithTag ("pauseMenusu");

Şimdi start() fonksiyonumuzun içerisine bu kodu yazıyoruz.Değişkenimize, etiketi “pauseMenusu” elemanı tanımlıyoruz.Böylece panelimizi kontrol edebileceğiz.

void OyunuDurdur() {
   if (Input.GetKeyDown(KeyCode.Escape)) {
      PaneliAcKapat = !PaneliAcKapat;
   }
}

Daha sonra yeni bir fonksiyon oluşturuyoruz.Bu fonksiyon ile pause menümüzü kontrol edeceğiz.İkinci satırda yeni bir koşul oluşturuyoruz.Eğer ESC (Escape) tuşuna basılırsa koşulumu aktif oluyor.Bu tuş yerine istediğiniz bir tuşu da kullanabilirsiniz.Üçüncü satırda, daha önceki yazılarımdan gördüğünüz bir yapı bulunuyor.Burada bool türündeki değişkenimizin değerini hem true hemde false yapabiliyoruz.

Buradaki mantık ise şu şekildedir.Eğer değişkenimizin değeri true ise, false değerini eşitle.Eğer false ise de, bu sefer true değerine eşitle.Bildiğiniz üzere yada bilmiyorsanız da, değişkenlerin başına eklenen ünlem işareti, değerinin false olduğunu gösteriyor.Yani bu, “PaneliAcKapat = false” demenin kısayoludur.

if (PaneliAcKapat) {
   Time.timeScale = 0;
   PauseMenuPaneli.SetActive (PaneliAcKapat);
}else {
   Time.timeScale = 1;
   PauseMenuPaneli.SetActive (PaneliAcKapat);
}

Şimdi bu kodları fonksiyonumuzun devamına ekliyoruz.Burada az önce tek tuş ile kontrol edebildiğimiz bool değişkenimizin değerine göre panelimizi gösterip gizleyebileceğiz.İlk satırda yeni bir koşul oluşturuyoruz.Eğer bool türündeki değişkenimizin değeri true ise içindeki kodları çalıştırıyoruz.Tam tersi ise, bu sefer else bölümündeki kodları çalıştırıyoruz.

İkinci satıra bakacak olursak, Time.timeScale fonksiyonunu görüyoruz.Bu fonksiyon, projedeki nesnelerin hızını etkiler.Yani zamanı kontrol edebilirsiniz.Bir başka değişle, nesnelerimize ağır çekim vermek için bu fonksiyonu kullanıyoruz.Buradaki sıfır “0” değerini zamanı durdurmak için verdik.Üçüncü satırda SetActive fonksiyonunun yardımı ile, panelimizi açıp/kapatabiliyoruz.

Parantez içerisinde ise, bool türündeki değişkenimiz o anki değerini referans alıyoruz.Beşinci satırda bu sefer, Time.timeScale fonksiyonumuzun değerini bire “1” eşitliyoruz.Böylece sahnemizde ki zaman normal dönüyor ve nesneler hareket edebiliyor.Altıncı satırda ise, panelimizi SetActive fonksiyonu ile bool değişkeninin o anki değerine göre az önce olduğu gibi aktif yada pasif edebiliyoruz.

Butonumuza görevini atayalım.

public void DevamEt() {
   Time.timeScale = 1;
   PaneliAcKapat = !PaneliAcKapat;
   PauseMenuPaneli.SetActive (PaneliAcKapat);
}

Pause menümüz içinde bulunan Button elemanımıza görev vereceğimizi söylemiştim.Bunun için yeni bir fonksiyon oluşturuyoruz.Bu fonksiyon ile aynı ESC (Escape) tuşunun yaptığı görevi bir butona yaptırabileceğiz.İkinci satırda, Time.timeScale fonksiyonu yardımı ile sahnemizde ki zamanı normale döndürüyoruz.

Bunu az önce bir “1” değerini vererek yapabildiğimizi söylemiştik.Üçüncü satırda, bool değişkenimizin true/false değerlerini alabilmesi için oluşturduğumuz yapıyı görüyoruz.Dördüncü satırda ise pause menümüz için oluşturduğumuz panelimizi, SetActive fonksiyonu ile kapatıyoruz.

OyunuDurdur ();

Son olarak oluşturduğumuz fonksiyonun çalışması için bu kodu, update() fonksiyonunun içerisine yazıyoruz.Artık yazmış olduğumuz script dosyamız hazır konuma geldi.

Evet projemiz hazır.Şimdi son olarak, butomuza görevini vermemiz gerekiyor.Bunun için, Button elemanımızı seçiyoruz.Daha sonra Inspector penceresinde On Click bölümünde bulunan artı “+” butonuna basıyoruz.Sonra script dosyamızı eklediğimiz boş nesnemizi, burada bulunan alana sürükleyip bırakıyoruz.Hemen yanında yer alan bölümden ise, script dosyamıza verdiğimiz ismi seçiyoruz ve buton için oluşturduğumuz fonksiyonumuzun ismine tıklıyoruz.Artık projemizi çalıştırıp test edebiliriz.Evet bir sonraki yazıda görüşmek üzere…

Unity-Pause-Menüsü-Yapımı-How-to-make-a-pause-menu-tutorial