‫Merhaba ve hoş geldiniz.
‫Bu derste, C++'da bir ateş düğümü uygulayarak düşmanımızı daha büyük bir tehdit haline getireceğiz.
‫Şimdi nasıl yapılacağını görelim.
‫Dolayısıyla, davranış ağacımızda açıkça eksik olan bir işlevsellik parçası, ateş etme yeteneğidir.
‫İdeal olarak yapmak istediğim şey oyuncunun bulunduğu yere gitmek ve sonra ateş etmek.
‫Ama önce hareketi nasıl yaptığımızı biraz değiştirmek istiyoruz.
‫Değiştirmek istediğim birkaç şey var, bu yüzden Düğüme taşı'yı seçersem, değiştirmek istediğim şeylerden
‫biri yarıçap.
‫Düşmanın bana doğru gelmesini istemiyorum, bu yüzden kabul edilebilir yarıçapı değiştirirsem, benden
‫beş metre uzakta hareket etmeyi bırakacak.
‫Bu yüzden duracak.
‫Bana güzel bir beş metre mesafe ver.
‫Bana doğru geliyor, işte böyle.
‫Ve durup bakıyor.
‫Şimdi yapmak istediğim bir diğer şey ise aşağıda, karatahta bölümünde, gözlemlenen bir karatahta değeri olduğunu
‫görebilirsiniz.
‫Eğer bunu kontrol ettirmezsek, ben hareket ettikçe neler olacağını görelim.
‫Temel olarak ve daha küçük bir kabul edilebilir yarıçapımız olduğunda bu biraz daha belirgindi.
‫Şimdi bunu beş dörde indirelim.
‫Ve eğer oynat tuşuna basarsam, hareket ettiğimi görebilirsiniz.
‫Son konumuma gidiyor ve ancak oraya ulaştığında bir güncelleme yapıyor.
‫İstediğimiz bu değil.
‫İstediğimiz şey sürekli olarak bize doğru gelmesidir.
‫Ve eğer observe blackboard değerini kontrol ederseniz, esasen söylediği şey, oyuncu konumu
‫her değiştiğinde, nereye hareket ettiğimizi güncelleyeceğimizdir.
‫Eğer devam edip oynat tuşuna basar ve hareket edersem, beni sürekli takip ettiğini ve yolunu güncellediğini görebilirsiniz.
‫Biz de tam olarak bunu istiyoruz.
‫Şimdi kabul yarıçapımızı 500 olarak değiştirebiliriz ve daha az belirgin hale gelir.
‫Ancak yine de orada gözlemlediğimiz kara tahta değerine sahip olmamız iyi bir şey.
‫Ve sonra istediğimiz davranış, yarıçapımıza yaklaştığında durup bize ateş
‫etmesidir.
‫Bunun için yeni bir görev türüne ihtiyacımız var.
‫Bu yüzden burada yeni bir C++ görevi oluşturacağız.
‫Bu yüzden yeni, yeni C++ sınıfı ekleyeceğiz.
‫Sonra gidip tüm sınıfları göstereceğiz ve beat görevini arayacağız.
‫Şimdi, hangisini istiyoruz, ritim görevi düğümünü mü yoksa ritim görevi karatahta tabanını mı?
‫Aslında anahtar kullanmamıza gerek yok çünkü sadece ateş etmeyi deneyeceğiz.
‫Yapacağımız tek şey bu.
‫Silahımızın tetiğini çekeceğiz ya da nişan alma işlemini davranış ağacımızın başka bir yerinde yapacağız.
‫Buradaki temel sınıf olan görev düğümünü açalım ve bu görevi beat görevi olarak adlandıralım.
‫Alt çizgi.
‫Ateş et.
‫Devam edelim ve bu sınıfı oluşturalım.
‫O zaman böyle bir şeyle karşılaşırız.
‫Bu yüzden aynı kurulumu yapmak istiyoruz.
‫Bu nedenle, kara tahtamız için sahip olduğumuz aynı tür kurulumu yapmanız için size küçük bir meydan okuma, kara tahta
‫değerini temizleyin.
‫Bir adımız olsun istiyoruz, bir yürütme görevimiz olsun istiyoruz.
‫Şimdi videoyu varsayalım ve bunu deneyelim.
‫Tamam, tekrar hoş geldin.
‫Yani bu küçük bir görevdi.
‫İmzaları, halka açık ve korumalı bölümler de dahil olmak üzere, çekim yapmak için şeffaf bir karatahta
‫değerinden kopyalayacağım.
‫Yapıcımızın adını değiştireceğim.
‫Devam edeceğim ve kurucumuzu uygulayacağım.
‫Peki yapmamız gereken neydi?
‫Düğüm adını çekime eşit olarak ayarlamamız gerekiyordu.
‫Biz de öyle diyeceğiz.
‫Daha sonra çekim görevi için başlığa geri dönüyoruz ve şimdi yürütme görevini uygulamaya çalışacağız
‫ve sadece super'i çağırmamız gerekiyor.
‫Bu yüzden bunu clear blackboard value CP dosyamızdan kopyalayacağım ve sonra uygulamaya başlamaya hazırız.
‫Burada yapmamız gereken ilk şey, biraz daha yer açalım, piyonumuzu
‫ele geçirmemiz gerekecek.
‫Neden piyonumuzu ele geçirmemiz gerekiyor?
‫Peki, bir piyon olan nişancı karakterine bir göz atalım.
‫Tetikçi karakterini hatırlıyor musun?
‫Dot H'nin bir atış yöntemi var.
‫Bu, esasen oyuncunun yaptığının aynısını yapmak istediğimiz şeydir.
‫Tetik düğmesini basılı tutuyor ve bu ateş etme yöntemini çağırıyor.
‫Yapay zekanın da aynısını yapabilmesini istiyoruz.
‫Ateş etme görevine sahip olduğunuzda, tetik düğmesini basılı tutacak veya tetik düğmesine tekrar tekrar basacaktır,
‫bu nedenle yürütme görevi bunu yapmak için doğru yer olacaktır.
‫Muhtemelen buraya geri döneceğiz, çünkü unutmayın, bu eylem sadece bir atış.
‫Sürekli çekim değil.
‫Ne yapacağız?
‫Eğer başarılı olursak ET düğümü sonucunu başarılı olarak döndüreceğiz.
‫Başarılı olsaydık, sürekli kene soğutmamıza gerek kalmazdı.
‫Bu görevin tek bir kareden daha uzun süre çalışmasına ihtiyacımız yok.
‫Yapmamız gereken bir diğer şey de, dediğim gibi, piyon sınıfını ele geçirmek.
‫Şimdi size yapay zeka kontrolörünü nasıl ele geçirebileceğinizi göstereceğim.
‫Ve AI denetleyicisinden, kontrol edilen piyonu almak için get pawn'ı çağırabileceğimizi biliyoruz.
‫Ve bu kontrollü piyonu tetikçi karakter uygulamamıza aktarabileceğimizi biliyoruz.
‫Peki buradan yapay zeka kontrolörüne nasıl ulaşacağız?
‫Bir AI denetleyicisinde olduğunu bildiğimiz davranış ağacı bileşenimiz var.
‫Belki de Yu davranış ağacı bileşenine gidip burada yardımcı olabilecek herhangi bir yönteme
‫bakarsak kullanabileceğimiz bir şey vardır.
‫Burada çok şey var, ancak denetleyiciyi ararsak, hiçbir şey görmüyoruz, ancak belki de temel sınıflarından
‫birinde bir yerde, çünkü YU davranış ağacı bileşeninin üst sınıfı Yu beyin bileşenidir.
‫Bunu takip edeceğiz ve burada kontrolör arayacağız.
‫Bunun için bir özellik olduğunu görebilirsiniz.
‫Bir alıcı var mı?
‫Evet, get AI owner deniyor ve bir AI denetleyici işaretçisinin üzerine geldiğimizde geri dönmesi gerekiyor.
‫Yani piyonu ele geçirmek için bunu kullanabilmeli, onu bir atıcı karaktere atabilmeli ve ardından ateş etme
‫yöntemini çağırabilmelisiniz.
‫Bu nedenle, shoot yöntemini çağırmak, herkese açık hale getirmek, piyonu almak, piyonu yayınlamak, çağırmak,
‫shoot yapmak ve ardından davranış ağacınızda test etmek sizin göreviniz olacak.
‫Videoyu duraklatın ve deneyin.
‫Tamam.
‫Tekrar hoş geldiniz.
‫Her şeyden önce, ilk adım olarak bu shoot yöntemini public yapmamız gerekecek çünkü bu sınıfın
‫dışından çağrılması gerekiyor.
‫Bu yüzden sadece hasarı üstleneceğim.
‫Ateş edeceğiz, ona biraz yer vereceğiz, biraz nefes aldıracağız.
‫Beyaz alanın görmeme yardımcı olmasını seviyorum.
‫Düşünmeme yardım et.
‫Sonra BT görev çekimine gideceğiz.
‫Öncelikle kontrolörümüzün null olup olmadığını kontrol edeceğiz.
‫Aksi takdirde üzerinde ok operatörünü kullanamayız.
‫Sadece genel olarak, bu boş kontrolleri yapmak için iyi bir uygulama.
‫Yani bu AI sahibi eşit değilse, üzgünüm null pointer'a eşitse, bir hata ile erken dönmek isteyeceğiz.
‫Yani bir yapay zeka denetleyicimiz yoksa bu görev başarısız olacaktır.
‫Bu oldukça açık.
‫Bu yüzden ET düğümü sonuç iki nokta üst üste dönüşü yapacağım.
‫Kolon böyle başarısız oldu.
‫Ve sonra sahip bileşenini yapacağız, AI sahibini alacağız, bunun üzerine -- alacağız.
‫Aslında, buraya bir başlık dosyası eklememiz gerekebilir.
‫Şimdi bir karma ekleme yapalım ve bu oyun çerçevesi ve denetleyici olacak.
‫Ve aslında bence, evet, herhangi bir kontrolör işe yaramalı, ama bence AI kontrolörüne ihtiyacımız var
‫çünkü bu geri döndüğümüz işaretçinin türü ve sonra bir ok yapacağız ve burada dosya kafamdaki
‫bir şey hakkında şikayet eden bir get piyonu yapacağız.
‫Belki de doğru anlamadığım bir şey vardır.
‫Yani ileri eğik çizgi, yanlış anlamışım gibi görünüyor.
‫Aslında oyun çerçevesi içinde değil.
‫Bunu dahil etmek için sadece bir kontrol cihazınız var.
‫Bu konuda bu kadar umursamaz olduğum için bana ders ver.
‫İşte böyle.
‫Şimdi piyonu alabiliriz.
‫Ve dediğim gibi, bir oyuncu kadrosu da yapmamız gerekiyor.
‫Bu yüzden, atıcı karakterin A'sına hangi tipte atmamız gerektiğine dair bir döküm yapacağız.
‫Yani bu tam anlamıyla bir nişancı karakteri, bir nişancı karakteri.
‫Ve bunun sonucunu da kontrol etmemiz gerekecek.
‫Ancak atıcı karakterimizi de dahil etmemiz gerekiyor.
‫Yani hash en üstte atıcı karakteri içerir.
‫Todd H.
‫Bunun gibi ve bunu bir işaretçi tipi atıcı karakterinde saklayacağız.
‫Star bizim karakterimiz olacak.
‫Biz de öyle diyeceğiz.
‫Orada saklayacağız.
‫Ve temel olarak, göz o anda bir piyonu kontrol etmiyorsa get'in null dönebileceğinden
‫emin olmamız gerekir.
‫Ya da bu döküm, karakterin farklı bir -- türünü kontrol etmesi durumunda tür bir sorun değilse null döndürebilir.
‫Neyse ki, bu ikisi birlikte oldukça iyi gider, bu nedenle bir null pointer'ı cast etmeye çalışırsanız, sonuç sadece
‫bir null pointer olur, bu yüzden bunu yapabiliriz.
‫Bu kontrollerin hepsi tek bir satırda.
‫Sonra bir if karakteri yapabiliriz.
‫Null işaretçisine eşittir.
‫O zaman tekrar başarısız olmak isteriz.
‫O zaman geri dön.
‫ET düğümü sonucu.
‫Kolon.
‫Kolon böyle başarısız oldu.
‫Ve son olarak, tüm bu kontrollerden sonra ve kendimize bir nişancı
‫karakteri bulduğumuzu bildiğimize göre, ateş et karakterine ok ve ateş et diyebilmeliyiz, böylece sonunda ateş edebileceğiz.
‫Davranış ağacımıza gidelim.
‫Ve burada yeni bir düğüm yerleştirmek için aşağı çekmek ve burada sahip olduğumuz yeni çekim görevini aramak
‫isteyeceğiz.
‫Ve derleyip derlemediğimden emin değilim, bu yüzden her şeyin tekrar derlendiğinden emin olacağım.
‫Ve bu bittiğinde, gidip oynat düğmesine basabiliriz ve bu adamın gelip ateş edip etmediğini görebiliriz.
‫Evet, öyle.
‫Ne yazık ki, sürekli ateş ediyor ve kendi ayağına kurşun sıkıyor.
‫Yani orada bir şeyler tam olarak doğru yazılmıyor.
‫Yani iki şey yanlış gidiyor.
‫Başlangıç olarak, iki atışla kendini öldürmeyi başardı ve ayrıca her karede ateş ediyor gibi görünüyor,
‫bu da mantıklı çünkü oyuncuyu görüyoruz, onlara doğru hareket ediyoruz ve sonra ateş etmek burada
‫sahip olduğumuz son eylem ve bunu tekrar tekrar gerçekleştireceğiz.
‫Yani yapmak istediğimiz şey aslında bunu bir diziye dönüştürmek.
‫Bu yüzden burada bir dizi düğümü oluşturmak adlı bir düğüm sürükleyeceğim.
‫Ve yapacağımız şey ateş etmek, sonra beklemek, sonra ateş etmek, sonra beklemek ve bunu sonsuza kadar tekrarlamak
‫olacak.
‫O yüzden önce ateş et, biraz bekle.
‫Belki de çekimler arasında 1/2 süre bekleriz ve sonra bunu bir dekoratörle yapabileceğimiz şekilde
‫tekrarlamak isteriz.
‫Dekoratör ekle'ye sağ tıklayıp döngü dekoratörünü ararsam, kaç kez dönmesini istediğinizi görebilirsiniz.
‫Üç kez yazıyor.
‫Üç kez istemiyoruz.
‫Hareket etmemiz gerekene veya oyuncuyu gözden kaybedip gidip araştırmamız gerekene kadar temelde sonsuz döngüde
‫olmasını istiyoruz.
‫Bu yüzden devam edip oynat düğmesine basacağız ve çalışıp çalışmadığını göreceğiz.
‫Bana doğru geliyor.
‫Vuruyor, vuruyor, vuruyor.
‫Ama aslında bana vurmuyor.
‫Atışlarının aslında kendi üzerine düştüğünü görebilirsiniz.
‫Ve bu hatayı gelecek bir konferansta ele alacağız.
‫Orada görüşürüz.