‫Sonsuz bir koşucu için en önemli şeylerden biri varsa o da sonsuz olmasıdır.
‫Sonsuz bir dünya yaratmak için prosedürel bir yaratıma ihtiyacımız var.
‫Bunu prosedürel olarak oluşturmamız gerekiyor, yani bunu kod aracılığıyla, kod aracılığıyla yapmamız gerekiyor.
‫Dolayısıyla, yol unsurlarımızın veya yol parçalarımızın 1 milyar farklı parçasından oluşan devasa bir dünya yaratmak
‫istemiyoruz.
‫Bunu programatik olarak yapmak istiyoruz ve bunu prosedürel bir yolla yapabiliriz.
‫Şimdi yapmak istediğim şey, her şeyden önce kristalimi kurmak istiyorum ve kristali değiştirmek istiyorum, dünyanın herhangi
‫bir yerinde ya da onu konumlandırdığım herhangi bir yerde olmak değil.
‫Yolda olmanızı istiyorum.
‫Kristalimizi buraya yerleştirelim.
‫Yol güzergahımıza yerleştirelim.
‫Bu arada, diğer tüm kristallerden kurtulalım.
‫Sil.
‫Ayrıca, yol parçalarımızı da silmekten kurtulalım.
‫Ve şimdi bu kristali oyunumuza sürükleyelim.
‫Diyelim ki kabaca burası iyi bir pozisyon.
‫Bakalım sadece üstte mi.
‫Sadece üstte.
‫Evet, sorun değil.
‫Yani bu iyi bir şey.
‫Kristali yol kısmına yerleştirmek istiyorum ve şimdi kristali devre dışı bırakacağım.
‫Gördüğünüz gibi artık mevcut değil.
‫Etkinleştirmemiz gerekecek.
‫Ve şimdi o yol kısmı yeni bir prefabrik olacak.
‫Bu yol parçasını prefabs klasörümüze sürükleyelim ve daha sonra bu yol parçalarından birden fazlasını prosedürel olarak oluşturmak
‫istiyoruz.
‫Tamam.
‫Bunu yapmadan önce, oyunumuzun her zaman aynı kalacak temel bir parçası var.
‫Yani yolumuz belli bir şekilde bu olacak.
‫Bu arada kristallerden de kurtulalım.
‫Şimdi kristali çoğaltabilir ve uygun şekilde hareket ettirebiliriz.
‫Yani ilk birkaç adım hep aynıdır ve sonra yana doğru hareket ederiz.
‫Yani bu parça her zaman aynı olacak.
‫Şimdi oyun görünümüne bir göz atalım.
‫Evet, hep aynı.
‫Hep böyle hareket ediyorlar.
‫Ve bir sonraki.
‫Tamam.
‫İşte haritamızın başlangıcı.
‫Ve şimdi devam edip bunu prosedürel hale getirmek istiyoruz, böylece parçalar otomatik olarak ve sonsuza
‫kadar oluşturulacak.
‫Bunu yapmak için, yolumuz için yeni bir komut dosyası oluşturalım.
‫Şimdi yolumuza gidelim, bileşen ve yeni kod ekleyelim ve buna yol adını verelim.
‫Şimdi bunu açalım ve burada onarım prefabımıza ihtiyacımız olacak, bu yüzden genel oyun nesnesi yol prefabını unity'de çok hızlı bir şekilde
‫atayalım, böylece yol betiğimiz bir yol prefabına ihtiyaç duyacak, bu arada betiği betik klasörümüze
‫sürükleyelim.
‫Şimdi bizimkine gidelim.
‫Yazıldı ve şimdi yol komut dosyasına veya yol parçası oyun nesnesine ihtiyaç duyuyor.
‫Pekala, işte buradayız.
‫Yoksa prefabrik mi?
‫Oldukça fazla.
‫Tamam.
‫Daha sonra, dünyamızın hangi noktadan itibaren yaratılmasını istediğimizi bilmemiz gerekecek.
‫Yani burada bir hata var.
‫11 numaralı rol kısmı gerekli değildir, bu yüzden onu silelim.
‫Evet.
‫Bu yüzden onuncu yoldan itibaren devam etmek ve yeni yol parçaları yaratmak istiyorum.
‫Yani bu noktadan sonra.
‫Bu yüzden yeni yol parçaları oluşturmak istediğim zamanki konuma ihtiyacım var.
‫Konum, yol parçamızın konumu veya dönüşüm konumudur.
‫Ve eğer ona bakarsak, 007 pozisyonunda olduğunu görürüz. 09 Şimdi bu pozisyonu
‫kontrol edelim.
‫Bunu yol senaryomuza geri koyacağım.
‫O pozisyonda olmak istiyorum.
‫Bu yüzden yeni bir genel vektör oluşturacağım üç son yazı, bu yüzden onu çağıracağım ve buraya
‫ekleyeceğim.
‫Demek 007'ydi. 9 ya da oh 9.
‫Bu bizim son yol parçamızın konumuydu.
‫Şimdi bilmemiz gereken şey, bir nesneyi ne kadar hareket ettirmemiz gerektiğidir.
‫Bu yol parçasını dışarıda konumlandıralım ve şimdi bunu hareket ettirelim veya bu yol gücünü çoğaltalım ve
‫kontrol ve kaydırma ile hareket ettirelim.
‫Ve sonra 0 ile hareket ettiğini görebiliriz. 707.
‫Yani bu, bloğumuzun genişliği ya da konumunun değişimidir ve genişliği de böyle
‫olmalıdır.
‫Tamam.
‫Şimdi yol senaryomuza geri dönelim ve burada bu ofseti bilmemiz gerekecek.
‫O halde yeni bir genel float offset oluşturalım ve bu 0 olsun. 707 bir şamandıra olarak.
‫Ve şimdi bir yöntem oluşturalım.
‫Başlatma yönteminden kurtulacağım.
‫Yeni bir yöntem oluşturacağım, public void, create new road part.
‫Ve şimdilik sadece hata ayıklama günlüğünü ayıklayacağım, yeni yol parçası oluşturacağım.
‫Ve güncelleme yöntemi içinde, kullanıcının bir düğmeye basıp basmadığını kontrol edeceğim.
‫Yani giriş noktası tuşu indir ve hangi tuş kodunu istiyorum.
‫Anahtar kodu nokta boşluğu.
‫Yani oyuncu boşluğa her bastığında, yeni bir yol parçası oluşturmak istiyorum.
‫Şimdi bununla devam edelim.
‫Öyleyse bu yöntemi daha da geliştirelim.
‫Bu yüzden yeni yol parçası oluşturun.
‫Burada neye ihtiyacımız var?
‫Üç vektör olan pozisyonu ortaya çıkarmamız gerekiyor.
‫Öyleyse buna spawn post vektör 3 diyelim. 0, yani 000 konumudur.
‫Yani bu, başladığımız yerdeki spawn pozisyonudur, daha sonra sıfır ile 100 arasında rastgele bir aralık değişkeni
‫olan bir şansa sahip olmak isteriz.
‫Ve eğer şans 50'den düşükse, o zaman sola doğru doğmak istiyorum ve aksi takdirde sağa doğru doğmak istiyorum.
‫Yani şans 50'den düşükse, pozitif bir ofset istiyorum ve aksi takdirde negatif bir ofset istiyorum.
‫Böylece ortaya çıkan konum, son nokta x konumu artı ofset ve son Y konumu olan yeni vektör
‫üç olacaktır.
‫Y'deki son görev.
‫Ve son olarak son gönderi, ama z artı ofset.
‫Yani bu bizim hareket edeceğimiz ya da üç vektörü olan bir doğma konumu yaratacağı ya da üç
‫vektörü olan doğma konumunu atayacağı anlamına gelir ve bunu daha sonra oyun nesnemizi, yani yol parçamızı
‫ya da yol parçamızı doğurmak için kullanacağız.
‫Aksi takdirde, yeni vektör üç son gönderi x eksi ofsete eşit olan spawn konumu olmasını istiyorum.
‫Son Gönderi Y ve son gönderi z artı.
‫Şimdi devam edelim ve oyun nesnesini oluşturalım.
‫Buna G adını vereceğim, örnekleyeceğim, böylece unity world road prefabrikemiz içinde oluşturacağız ve spawn pozisyonundayken
‫hangi pozisyonda ve hangi kritere sahip olmak istiyoruz.
‫Kriter nokta ular kullanırız, yani 0 ile döndürürüz. 45 ve sıfır çünkü oyun nesnelerimiz de döndürülüyor ve yollarımızın döndürülmesini
‫istiyoruz ve burada da döndürülmelerini istiyoruz.
‫Ve şimdi son pozisyona ihtiyacımız var veya pozisyonu dönüştürmek için g olan son pozisyonu ayarlamamız gerekiyor.
‫Çünkü yeni pozisyon bu, değil mi?
‫Yeni oyun nesnemizin son konumunun ne olduğunu bilmemiz gerekir.
‫Bu yüzden manuel olarak ayarladığımız son pozisyonla başladık ve şimdi her zaman oluşturulan pozisyonla
‫ayarlıyoruz.
‫Dolayısıyla, yeni yol parçasının belirli bir konumu vardır ve bunu son gönderi değişkenimize kaydederiz.
‫Tamam, o zaman bunu deneyelim.
‫Unity'ye geri döndüm ve bölünmüş ekranı oluşturdum.
‫Burada mantıklı çünkü görmek istediğimiz şey sahnede neler olduğudur.
‫Bu yüzden, harika olmasına rağmen bu sesten hemen kurtulmama izin verin.
‫Şimdi oyun görünümüne geçelim ve şimdi boşluk tuşuna basalım.
‫Ve burada sahne görünümünde görebileceğiniz gibi, dünyamız artık sekmelerimize göre oluşturuluyor, ancak elbette bunun olmasını
‫istiyoruz, her zaman tıklamamıza göre değil.
‫Sahip olduğumuz pozisyona göre bunun gerçekleşmesini istiyoruz.
‫Şimdi senaryo yazımına geri dönelim.
‫Öyleyse bunu otomatik olarak oluşturalım.
‫Burada private void wake metodunu kullanalım ve sadece repeating'i çağıralım ya da metodu çağıralım, repeating'i iptal
‫edelim.
‫Peki neyi tekrar çağırmak istiyoruz?
‫Yeni yol parçası oluşturma yöntemi ve bunu 1/2'den sonra yapmak istiyoruz ve bunu her saniye yapmak istiyoruz.
‫O zaman bunu deneyelim.
‫Oyunu kaydedelim ve şimdi ne olacağını görelim.
‫O zaman bunu deneyelim.
‫Ve her saniye yeni bir yol parçasının yaratıldığını görebiliyoruz.
‫Tamam.
‫Ama bizim istediğimiz tam olarak bu değil.
‫Uyanık olduğumuz her an yaratılmasını istemiyoruz, çünkü şimdi ne olabilir ki, oyuna başlamıyoruz
‫ve sadece çalışıyor ve biz hala her saniye büyük bir dünya yaratıyoruz.
‫Ancak yapmak istediğimiz şey, yalnızca oyun başlatıldığında bunları oluşturmaktır.
‫Peki bunu nasıl yapacağız?
‫Burada awake yöntemini kullanmıyoruz, ancak start start building
‫adını verdiğimiz farklı bir yöntem kullanacağız.
‫Ve özel değil herkese açık olacak çünkü oyun yöneticimizden erişmek istiyoruz.
‫Ve tabii ki, tuşa basmamıza bağlı olarak yeni yol parçaları oluşturduğumuz tuş aşağı ile
‫artık güncelleme yöntemine ihtiyacımız olmayacak.
‫Şimdi oyun yöneticisine girelim ve oyunu başlat yöntemine gidelim, çünkü burada oyunu başlatıyoruz
‫ve bu nesneleri oluşturmak için mükemmel bir nokta.
‫Öyleyse türünde bir nesne bulalım ve yol nesnesini bulalım.
‫Ve orada Start Building adında bir metodumuz vardı ve çağırmak istediğimiz de buydu.
‫Pekala, devam edelim ve bunu test edelim.
‫Şimdi oyunumuza gidelim ve bir null reference istisnası alayım.
‫Bu da artık bir oyun yöneticisine sahip olmamamla ilgili.
‫Şimdi bunu nasıl değiştirebileceğimize bir göz atalım.
‫Yeni bir oyun yöneticisi oluşturalım.
‫Eğer sizin için de durum böyleyse, burada bir oyun yöneticisi oluşturacağım ve sürükleyeceğim
‫ya da önce bunu sıfırlayacağım ve oyun yöneticimi buraya sürükleyeceğim çünkü herhangi bir nedenle kayboldu.
‫Şimdi sahneyi kaydedeceğim.
‫Bunu test etmeden önce, elbette, skor metnini ve yüksek skor metnini atamamız gerekir.
‫Hadi yapalım şunu.
‫Şimdi tekrar deneyelim.
‫Şimdi, hata almamalıyız.
‫Pekala, şimdi rayına oturdu.
‫Bir şekilde silmiş olmalıyım.
‫Şimdi deneyelim.
‫Oh, hadi deneyelim.
‫Oyuna başlayalım.
‫Gördüğünüz gibi, oyun arka tarafta prosedürel olarak yaratılmış ve biraz fazla yavaş.
‫Yani oyunumuzun bu parçaları yarattığından daha hızlıyız.
‫Öyleyse yeni yol parçalarını biraz daha hızlı oluşturalım.
‫Bu arada, örneğin, bunları her 0'da bir oluşturabiliriz. 5 saniye, o yüzden 0 yapalım. 5 F Şimdi bu sorunu çözecektir.
‫Aralığın iyi olduğunu düşünüyorum.
‫Bir göz atalım.
‫Oyuna başlayalım ve bakalım yeterince yaratacak mı?
‫Ancak hoşuma gitmeyen şey, bu parçaları nasıl ürettiğini hala görebiliyor olmam.
‫Şimdi düştüm, yani bunu nasıl çözebileceğim oldukça basit.
‫Basitçe yapabilirim.
‫Şuradaki ve şuradaki yollardan kurtulalım.
‫Buna ihtiyacım var.
‫Yolumuza geri dönelim.
‫O parçayı buraya kopyalayıp daha ileriye taşıyabilirim.
‫Aslında, buraya taşıyalım.
‫Tekrar çoğaltın.
‫Böylece dünyayı biraz daha büyütebilirdim.
‫Şimdi bunu kaydedelim.
‫Ve artık nerede yaratıldığını görmemeliyim.
‫O zaman bir oyun başlatalım.
‫Ve şimdi, tabii ki, burada artık doğru bitiş noktasına sahip olmamak gibi bir sorunumuz var çünkü neredeydi?
‫Yolumuzun son pozisyona sahip olması gerekiyor.
‫Yani son pozisyonun ofseti ve şimdi buradaki pozisyon olmalı.
‫Şimdi yolumuzun 14. bölümü sonuncusu.
‫Şimdi buradaki değerleri değiştirelim ve yolumuzdan Z değerini de alıp buraya girelim.
‫Tamam, şimdi tekrar deneyelim.
‫Parçaların nerede oluşturulduğunu görelim.
‫Ve gördüğünüz gibi, doğru pozisyonda yaratılmışlar.
‫Mükemmel.
‫Ve şimdi dünyamın nerede yaratıldığını göremiyorum.
‫Ve bence 0. 5 saniye yeterli olmalı çünkü şu anda yürüyebildiğimden daha hızlı yaratıyor.
‫Tamam.
‫Bu çok iyi.
‫Şimdi kristalleri tekrar ekleyelim, çünkü kristallerimiz yok.
‫Şimdi ne olacak?
‫Kristallerimize sahip olmak istiyoruz.
‫Şimdi yol senaryomuza geçelim.
‫Ve burada yeni oluştur kısmında, her beşinci adımda veya her beşinci yolda bir kristal olmasını istiyoruz.
‫O halde sıfır olan özel bir int yol sayısı oluşturalım ve oluşturduğumuz her yol için yol sayısını
‫artıralım.
‫Yani yol sayısı artı artı.
‫Ve sonra yol sayısının beşe bölünüp bölünmediğini kontrol ederiz, yani modulo beş sıfıra eşittir, o zaman kristalimizi etkinleştirmek
‫isteriz.
‫Bu yüzden g transform dot çocuğu sıfır konumuna getirin, böylece kendimizi ekleyin, oyun nesnesini alın ve aktif olarak
‫ayarlayın.
‫Doğru.
‫Böylece her beş yoldan birinde artık aktif bir kristal olacak.
‫Tamam.
‫Ve şimdi senaryoyu kaydedelim.
‫Unity'ye geri dönelim ve çalışıp çalışmadığına bakalım.
‫Bu yüzden başlangıç parçalarında kristal olmayacaktır.
‫Dolayısıyla, manuel olarak oluşturduklarımızda herhangi bir kristal olmayacaktır.
‫Yani oyuncu herhangi bir kristal almadan önce buradaki belirli bir bölümü geçmek zorunda.
‫Yine de burada küçük bir sorunumuz var.
‫Gördüğünüz gibi, animasyon artık düzgün çalışmıyor ve belki bunun nedenini tahmin edebilirsiniz.
‫Bu, oyuncumuzun bir noktada havada olması veya sadece bir anlığına havaya dokunmuş olmasıyla
‫ilgilidir.
‫Ve işte o zaman artık doğru hareket etmemeye ya da doğru şekilde canlanmamaya başladı.
‫Hadi bunu düzeltelim.
‫Bunu iki şekilde düzeltebiliriz.
‫Bir noktada arada bir miktar boşluk olabilir, böylece bloklar birbiriyle tam olarak aynı hizada olmayabilir.
‫Bu, başka bir neden olabilir veya bunu çözmenin başka bir yolu, karakter
‫animasyonumuza gidip yeni bir geçiş eklemek, düşmeden koşmaya geçiş yapmak olabilir
‫ve bu, oluşturmadığımız bir koşula dayalı olacaktır.
‫O halde yeni bir parametre oluşturalım ve bu tetikleyiciye artık düşmüyor diyelim.
‫Yine de bu mükemmel bir çözüm olmayacaktır.
‫Bu nedenle daha iyi bir çözüm, burada parçalarım arasında boşluk olup olmadığını kontrol etmek olacaktır.
‫Ancak bu, bunu yapmak için bir seçenek olabilir.
‫Artık düşmüyorum.
‫Hadi yapalım şunu.
‫Buradaki kodumuza geri dönelim ve grafik denetleyicimizde güncelleme yönteminde buraya gidebiliriz, kırmızı döküm artık
‫bu konumda değilse, devam edebilir ve tetikleyiciyi artık
‫düşmüyor olarak ayarlayabiliriz diyebiliriz.
‫Sanırım ben böyle diyorum.
‫Hadi bir bakalım.
‫Bunu artık düşmemek olarak değiştirelim.
‫Doğru terim buydu.
‫O halde birliğe geri dönelim ve bunu artık düşmemek olarak değiştirelim.
‫Şimdi bu sorunun çözülüp çözülmediğini görelim.
‫O zaman oyunu burada oynayalım.
‫Olay yerimize gidebilir ve belki bu gibi konularda daha iyi bir bakış açısı bulabiliriz.
‫Şimdi devam edelim ve oyunu başlatalım.
‫Şimdi biraz toplayalım.
‫Ve gördüğünüz gibi, oraya düşüyordu.
‫Küçük bir boşluk vardı ve bu başlangıçtan itibaren bir boşluktu.
‫Alanı manuel olarak oluşturduğum ve prosedürel olarak yapmaya başladığımız nokta.
‫Yani arada küçük bir boşluk olmalı.
‫Yani size az önce gösterdiğim çözüm sadece bir yama, küçük bir yama.
‫Canlı yayına geçerken bunları gerçekten kullanmamalısınız.
‫Bu yüzden oradaki küçük boşluğu bulmalısınız.
‫Ancak bunu size ayrıntılı olarak göstermenin çok sıkıcı olduğunu düşünüyorum.
‫Şimdi bir sonraki bölüme bir göz atalım.
‫Oh, bunu kaçırdım.
‫Gördüğünüz gibi, oyunumuz olması gerekeni yapıyor.
‫Bitmiş bir oyunumuz mu var?
‫Sesimiz var diyebilirim.
‫Bu puanları toplayabiliriz.
‫Yüksek bir puanımız var vs.
‫Ve bence en önemli şey prosedürel dünyamız.
‫Şimdi, zorluk biraz daha yüksek olabilir.
‫Tabii ki, oyuncunun hızını adım adım değiştirebilirsiniz.
‫Ardından, elbette, prosedürel haritamızı oluşturduğumuz tempoyu da değiştirmeniz gerekecektir.
‫Ve işte buradayız.
‫Harika.
‫Sanırım 26 noktayı birleştirdiğimi ve bir sonraki bölümde bir sonraki oyunu yaratacağımızı görmeniz
‫yeterli.
‫Bu yüzden umarım heyecanlanmışsınızdır ve umarım bu oyunu alıp daha da iyi hale getirmişsinizdir.
‫Yani daha da iyi yaparsın.
‫Bu yüzden lütfen devam edin ve bu oyunu daha iyi göstereceğini düşündüğünüz veya bu oyunu harika yapan
‫özellikleri ekleyin.
‫Bu yüzden lütfen devam edin ve bunu bizimle paylaşın.
‫Tamam.
‫Bir sonraki bölümde görüşürüz.