İçeriğe geç

Menü

Berk Akademi
Yorumlar Google yorumları Birebir ders başvurusu Ücretsiz ön görüşme Ana Sayfa

Unity 2D Oyunda Sahne Geçişi Nasıl Yapılır? Menüden Oyun Sahnesine

unity-2d-oyunda-sahne-gecisi-nasil-yapilir-menuden-oyun-sahnesine
Bu yazıda neler var?
  1. MainMenu ve Game sahnelerini hazırla
  2. Sahneleri proje içindeki sahne listesine ekle
  3. SceneManager kodunu yaz ve OnClick bağlantısını kur
  4. İki yönde test et ve başarıyı kontrol et
  5. Çalışmayan sahne geçişini sırayla teşhis et

Unity 2D oyunda sahne geçişi nasıl yapılır? Menüden oyun sahnesine geçmek için önce MainMenu ve Game adlı iki sahne oluşturulur, bu sahneler derlemeye dahil edilen sahne listesine eklenir ve ardından SceneManager.LoadScene çağrısı bir UI Button'ın On Click() olayına bağlanır. Bu parçanın ilk iki aşamasında, kod bağlantısına geçmeden önce sahne dosyalarını ve adlandırma düzenini hazırlayacağız.

MainMenu açılış menüsünü, Game ise oyunun açılacağı ekranı temsil edecek. Her iki sahneyi ayırt etmek için sade bir başlık veya görsel kullanmak, test sırasında hangi sahnede olduğunu anlamanı kolaylaştırır.

İlk aşamada iki sahne oluşturup her birini ayrı dosya olarak kaydet. Yeni sahne için File > New Scene yolunu kullan, Scene View'da 2D görünümünü aç ve ilk sahneyi File > Save Scene ile MainMenu adıyla kaydet. Aynı işlemi ikinci sahne için tekrarla ve dosya adını Game yap. Scene View'daki 2D görünümü, düzenlemeyi XY düzlemine bakarak yapmanı sağlar.

MainMenu sahnesi

Bu sahne açılış menüsü olacak. Sade bir başlık, arka plan rengi veya ayırt edici bir görsel ekle. Ardından GameObject > UI > Button yoluyla bir UI Button oluştur. Burada Canvas tabanlı Button kullan ve Hierarchy'de Button'ın bir Canvas altında yer aldığını kontrol et. Button'ın altındaki metin nesnesini seçip Inspector'da bulunan Text alanına Play yaz. Bu düğmenin görevi daha sonra Game sahnesini yüklemek olacak.

Game sahnesi

İkinci sahnede oyunun oynanacağı alanı temsil eden basit bir başlık, sprite veya renkli bir arka plan kullan. Sahneyi Game adıyla kaydettikten sonra yine bir UI Button ekle ve görünen metnini Back to Menu veya Ana Menü olarak düzenle. Bu düğme daha sonra MainMenu sahnesine dönüş için kullanılacak. Yaptığın değişiklikleri kaydet.

Sahne dosyasının adı ile düğme üzerinde görünen metin farklı kavramlardır. MainMenu.unity ve Game.unity dosya adlarıdır, Play ve Back to Menu ise oyuncunun gördüğü düğme etiketleridir. Bu nedenle ekranda Play yazarken kodda Game sahnesi yüklenebilir.

Sahneleri proje içindeki sahne listesine ekle

Sahneleri proje içindeki sahne listesine ekle

Scene dosyalarını kaydetmek tek başına yeterli değildir. Normal SceneManager.LoadScene kullanımıyla sahne adına göre yükleme yapılacaksa ilgili sahnenin, etkin build profilinin kullandığı Scene List içinde yer alması ve derlemeye dahil edilmesi gerekir. Unity'nin güncel arayüzünde File > Build Profiles yolunu aç, hedef profili seç; Scene List görünmüyorsa Add Settings > Scene List seçeneğini kullan.

MainMenu ve Game sahnelerini tek tek açıp Add Open Scenes düğmesine basabilirsin. Alternatif olarak Project penceresindeki MainMenu.unity ve Game.unity dosyalarını Scene List'e sürükle. İki satırın da etkin olduğunu, yani yanlarındaki seçim kutularının işaretli kaldığını kontrol et. Bazı arayüzlerde aynı bölüm File > Build Settings içindeki Scenes In Build adıyla görünür; ekleme ve etkinleştirme mantığı aynıdır.

Şimdi listedeki adları kodda kullanacağın adlarla karşılaştır. SceneManager.LoadScene("Game") çağrısında kısa sahne adı kullanıyorsan .unity uzantısını yazma. API, sahne adı yerine listede gösterilen yolu da kabul eder; yalnızca kısa ad verildiğinde eşleşen ilk sahne yüklenebilir. Aynı ada sahip farklı dosyalar varsa tam yolu kullanmak veya sahne adlarını benzersiz tutmak daha güvenlidir.

