Unity' de sahneler arası geçişte kullanabileceğimiz ve oyuncumuzun programın ne yaptığını bilip, donmadığını teyit etmesi veya beklerken sıkılmaması için örneğin bir seviyeden başka bir seviyeye geçerken gösterdiğimiz bir ekrandır.
Neler Kullanılacak
- Temel olarak diğer sahneye geçmek için bir koşul veya buton lazım, ben nasıl yapılacağını göstereceğim için bir buton kullanıyorum.
- Yükleme ekranımızı üstüne tasarlamak için bir adet panel nam-ı diğer 'TheLoadingPanel',
- Yükleme çubuğu olacak bir slider nam-ı diğer 'LoadingBar',
- İsteğe bağlı olarak panelin üst kısmında gözükecek bir adet text nam-ı diğer 'LoadingText',
- Yine isteğe bağlı olarak yükleme çubuğunun yüzde kaç dolduğunu yazdıracağımız bir adet text nam-ı diğer 'LoadingProgress',
- Kodları devralacak bir gameobject ben ismini '_GameManager' koydum,
- Ve tabi ki ikinci bir sahne.
Yapılışı
- Hierarchy penceresinde _GameManager'i oluşturun.
- Daha sonra button ve paneli oluşturun.
- Daha sonra panelin içerisine slider ve text bileşenlerini yaratın.
- Paneli inspector penceresinden deaktif hale getirin.
- LoadingBar içindeki "Handle Slide Area" bileşenini silin çünkü bu slider kendi başına dolacak.
- LoadingText yazısının içeriğini 'Yükleniyor...' olarak belirleyin. Ve LoadingBar'ın yukarısında veya aşağında yerleştirin.
- LoadingProgress'i ise LoadingBar içerisine ortalayabilirsiniz ya da sağa ya da sola dayalı olarak kullanabilirsiniz. Bunun içindeyse '0%' gibi yüklemenin ilerleyeşi gösterilecek.
- TheLoadingPanel' i aşağıdaki gibi tasarlayabilirsiniz.
Kodlama Kısmı
Kodları devralması için '_GameManager' adlı boş bir GameObject yaratmıştık.
- '_GameManager' üstüne tıklayın ve Inspector penceresindeki Add Component butonuna tıklayın.
- Açılan küçük pencerenin altındaki New Script butonuna tıklayıp, kod parçasına bir isim verin ve onu yaratın. Ben 'GameManager' adını layık gördüm.
- Oluşturduktan sonra kodu açın ve aşağıdaki kodları içine yapıştırın:
using System.Collections;
using UnityEngine;
using UnityEngine.UI;
using UnityEngine.SceneManagement;
public class GameManager : MonoBehaviour
{
public GameObject theLoadingPanel; //Panelimiz
public Slider loadingBar; //Yükleme çubuğumuz
public Text loadingProgress; //Yükleme çubuğumuzun ilerleyişi
AsyncOperation operation; //Sahneyi asenkron olarak yükleyecek zımbırtı
public void SahneYukle(int sahneIndex)
{
operation = SceneManager.LoadSceneAsync(sahneIndex);
StartCoroutine(YuklemeEkrani(1));
}
IEnumerator YuklemeEkrani(int index)
{
theLoadingPanel.SetActive(true);
while (!operation.isDone)
{
int progress = Mathf.CeilToInt(operation.progress * 100f);
loadingBar.value = progress / 100f;
loadingProgress.text = progress+ "%";
yield return null;
}
}
}