void Start()
    {
        if (ileriYolObjeleri.Length != ileriYolObjeleriUzunluklar.Length)
        {
            // Eğer her bir zemin prefab'ının uzunluğu tek tek girilmemişse hata mesajı verip
            // component'i objeden at (yani oyunu oynanmaz hale getir)
            Debug.LogError("HATA: SonsuzYolScript'teki Duz Yol Objeleri ile " +
                           "Duz Yol Objeleri Uzunluklar'ın boyutu (size) " +
                           "aynı olmak zorundadır.");

            Destroy(this);
        }
        else
        {
            // Havuzu (pool) doldur
            havuz = GetComponent <ObjeHavuzu>();

            int havuzdakiObjeSayisi = yolMaksimumUzunluk / 3;
            havuz.HavuzuDoldur(ileriYolObjeleri, solaDonus, sagaDonus,
                               ikiYoneDonus, puanPrefab, havuzdakiObjeSayisi,
                               ardArdaDiziliPuanObjesiSayisi);
            // Havuzu doldurduk!

            // Rastgele bir yol oluştur
            ileriYol = new YolContainer();
            sagYol   = new YolContainer();
            solYol   = new YolContainer();

            YolOlustur(ileriYol, Vector3.forward * -314.6f, Vector3.forward);
            DonemecOlustur(ileriYol.BitisNoktasi(), ileriYol.Yon());
        }
    }
    // Mevcut yolun ucuna yeni bir kavşak koyup bu kavşağın ucundan
    // yeni düz yollar çıkarmaya yarayan fonksiyon
    IEnumerator YoluGuncelle()
    {
        // 10 saniye bekle çünkü player kavşaktan tam döndüğü anda
        // eski yolu yok edersek player büyük olasılıkla aşağı düşer
        yield return(new WaitForSeconds(10f));

        // arkada kalan yolları yok et (içeriklerini havuza yolla)
        solYol.YoluYokEt(havuz);
        sagYol.YoluYokEt(havuz);

        // az önce döndüğümüz kavşağı deaktif et (görünmez kıl)
        havuz.SolDonemec().gameObject.SetActive(false);
        havuz.SagDonemec().gameObject.SetActive(false);
        havuz.SolVeSagDonemec().gameObject.SetActive(false);

        // yolun ucuna yeni bir kavşak ve o kavşaktan çıkan yeni
        // yollar oluştur
        DonemecOlustur(ileriYol.BitisNoktasi(), ileriYol.Yon());
    }
    void Update()
    {
        if (sol)
        {
            // Eğer ileriYol'un ucundaki kavşaktan sola dönme talimatı verilmişse:
            sol = false;

            // eğer elimizde bir solYol varsa (yani bu kavşaktan sola dönüş mümkünse):
            if (solYol.Uzunluk() > 0)
            {
                // karakteri (player) 90 derece sola döndür
                Player player = GameObject.FindWithTag("Player").GetComponent <Player>();
                player.transform.Rotate(Vector3.down * 90f);

                // player'ın yön değişkenlerini ayarla
                Vector3 bn = solYol.BitisNoktasi();
                Vector3 iy = solYol.Yon();
                player.ileriYon = iy;
                player.sagYon   = solYol.SagYon();

                // player'ın yatay eksende gidebileceği minimum ve maksimum limitleri ayarla
                if (iy == Vector3.forward || iy == Vector3.back)
                {
                    player.limitMinDeger = bn.x - 17f;
                    player.limitMaxDeger = bn.x + 17f;
                }
                else
                {
                    player.limitMinDeger = bn.z - 17f;
                    player.limitMaxDeger = bn.z + 17f;
                }

                // sol yolu artık ileri yol (üzerinde koşulan yol) olarak ata
                YolContainer temp = ileriYol;
                ileriYol = solYol;
                solYol   = temp;

                // yolun devamını oluştur
                StartCoroutine(YoluGuncelle());
            }
        }
        else if (sag)
        {
            // Eğer ileriYol'un ucundaki kavşaktan sağa dönme talimatı verilmişse:
            sag = false;

            // eğer elimizde bir sagYol varsa (yani bu kavşaktan sağa dönüş mümkünse):
            if (sagYol.Uzunluk() > 0)
            {
                // karakteri (player) 90 derece sağa döndür
                Player player = GameObject.FindWithTag("Player").GetComponent <Player>();
                player.transform.Rotate(Vector3.up * 90f);

                // player'ın yön değişkenlerini ayarla
                Vector3 bn = sagYol.BitisNoktasi();
                Vector3 iy = sagYol.Yon();
                player.ileriYon = iy;
                player.sagYon   = sagYol.SagYon();

                // player'ın yatay eksende gidebileceği minimum ve maksimum limitleri ayarla
                if (iy == Vector3.forward || iy == Vector3.back)
                {
                    player.limitMinDeger = bn.x - 17f;
                    player.limitMaxDeger = bn.x + 17f;
                }
                else
                {
                    player.limitMinDeger = bn.z - 17f;
                    player.limitMaxDeger = bn.z + 17f;
                }

                // sağ yolu artık ileri yol (üzerinde koşulan yol) olarak ata
                YolContainer temp = ileriYol;
                ileriYol = sagYol;
                sagYol   = temp;

                // yolun devamını oluştur
                StartCoroutine(YoluGuncelle());
            }
        }
    }