Büyük ve küçük harf farkını ayrıca kontrol noktası yap. Resmî API, sahne adı karşılaştırmasını büyük ve küçük harfe duyarsız yapar; yine de dosya adını ve koddaki adı aynı yazım standardıyla kullanmak, boşluk, yanlış uzantı veya yanlış dosya seçimi gibi diğer adlandırma hatalarını fark etmeyi kolaylaştırır. Bu aşamanın sonunda iki sahne kaydedilmiş, Scene List'te etkin ve kodda kullanılacak uzantısız adları net olmalıdır.

SceneManager kodunu yaz ve OnClick bağlantısını kur

SceneManager kodunu yaz ve OnClick bağlantısını kur

Üçüncü aşamada sahne değiştirme işlemini yönetecek bir SceneLoader scripti oluştur. Script, UnityEngine.SceneManagement ad alanını kullanarak Game ve MainMenu sahnelerini adlarıyla yükleyecek iki ayrı metot içersin.

using UnityEngine;
using UnityEngine.SceneManagement;

public class SceneLoader : MonoBehaviour
{
    public void OpenGame()
    {
        SceneManager.LoadScene("Game");
    }

    public void OpenMainMenu()
    {
        SceneManager.LoadScene("MainMenu");
    }
}

OpenGame metodu çağrıldığında Game sahnesi, OpenMainMenu metodu çağrıldığında ise MainMenu sahnesi yüklenir. SceneManager.LoadScene sahneyi adıyla yükleyebilir. Buradaki adların sahne dosyalarının adlarıyla eşleşmesi gerekir.

Script bileşenini iki sahneye ekle

Script dosyasını SceneLoader.cs adıyla kaydet. Dosya adı ile sınıf adının aynı olması, scriptin GameObject'e bileşen olarak eklenebilmesi için önemlidir. Ardından MainMenu sahnesini aç ve Hierarchy penceresinde boş bir GameObject oluştur. Bu nesneye SceneLoader scriptini Project penceresinden sürükleyerek ekle. Aynı işlemi Game sahnesinde de tekrarla. Böylece iki sahnede de düğmelerin çağırabileceği bir SceneLoader bileşeni bulunur.

Button OnClick olaylarını bağla

MainMenu sahnesinde Hierarchy penceresinden Play Button nesnesini seç. Inspector içindeki Button bileşeninin On Click() bölümünde bulunan artı düğmesine bas. Sahnedeki SceneLoader GameObject'ini yeni oluşan olay alanına sürükle. Açılan işlev menüsünden SceneLoader başlığını, ardından OpenGame() metodunu seç.

Daha sonra Game sahnesini aç ve geri dönüş için kullandığın Button nesnesini seç. Aynı On Click() adımlarını uygulayarak bu kez Game sahnesindeki SceneLoader GameObject'ini olay alanına sürükle ve SceneLoader menüsünden OpenMainMenu() metodunu seç. Metotların public void biçiminde ve parametresiz yazılması, Button olayından doğrudan seçilmelerini sağlar. Unity UI Button bileşenindeki On Click olayı, Inspector üzerinden bir UnityEvent çağrısına bağlanabilir.

İki yönde test et ve başarıyı kontrol et

Testi MainMenu sahnesini açarak başlat. Unity Editor'ün üst araç çubuğundaki Play düğmesine basarak Play Mode'a geç. Play Mode, projeyi Editor içinde çalıştırarak sahne ve düğme davranışlarını denemeni sağlar.

Önce MainMenu içindeki Play düğmesine bas. Beklenen sonuç, Game sahnesinin açılmasıdır. Game sahnesi göründüğünde geri dönüş düğmesine bas. İkinci geçişte beklenen sonuç MainMenu sahnesinin yeniden açılmasıdır. Bu iki yönlü akış, hem OpenGame() hem de OpenMainMenu() bağlantısının doğru kurulduğunu gösterir.

Başarı kontrol listesi:

  1. MainMenu ve Game sahnelerinin proje içindeki sahne listesinde bulunduğunu kontrol et.
  2. Sahne dosyalarının adlarıyla kodda kullanılan "MainMenu" ve "Game" adlarının eşleştiğini kontrol et.
  3. MainMenu'deki Play Button için doğru SceneLoader GameObject'inin ve OpenGame() metodunun, Game sahnesindeki geri dönüş Button için ise OpenMainMenu() metodunun seçildiğini kontrol et.
  4. Test sırasını MainMenu'den başlat, önce Play düğmesiyle Game sahnesine, ardından geri dönüş düğmesiyle MainMenu sahnesine geç.

Çalışmayan sahne geçişini sırayla teşhis et

