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()); } } }