Bölümü Yeniden Başlatma
Coddy'nin Unity Journey'sinin Gerçek Oyunlar Geliştirmek bölümünün bir parçası. Ders 18 / 56.
Bir seviyeyi sıfırlamanın en hızlı yolu onu yeniden yüklemektir. SceneManager.GetActiveScene() şu anda açık olan sahneyi döndürür ve onun name (veya buildIndex) değeri, LoadScene’in aldığı değerdir. Oyun bitti panelindeki bu Yeniden Başlat düğmesi şunu çağırır:
public void Restart()
{
SceneManager.LoadScene(SceneManager.GetActiveScene().name);
}Unity açık sahneyi yok eder ve sahne dosyasından yeniden oluşturur. Devrilen bir sandık da dahil olmak üzere her nesne sahnenin onu yerleştirdiği konuma geri döner, her alan Inspector değerini yeniden alır ve Awake ile Start tekrar çalışır. Hiçbir kodun nesneleri tek tek eski hâline getirmesi gerekmez. Düğme, "Level3" gibi bir ad yerine etkin sahneyi istediği için aynı betik yerleştirildiği her seviyeyi yeniden başlatır.
static bir alan sahnenin parçası değildir: sınıfa aittir, bu nedenle yeniden yükleme onu olduğu gibi bırakır. private static float bestTime; en iyi süreyi yeniden başlatmalar boyunca korurken, normal bir private float time; yeni sahneyle birlikte yeniden 0’dan başlar. GameManager.Instance da static’tir: yeniden yüklemeden sonra yeni GameManager’ın Awake’i onu ayarlayana kadar yok edilmiş GameManager’ı gösterir.
Görev
Kolayİki seviye, Level1 ve Level2; her birinde LevelRestart betiğini barındıran bir Level nesnesi bulunuyor. Ok tuşları Player'ı hareket ettirir ve Level1'deki altın blok Level2'yi yükler (ikisi de hazır). LevelRestart.cs dosyasını tamamla:
- Oyuncu
fallYdeğerinin (-3) altına düştüğündefallsdeğerini 1 artır ve oyuncunun bulunduğu seviyeyi yeniden başlat: Level2'de düşerse Level2 yeniden başlar. fallsoyun boyunca gerçekleşen her düşüşü sayar, bu nedenle yeniden yüklemeden sonra da korunmalıdır. Start zaten bunuFalls: 1olarak gösterir.
Play'e bas, her iki seviyede de bir kenardan düş ve ardından Check'e bas.
Kendin dene
using UnityEngine;
using TMPro;
public class LevelRestart : MonoBehaviour
{
public Transform player;
public TMP_Text fallsText;
public float fallY = -3f;
private int falls;
void Start()
{
fallsText.text = "Falls: " + falls;
}
void Update()
{
// fallY değerinin altına düştüğünde: düşüşü say ve oyuncunun bulunduğu bölümü yeniden başlat
}
}
Bu ders kısa bir quiz içerir. Soruları yanıtlamak ve ilerlemeni kaydetmek için derse başla.
Gerçek Oyunlar Geliştirmek bölümündeki tüm dersler
1Ekrandaki Metinler
Canvas ve MetinSkoru GösterSayıları BiçimlendirGeri Sayım ZamanlayıcısıTekrar: Hız Göstergesi4Sahneler ve Bölümler
Bir Sahne YüklemeBölümü Yeniden BaşlatmaSonraki BölümSahneler Arasında SaklamaTekrar: Bölüm Seçimi10Proje: 3D Platform Oyunu
ParkurHareketli Platformlar2Düğmeler ve Ekranlar
Düğmeler ve onClickLambda İfadeleriInspector'da Bağlantı KurmaPanelleri Açma ve KapamaCan ÇubuklarıTekrar: Yükseltme Mağazası5PlayerPrefs ile Kaydetme
Bir Sayı KaydetmeVarsayılan Değerle YüklemeEn Yüksek SkorAyarları KaydetmeTekrar: Bankadaki Paralar