Sahne geçişi çalışmadığında bütün ayarları aynı anda değiştirme. Önce sahne listesini, sonra dosya adını, ardından Button bileşeni ile On Click bağlantısını ve son olarak iki yönlü test sonucunu kontrol et. SceneManager.LoadScene sahne adını veya sahne listesindeki indeksi kullanır; bu nedenle ilk iki kontrol hedef sahnenin bulunup bulunmadığını gösterir.

Belirti Sıradaki kontrol Düzeltme veya yeniden test
sahne listesi Sahne açılmıyorsa, sahne listesinde MainMenu ve Game kayıtlı mı, ilgili satırlar etkin mi kontrol et. Console penceresindeki hatayı da incele. Eksik sahneyi listeye ekle veya devre dışı satırı etkinleştir. Play modunu yeniden başlatıp aynı butonu tekrar dene.
dosya adı Kodda LoadScene içine verilen ad ile Project penceresindeki sahne dosyasının adı aynı mı kontrol et. Sahne adıyla yükleme yapıyorsan .unity uzantısını ekleme. Yazım farkını düzelt, dosyayı kaydet, derlemenin tamamlanmasını bekle ve geçişi yeniden test et.
metod bağlantısı Buton seçiliyken Inspector'da Button bileşeni, Interactable seçeneği ve On Click satırı görünüyor mu bak. Hedef GameObject ile doğru, public ve uyumlu metot seçili mi kontrol et. Eksik scripti veya hedef nesneyi bağla, On Click satırını yeniden oluştur ve butonun gri ya da tepkisiz olup olmadığını tekrar dene.
test sonucu Play modunda önce MainMenu'den Game'e, sonra Game'den MainMenu'ye geçişi ayrı ayrı dene. Hiç tepki yok mu, yoksa yanlış sahne mi açılıyor, sonucu ayır. Yanlış sahne açılıyorsa On Click içindeki hedef metodu ve o metodun yüklediği sahne adını kontrol et. Bir yön çalışmıyorsa o sahnedeki bağlantıyı düzeltip iki yönü yeniden test et.

Bu sırayı izlediğinde sorun, sahnenin bulunamaması ile buton olayının çalışmaması arasında daha kolay ayrılır.

Bu içerik aradığın cevabı verdi mi?
Yanıtın, hangi yazıları geliştirmemiz gerektiğini anlamamıza yardımcı olur.
Bu içeriğin üretilmesinde yapay zeka araçlarından destek alınmıştır.

Bu konudan sonra ne okuyabilirsin?

Tüm yazılar

İlgili Eğitimler

Berk Keskin, yazılım geliştirici ve eğitmen
Yazar

Berk Keskin Kimdir?

Yazılıma 12 yaşında başladı; İzmir Ekonomi Üniversitesi'ni bölüm birincisi ve yüksek şeref öğrencisi olarak tamamladı. Bugün yalnızca eğitim vermekle kalmıyor, sektörde aktif olarak yazılım projeleri geliştiriyor ve gerçek dünya deneyimini birebir derslerine taşıyor. Ezberden uzak, mühendislik zihniyetini merkeze alan sürdürülebilir öğrenme sistemleri tasarlayarak sorgulayan, üreten ve problem çözebilen yeni nesil yazılımcılar yetiştiriyor.

Sektörel Deneyim & Projeler

  • Ticarify Entegrasyon Yazılım logosu CEO Ticarify Entegrasyon YazılımPazaryerleri ve e-ticaret sitelerine otomatik e-fatura kesimi, sipariş ve kargo takibi hizmetleri sunan e-Dönüşüm platformunun API mimarisini ve yazılım ekibini yönetmektedir.
  • Benim Düğünüm logosu CEO Benim DüğünümDijital etkinlik ve anı paylaşım platformu.
  • Siberdizayn logosu Yazılım Ekibi Lideri SiberdizaynYüksek anlık oyuncu trafiğine sahip oyun kontrol panelleri ve sunucu altyapıları geliştiren yazılım ekibine liderlik etmektedir.
  • MEDYOGRAFYA 360° Dijital Çözümler logosu Dijital Strateji Lideri MEDYOGRAFYA 360° Dijital ÇözümlerŞirketlerin dijital çözümlerde uzun vadede nasıl ilerlemesi gerektiği ve dijital dönüşüm süreçlerinin yönetilmesine destek olmaktadır.
  • İzmir Ekonomi Üniversitesi logosu Danışma Kurulu Üyesi İzmir Ekonomi ÜniversitesiMezun olduğu üniversitesinde, Bilgisayar Programcılığı bölümünün akademik müfredatını güncel sektör ihtiyaçlarına göre şekillendirmek adına Danışma Kurulu'nda görev almaktadır.
WhatsApp Hemen Ara