Odak modu
Bu eğitimde, Menu ve Main sahneler arasında sahne akışını ve uygulamadaki uygulama için çıkış akışı kuracaksınız.
Bu eğitimin sonunda:
Bir önceki eğitimde gözden geçirdiğiniz gibi, bu görevde üzerinde çalışacağınız uygulama, kullanıcının aralarında gezinmesi gerektiği bir sürü farklı sahneye sahip.
Şu anda uygulama doğrudan Main sahneden başlıyor.Gerçek dünya uygulamasında, uygulama başladığında kullanıcının ayarları değiştirebileceği veya çıkabileceği bir menü olurdu.Bu eğitimde, o menüyü oluşturacaksınız.
Ana sahnede temel bir UI menüsü Canvas hazırladık, ancak beklenildiği gibi çalışmıyor. Eğer hafızanı yenilemeye ihtiyacın varsa proje özetindeki tüm sahne akışlarına bir bakın.
Alt metin: Basit akış diyagramı uygulamanın geçişlerini detaylı gösteriyor:Menu sahnesi girişte başlatılıyor; Menu ve Main sahneleri arasında iki yönlü geçiş; sadece Menu sahnesinden çıkış var.
Uygulamayı ayarlayarak başlayalım, bu sayede kullanıcı:
Şimdi bu proje için oluşturulmuş olan UI Canvas’ı gözden geçirelim:
Alt metin: Scene görünümünde sol-üst kısımda 2D modu vurgulanmıştır
StartContainer, Canvas’ın StartContainer bölümünde gruplandırılmış dört buton GameObject’i içerir:
Menu hala fonksiyonel değil ama renk seçim düğmelerini çalışırken gözden geçirebilirsiniz — şimdi bunu deneyelim.
Alt metin: Menüde dört yatay düğme sırası var: renk butonları; Save Color ve Load Color; Start; ve Exit.
Renk seçim düğmeleri, Canvas GameObject üzerindeki MenuUIHandler.cs script dosyası tarafından kontrol edilir. Bu proje için yazılmış özel bir script. Şu anda tek yaptığınız renk düğmelerini başlatmak. Hadi iki metod ekleyelim: biri Main sahneyi başlatmak için diğeri de uygulamadan çıkmak için.
Main sahneyi menüden yükleyen metodu yazarak başlayalım:
using System;
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
// Scripti diğer varsayılan scriptlerden daha sonra çalıştırılacak şekilde ayarlar
// UI için faydalı, çünkü UI ayarlanmadan önce bazı şeylerin başlatılması gerekebilir
[DefaultExecutionOrder(1000)]
public class MenuUIHandler : MonoBehaviour
{
public ColorPicker ColorPicker;
public void NewColorSelected(Color color)
{
//buraya renk seçildikten sonra yapılmasını istediğiniz kodu ekleyin
}
private void Start()
{
ColorPicker.Init();
//Bu,renk seçicide renk butonu tıklandığında NewColorSelected fonksiyonunu çağıracak
ColorPicker.onColorChanged += NewColorSelected;
}
}
public void StartNew()
{
SceneManager.LoadScene(1);
}
SceneManager, sahneleri yükleme, kaldırma ile ilgili her şeye yetkisi olan sınıftır..b
Console’u bir inceleyin. Hata mesajını fark edeceksinizdir: “The name 'SceneManager' does not exist in the current context” Bunun nedeni, SceneManager’ın bu script dosyasının bulunduğu ad alanından (namespace) farklı bir ad alanında(namespace) gruplanmış olmasıdır.
Bu hatayı görmüyor iseniz, “SceneManager” yazdığınızda IDE’niz otomatik olarak eklemiş olabilir. Ad alanlarının(namespace) eklendiğini çifte kontrol etmek için sıradaki adımları takip edin.
using System;
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
Bu scriptte zaten bir sürü ad alanı(namespace) var. using UnityEngine; satırı, örneğin, UnityEngine ad alanındaki(Vector3 ve Transform gibi şimdiye kadar kullandığınız tüm sınıflar) her şeyin bu scriptte kullanılabileceğini belirtiyor.
using UnityEngine.SceneManagement;
Artık SceneManagement ad alanı(namespace) bu scripte eklendi ve sahende kullanılabilir.
Ardından, Menü sahne indeksini ayarlayarak Start butonunu kurmaya hazırlanalım:
LoadScene’in parametresi bir sayı ama ne anlama geliyor? O, yüklemek istediğiniz sahnenin indexi. Bir sahnenin indeksini, Build Settings penceresi altında tanımlayabilirsiniz.
Alt metin: Scenes In Build bölümü; Menu 0 indeksi ile ilk sırada yer alıyor, Main indeks 1 ile ikinci sırada yer alıyor.
Start butonunu kurmak için hazırsınız:
Alt metin: On Click olayında GameObject özelliği Canvas olarak atanmış.
Canvas GameObject, MenuUIHandler elemanına eklidir.
Alt metin: On Click olayında Function, MenuUIHandler.StartNew olarak ayarlı.
Şimdi Menu sahnesinde Exit butonunu tasarlayalım:
public void Exit()
{
Application.Quit();
}
Komut, uygulamayı kapatacak metodu çağırır: Application.Quit().
Buradaki sorun ne?
Application.Quit, Editor’de test ederken değil, yalnızca build edilmiş uygulamada çalıştığı için buton şu anda çalışmıyor. Orada benzer şekilde çalışmasını sağlamak için PlayMode’u durduran özel bir metod kullanmanız gerekli. Ancak, uygulamanın çalıştığı yere bağlı olarak farklı satırları çalıştırmak için kodu nasıl değiştirebiliriz?
Koşullu derleme’nin devreye girdiği yer burası. Kodun derlendiği yere göre kodu dallandırmak için koşullu derlemeyi kullanabilirsiniz — Editor’de veya Build’de.
Koşullu derleme kullanarak kodunuzun tekrar düzeltin:
public void Exit()
{
#if UNITY_EDITOR
EditorApplication.ExitPlaymode();
#else
Application.Quit(); // original code to quit Unity player
#endif
}
Yeni koşullu kodu gözden geçirin Ama bu kod ne anlama geliyor? # ile başlayan tüm satırlar gerçekten “kod” değiller. Onlar derlenmeyecek ve çalışmayacaklar— Onlar aslında derleyici için komutlar. Yine de daha önce karşılaştığınız koda benzer!
Hadi onu daha tanıdık bir şeye çevirelim:
if (UNITY_EDITOR)
{
// bu kodu çalıştır
}
else
{
// bu kodu çalıştır
}
If koşulu ifadesi derleyiciye için bir talimat olduğundan, doğru olmayan kısım tamamen kaldırılacaktır.
Sizin durumunuzda:
Eğer Unity Eitor’e dönerseniz Consol’da tanıdık bir hata ile karşılaşabilirsiniz: “The name 'EditorApplication' does not exist in the current context.”
SceneManager gibi, EditorApplication başka bir ad alanında(namespace) — Bu sefer, bu ad alanı(namespace) sadece Unity Editor’de bulunan UnityEditor’dür, bu nedenle düzeltme biraz farklı:
#if UNITY_EDITOR
using UnityEditor;
#endif
Derleyiciye ad alanı çevresinde koşullu talimatlar eklediniz: #if UNITY_EDITOR, böylece ad alanı(namespace) yalnızca Unity Editor’ü içinde derlerken dahil edilecek.
Derleyici için bir if ifadesi eklemediyseniz, bağımsız bir oynatıcı oluşturmaya çalıştığınızda UnityEditor'u bulamıyor hatası alırsınız. Bunun nedeni, player build’e dahil olmamasıdır. (Bunu test etmek istiyorsanız, koşullu talimatları kaldırın ve deneyin!)
Bir oynatıcı için build oluşturduğunuzda, kod satırını atar ve ad alanını(namespace) içeriye aktarmaya çalışmaz. Öte yandan, Editor'de test ederken Exit'i seçerseniz Play modundan çıkacaktır.
Şimdi kullanıcılar Main sahneye gidebilir ve başlat menüsünde uygulamadan çıkabilir ama şu anda Main sahneden menüye geri dönemezler.
Main sahnede Menüye dön butonu oluşturduk ancak onu kendiniz çalıştırmanız gerekecek.
Unutmayın:
Artık görev özetini karşılamak için sahnelerinizi kullanıcı arayüzüne bağladınız! Ancak bazı şeyler eksik — renk seçim butonları hala çalışmıyor
Sonraki eğitimde, bu fonksiyonelliği veri kalıcılığını uygulayarak ekleyeceksiniz.
Kendinizin yapın! Hazır menümüz damak tadınıza göre biraz sıkıcıysa, umutsuzluğa kapılmayın. — varsayılan menünün görünümünü değiştirebilirsiniz veya baştan kendinizinkini oluşturabilirsiniz! Bu, Create with Code Unit 5 - User Interface çalışmanızı konsolide etmek için harika bir fırsat.
Önemli: Kendi menünüzü oluşturursanız, menünüzün kullandığımız düğmelerin aynısını içerdiğinden emin olun; aksi takdirde kullanıcı uygulamadaki gerekli etkileşimleri tamamlayamaz.
Yazılım Kariyerinde İlerlemeni Hızlandıracak Programlar
Patika+ programlarımız ile 4-8 aylık yoğun yazılım kamplarına katıl, temel bilgilerden başlayarak kapsamlı bilgiler edin, yazılım kariyerine başla!
Yorum yapabilmek için derse kayıt olmalısın!