‫Merhaba ve hoş geldiniz.
‫Bu derste davranış ağaçlarımızda bazı seçeneklere sahip olmayı inceleyeceğiz, öyle ki bir düşmanımın
‫bana doğru koşmasını sağlayabilirim ve eğer beni gözden kaybederse, temelde iki davranış yaparak bilinen son konumuma gelir;
‫bir kovalama ve sonra bir araştırma davranışı.
‫Şimdi bunun nasıl başarılabileceğini görelim.
‫Davranış ağaçlarını kullanma.
‫Dolayısıyla, bu devriye davranışı çok öğretici olsa da, gerçekten uygulamak istediğimiz türden bir davranış
‫değildir.
‫Bizim tercih edeceğimiz şey aşağıdaki gibi bir şeydir.
‫Oyuncuyu görebildiğimiz zaman, gidip mümkün olduğunca ona yaklaşıyoruz.
‫Ve oyuncu gözden kaybolduğunda, onu bulmak için oyuncunun bilinen son konumuna gitmeye çalışırız.
‫Ve bu seçeneği tükettikten sonra, belki farklı bir yere geri döneriz ya da belki
‫şimdilik orada kalırız.
‫Peki bunu nasıl başarabiliriz?
‫Şu anda bunu bir dizi eylemle gerçekleştirmenin bir yolu yok.
‫Elimizdeki verilere dayanarak bir seçim yapmamız gerekiyor.
‫Oyuncuyu görebiliyor muyuz, göremiyor muyuz, oyuncunun bilinen son konumu var mı, yok mu,
‫bu tür şeyler arasında seçim yapmamız gerekiyor.
‫Bunu yapmak için davranış ağacında seçici düğüm adı verilen yeni bir düğüm türüne ihtiyacımız var.
‫Sağ tıklayıp kompozitlerimize bakarsak, oradaki seçeneklerden biri seçicidir.
‫Şimdi dizinin aksine seçici şu şekilde çalışır.
‫Seçicinin altında bir grup göreviniz varsa, ilki başarılı olana kadar çalışacaktır.
‫Ve temelde, içlerinden biri başarılı olana kadar hepsinin başarısız olmasını beklemektir.
‫Şimdi dizi tam tersini yaptı.
‫Biri başarısız olana kadar hepsini çalıştırır.
‫Peki bu neden yararlı?
‫Seçicinin bunlardan birini çalıştırması ve yine de birinin başarılı olması neden yararlıdır?
‫Çünkü temelde uygulanabilir olan ilk seçeneği seçmesini istiyoruz.
‫Şimdi, bunu yapmanın yolu aslında seçicinin altında görevleri çalıştırmak değil, seçicinin
‫altında dizileri çalıştırmaktır.
‫Yani kök seviyesinde bir seçici düğüm yapacağız.
‫Ve sonra bunun altında, bu diziyi bir kenara bırakalım ve başka diziler oluşturalım.
‫Burada bir sekansımız olacak ve yapabileceğimiz şey aslında sekansı sekans
‫olmaktan Chase gibi bir şeye yeniden adlandırabiliriz ve sonra buraya başka bir sekans ekleyebiliriz,
‫bu da araştırma satırları boyunca olacaktır.
‫Ve bunlar temelde aralarında seçim yapabilmeyi istediğimiz iki davranışımızdır.
‫Ve onları başarısız kılmak için düğümlere dekoratör adı verilen şeyler ekleyebiliriz.
‫Bir düğüme sağ tıklayıp dekoratör ekle derseniz, burada bir dizi seçenek olduğunu ve temelde
‫bu düğümün çalışma şeklini değiştirdiklerini görebilirsiniz.
‫O zaman bunu çeşitli şekillerde yapabilirler.
‫Örneğin, bu koşullu döngü, bu koşul doğru olduğu sürece sıradaki tüm eylemler arasında
‫tekrar döngü oluşturmanıza olanak tanır.
‫Burada koni kontrolü gibi görünürlük ve benzeri güzel şeylerle ilgili başka şeylerimiz de var.
‫Sadece saf bir döngümüz var.
‫Bir zaman sınırımız var, yani bu dizinin içinde sadece belirli bir süre kalabiliriz.
‫Temel olarak bu dizinin davranışını değiştiren pek çok şey.
‫Ancak bizim ilgilendiğimiz kara tahta, çünkü bu bir kara tahta durumu.
‫Ve altındaki yazıdan da görebileceğiniz gibi, varsayılan olarak "Bu kendi kendine aktör
‫ayarlı mı?" gibi bir şey yazıyor.
‫Ve bu ayarlanmazsa, otomatik olarak bu düğüm ve altındaki her şey başarısız olur, bu da seçicimizin ikinci
‫seçeneğe, yani araştırmaya geçeceği anlamına gelir.
‫Bu durumda, aslında bunu değiştirmek istiyoruz.
‫Bu işleyişi değiştirmek istiyoruz.
‫Yani oyuncu konumumuz, bunun yalnızca oyuncu görünür olduğunda ayarlanacak şekilde olmasını istiyoruz.
‫Ve sonra buraya tekrar yeni bir değişken eklemek istiyoruz, bilinen son oyuncu konumu olacak bir vektör
‫ve oyuncu görünür olduğunda bilinen son oyuncu konumu aynı olacak.
‫Ancak oyuncu görünmez olduğunda, oyuncu konumu ayarlanmamış olur ve bilinen son oyuncu konumu gitmek
‫isteyeceğimiz yerdir.
‫Bunu, Blackboard Base koşulumuza giderek ve sorgunun Evet olarak ayarlanmasını sağlayacak şekilde
‫değiştirerek yapabiliriz, ancak ayarlanmasını istediğimiz şey oyuncunun konumudur.
‫Eğer oyuncu konumu ayarlanmışsa, Chase'i vereceğiz ve Chase'i temelde sadece bir
‫move to yaparak vereceğiz ve oyuncu konumuna şu şekilde hareket edeceğiz.
‫Şimdi bu dizinin altında başka bir şey yapmıyoruz.
‫Aslında bu karatahta koşulunu doğrudan hareketin üzerine de koyabilirsiniz, ancak çekim gibi başka şeyler yapmak isteyebileceğimiz
‫için şimdilik bunu bir sekans olarak bırakacağım.
‫Ve sonra bu soruşturma var.
‫Araştırma da temelde bir hareket yapacak, ancak oyuncunun konumuna
‫gitmek yerine, bilinen son oyuncu konumuna gidecektir.
‫Ve bunun üzerinde bir koşulumuz olmadığını görebilirsiniz çünkü bu koşul başarısız olursa bu düşer.
‫Bu karatahta koşulları hakkında dikkat edilmesi gereken önemli bir nokta, varsayılan olarak, bu düğümü yürütmeye
‫başlama kararını verdikten sonra, bunu yeniden değerlendirmeyeceğimizdir.
‫Dolayısıyla, oyuncunun bulunduğu yere doğru ilerlerken herhangi bir nedenle oyuncuyu gözden kaybedersek, oraya
‫ulaşmaya çalışmaya devam edeceğiz.
‫Dolayısıyla, bu düğümün yürütülmesini iptal edebilmesini istiyorsak, bunun için bir seçenek vardır.
‫Akış kontrolüne giderseniz, bildirilen gözlemciler var ve altında da var.
‫Gözlemci hiçbiri olarak ayarlandığı anda iptal eder.
‫Ancak birkaç seçenek arasından seçim yapabilirsiniz.
‫Kendi kendine ayarlayabilirsiniz.
‫Yani bu, bu koşul aniden yanlış hale gelirse, yaptığınız her şeyi durdurun ve seçicinizi yeniden değerlendirin
‫ve görün diyor.
‫Belki de şimdi araştırma yapmamız gerekiyor.
‫Not Buradaki diğer seçenek daha düşük önceliklidir ve burada vurgulananları değiştirdiğini görebilirsiniz.
‫Eğer aniden bu kara tahta koşulu doğru hale gelirse, yaptığımız diğer her şeyi durdurun ve bu takip
‫koşulunu çalıştırmaya başlayın diyor.
‫Son seçenek ise her ikisi de.
‫Bizim istediğimiz de bu.
‫Temel olarak, bu karatahta tabanlı koşulun doğru olması durumunda, bu diziyi hemen yürütmeye başlayacağımızı
‫söylüyor.
‫Yanlış olursa, hemen yürütmeyi durdururuz veya devam eden başka ne varsa onu yürütmeyi durdururuz.
‫Temelde her zaman gitmek ve bu kara tahta koşulu tarafından dikte edilen yolu yapmak istiyoruz.
‫Umarım bu, gözlemcinin eylemdeki durdurma işlemlerini iptal etmesini mantıklı kılar, aksi takdirde yeniden
‫değerlendirmeden önce eylem bitene kadar bekleyecektir.
‫Şimdi gerçekten de devam edip bilinen son oyun konumumuzu ve oyuncu konumumuzu uygulamak istiyoruz,
‫çünkü şu anda C++'ya gidip kendimize biraz daha yer açarsak, bu oyuncu konumunu yalnızca Oyuna
‫Başla'da ayarladığımızı görebilirsiniz.
‫İdeal olarak, oyuncu piyonumuzla her görüş hattımız olduğunda bunu yapıyor olmalıyız, bu yüzden aslında
‫görüş hattı kodumuzu burada kaldırabiliriz.
‫Ve muhtemelen else kodunu da kaldırmak istiyoruz.
‫Ancak bu durumda odağı temizlemeyeceğiz ve hareketi doğrudan durdurmayacağız.
‫Devam edip bunları tamamen kaldırabilirim çünkü.
‫Şu anda işleri bu şekilde yürütmüyoruz.
‫Bunun yerine, kodu kaldırırsam yapmak istediğimiz şey, burada oyuncunun konumunu ayarlamaktır.
‫Ayrıca orada bilinen son konumu ayarlamak istiyoruz ve başka bir yerde oyuncu konumunu temizlemek istiyoruz.
‫Şimdi bunu yapmak için, vektör olarak ayarlanmış değer yerine kullanabileceğimiz bir fonksiyonumuz
‫var, eğer devam edip kara tahta bileşenimizi açarsak, net bir değer var ve bu sadece f adını alıyor, bir tür veya başka bir
‫şey almasına gerek yok ya da çünkü o değişkende ne varsa tamamen siliyoruz.
‫İşte size kene setimizi doldurmanız için bir görev veriyorum.
‫Görüş hattı olduğunda iki değişken, temel olarak if ifadesinin bu ilk kısmını doldurur ve ardından
‫alt'a sahip olduğumuzda oyuncu konumunu temizler.
‫Yani görüş hattını kaybettiğimizde, artık bir oyuncu konumumuz yok.
‫Dünyadaki düşmanın hızını azaltın, böylece ondan daha kolay uzaklaşabilirsiniz.
‫Ve sonra işlevselliği kontrol edin, bir köşenin arkasına saklanabildiğinizi ve sizi bulmaya çalışmak için bilinen
‫son konuma gittiğini kontrol edin.
‫Videoyu duraklatın ve bunu deneyin.
‫Tamam.
‫Tekrar hoş geldiniz.
‫O zaman bir deneyelim.
‫Öncelikle oyun konumunu ayarlıyoruz.
‫Bunu başlangıç oyunundan çıkarıp buraya taşıyacağım.
‫Bu yüzden oyuncu konumunu, oyuncu piyonunu buradan almamız ve tekrar işaretlememiz gereken yere ayarlayacağız.
‫Bu yüzden bu satırı kaldıracağım ve burada bilinen son oyuncu konumumuz için tamamen aynı şeyi,
‫tamamen aynı kod satırını yapıyoruz.
‫Öyleyse tahtaya gidelim ve kopyaladığımızdan emin olalım, böylece tam olarak aynı adı alalım ve sonra
‫sadece temizlemek istiyoruz, bu son şey buradaki oyuncu konumumuzu temizlemektir.
‫Yani clear value olacak ve sonunda temizlemeye çalıştığımız değer olarak bu metin
‫oynatıcı konumunu alacak.
‫Devam edip derleyebilir ve çalışıp çalışmadığını görebiliriz.
‫Derleme başarılı oldu.
‫Hata ayıklamamızı kolaylaştırmak için yapmamızı söylediğim diğer şey, düşmanı
‫seçmekti ve hareket bileşenlerine gidip yürümeyi bularak ve hızlarını bularak hızlarını değiştirebiliriz.
‫Yani Maksimum Yürüme hızı burada 600'dür.
‫400'e ayarlayalım ki onlardan kolayca uzaklaşabilelim.
‫Biraz yavaş yürüyecekler ve devam edip oynayacaklar.
‫Bize doğru yavaşça yürüyorlar.
‫Kaçabiliriz.
‫Bir köşeye saklanıyoruz ve her seferinde bizi aramaya geliyorlar.
‫Ama umarım iki köşenin arkasına saklanırsak bizi bulamazlar.
‫Oraya saklanıyorum, buraya saklanıyorum, buraya saklanıyorum.
‫Ve gidip bilinen son yeri araştıracak, görüyorsunuz, köşeden kafasını
‫uzattı, ama sonra orada sıkışıp kaldı çünkü ne yapacağını bilmiyordu.
‫Davranış ağacımıza bir göz atacak olursak ve bunu bir tarafa, oyunu da diğer tarafa koyup
‫kendime biraz yer açacak olursak.
‫Daha sonra davranış ağacına bakarsak, burada bir tür caz olduğunu görebiliriz
‫çünkü ikisini de yapamaz.
‫Bilinen son yere gitmeye çalışıyor ve bunu başarıyor.
‫Yani burada biraz sıkışıyor.
‫Ama görüş alanına girersem, bana doğru geldiğini görebilirsiniz.
‫Eğer beni gözden kaybederse, o zaman soruşturma durumuna geçer.
‫O zaman görüşünü kaybet.
‫Araştıracak.
‫Sonra gelip beni görüyor ve sonra beni kovalamaya devam ediyor.
‫Yani bu davranış aslında işe yarıyor.
‫Artık bu karatahta davranışına dayanarak kovalamaya çalışmak ile araştırmaya çalışmak arasında bir seçim yapabiliyoruz.
‫Oyuncu soru işaretini görebilmek için bu yazı tahtasının adını davranış olarak değiştirelim.
‫Yani bunu okumak çok daha kolay olacak.
‫Şimdi bu seçici oyuncuyu görebiliyor, o zaman kovalamalıyız, aksi takdirde araştırmalıyız
‫ve bu diziyi buradan silebiliriz çünkü bu artık kullanılmıyor.
‫Umarım artık davranış ağaçlarının seçim ve sıralama oluşturmak için nasıl birbirine bağlanabileceğini ve daha
‫karmaşık davranışları gerçekten kolayca oluşturmak için birçok görevi bir araya getirebileceğinizi biraz daha iyi anlamışsınızdır.
‫Bir sonraki derste, C++'da kendi özel görevlerimizi nasıl oluşturabileceğimize bakacağız, böylece bazı çekim
‫eylemleri gerçekleştirebileceğiz.
‫Bir sonraki videoda görüşürüz.