‫Merhaba ve tekrar hoş geldiniz.
‫Şimdi hareket edebilen ve hatta taretini döndürebilen bir tank yarattık.
‫Ve şimdi tankın temel pod sınıfından miras aldığı bazı işlevleri devralabilecek
‫bir kule sınıfı oluşturmaya hazırız.
‫Şimdi, bir kule sınıfı oluşturduktan sonra, taretini de döndürebilmek için tick fonksiyonunu
‫geçersiz kılacağız.
‫Buradaki amacımız, taretlerin her zaman tanka bakacak şekilde dönmesini sağlamaktır.
‫Bu şekilde, mermileri ateşlemeye başladıklarında, tank hızla yoldan çekilmediği sürece bazen
‫tankı vuracaklardır.
‫Ayrıca tankı nasıl ele geçirebileceğimizi de bulacağız.
‫Bu şekilde tankı hedef alabilir ve kuleleri tanka doğru döndürebiliriz.
‫Biraz mermi savaşına hazırlanıyoruz.
‫Editördeyim ve temel tank ve tank sınıflarının bulunduğu tune tanks klasörümüze
‫gireceğim.
‫Şimdi, temel -- sınıfına dayalı bir kule sınıfı oluşturmak istiyorum.
‫Şimdi, bunu tank sınıfıyla yapma şeklimiz doğruydu.
‫Temel üzerine tıklandı -- ve temelden türetilen C++ sınıfı oluştur seçildi Alternatif bir
‫yol, araçlara gitmek ve yeni C++ sınıfı seçmektir.
‫Ve buradan tüm sınıflar yazan sekmeye tıklayabilir ve base -- için arama yapabiliriz.
‫Ve burada temel -- sınıfımızı görüyoruz.
‫Bunu seçip ileri'ye tıklarsam, şimdi base -- temelinde yeni bir sınıf oluşturacağım.
‫Bunu diğer tüm C++ sınıflarımızla aynı yolda bırakacağım ve bu kuleyi çağıracağım.
‫O halde Sınıf Oluştur'a tıklayalım.
‫İşte yeni kule yaşım ve Kule Nokta'm.
‫CP Şimdi ihtiyacımız olan ilk şey tik fonksiyonu çünkü kule taretini -- ile yüzleşecek şekilde
‫döndürmek isteyecek.
‫Bu yüzden burada tick fonksiyonunu geçersiz kılacağız.
‫Bu yüzden yeni bir public bölüm oluşturacağım ve Delta Time adında bir float alan virtual void
‫tick yazacağız ve bu bir override olacak.
‫Gelecek videolarda virtual ve override hakkında daha fazla ayrıntıya gireceğiz, ancak esasen miras alınan
‫tick işlevini alıyoruz ve bunun için yeni bir uygulama oluşturuyoruz.
‫Şimdi tick fonksiyonunu alalım ve burada Tower CP'de uygulayalım.
‫Şimdi tick fonksiyon adının önüne bir kule ve çift iki nokta üst üste koymamız gerekiyor.
‫Ve her zaman olduğu gibi, süper kene aramak iyi bir fikirdir ve Delta zamanında geçmemiz gerekir.
‫Şimdi burada yapmak istediğim şey, tank kulesini döndürerek kulenin tankı tehdit etmesini ve mermileri ateşlemeye
‫hazır olmasını sağlamak.
‫Ancak bunu yalnızca tank menzil içindeyse yapmak istiyorum.
‫Şimdi, tankın menzilde olup olmadığını bilmek için, taret ile tank arasındaki mesafeyi bilmemiz
‫gerekir.
‫Şimdi, işte dünyanın kökenini temsil eden küçük bir alet.
‫Başka bir deyişle, uzayda X, Y ve Z'nin sıfır olduğu nokta.
‫Şimdi, bir aktörün konumundan bahsettiğimizde, başlangıç noktasından o konuma giden vektörden bahsediyoruz.
‫Ve get actor location kullanarak bu konum vektörünü her zaman alabiliriz, böylece kulelerden birinin konumunu
‫ve tankın konumunu alabiliriz.
‫Ve eğer bu iki konumu biliyorsak, aralarındaki mesafeyi hesaplayabiliriz.
‫Şimdi, bunu vektör matematiği ile yapabiliriz, ancak F vektör sınıfının dist adında bir işlevi vardır
‫ve bu işlev konum vektörlerini alır ve döndürdüğü şey aralarındaki mesafedir.
‫Burada, kule CP dosyasında, tik fonksiyonunda, ne yapmamız gerektiğini bilmemiz için birkaç
‫not yazacağım.
‫İlk olarak, tanka olan mesafeyi bulmamız, ardından tankın menzilde olup olmadığını kontrol etmemiz ve menzildeyse
‫tareti tanka doğru döndürmemiz gerekir.
‫Yani burada yapmamız gereken bazı şeyler var.
‫Şimdi, tanka olan mesafeyi bulmak için tankı tutmamız gerekiyor.
‫Şimdi, bunu yapmak için iyi bir yer Begin Play'dir.
‫Bu yüzden tik fonksiyonuna ek olarak, devam edelim ve Begin Play'i geçersiz kılalım.
‫Tank H'de oyuna başlamanın korumalı bir bölümde olduğuna dikkat edin.
‫Onu kulede de korumaya devam edeceğiz.
‫Bu yüzden korumalı bölümü kamuya açık bölümün hemen altına yerleştireceğiz ve oynatmaya başlama işaretinin hemen altında uygulayacağız.
‫Şimdi Tower Dot'a gidelim, CP, implement, begin play fonksiyon adını tam olarak nitelendirelim ve muhtemelen tahmin
‫ettiğiniz gibi Super Begin Play diyoruz.
‫Şimdi tankı almak ve bir değişkende saklamak için tank tipinde bir değişkene ihtiyacımız var.
‫Bu yüzden bunu Towers H'de özel bir bölüme yerleştireceğiz.
‫Şimdi bu bir A tankı olacak, bu bir işaretçi ve bu tankı basitçe çağırabiliriz.
‫Ve Tank H'yi buraya dahil etmek zorunda kalmamak için, bunun ne kadar önemli olabileceğini gördüğümüzü beyan
‫edebiliriz.
‫Şimdi bu tank işaretçisine sahibiz ve tanka nasıl erişeceğimizi bulabilirsek, onu buradaki tank işaretçimizde
‫saklayabilir ve oynamaya başlayabiliriz.
‫Yapacağım ilk şey Tank H'yi dahil etmek olacak, böylece türü gerçekten kullanabileceğiz.
‫Peki tanka nasıl erişeceğiz?
‫İşte oyuncu piyonunu al adlı kullanışlı bir işlev için unreal engine belgeleri.
‫Bir oyun statiği içinde var olur.
‫Bunu açtığıma göre, devam edip gameplay statics için include'i kopyalayacağım ve sözdizimine
‫bir göz atacağım.
‫Bir dünya bağlamı nesnesi olmak üzere iki girdisi vardır.
‫Bunu nasıl halledeceğimizi ve bir oyuncu endeksini zaten biliyoruz.
‫Bizimki gibi tek oyunculu oyunlarda gördüğümüz gibi, oyuncu indeksi her zaman sıfırıncı oyuncu olacaktır ve bu
‫da sıfırıncı oyuncuya karşılık gelen piyona erişmemizi sağlayacaktır.
‫Şimdi bu fonksiyonu Tower Dot CP'de çağıralım.
‫Oynanış istatistikleri için include'i yapıştıracağım ve begin play'de tank'ı dünya
‫bağlamı nesnesi için oynanış istatistikleri get player'a eşit olarak ayarlayacağım.
‫Bunu girebilirim ve oyuncu indeksi için sıfır girebiliriz.
‫Şimdi kırmızı dalgalı çizgiye bak.
‫A piyonu türündeki bir değerin A tankı türündeki bir varlığa atanamayacağını söylüyor.
‫Bu, denetleyiciyi çağırmaya, almaya ve sonucu bir A oyuncu denetleyicisinde depolamaya çalışırken karşılaştığımız
‫sorunun aynısıdır.
‫Bir tank bir piyonun çocuğudur, bu nedenle bir üst tipi bir alt işaretçide saklayamayız.
‫Yapmak zorundayız.
‫Tahmin ettiniz, oyuncu seçmeliyiz.
‫Bu yüzden buradan dönen değeri alacağız ve bir döküm işlevi çağrısının içine koyacağız.
‫Yani döküm diyeceğiz ve bir tanka döküm yapacağız.
‫Oyunculara ileteceğimiz şey de oyuncu havuzunu almak için yapacağımız bu çağrı olacak.
‫O halde bunu parantez içine alalım.
‫Alçıdan sonra da tanka girebileceğiz.
‫Artık tanka erişimimiz olduğuna göre, tanka olan mesafeyi bulabiliriz ve mesafe bir şamandıradır.
‫Böylece mesafe adında yerel bir float değişken oluşturabiliriz.
‫Ve bunu eşitleyeceğimiz şey, F vektör statik fonksiyonu dist'i çağırmanın sonucudur.
‫Şimdi dist, F vektör tipinde iki girdi parametresi alır.
‫Şimdi uzaydaki iki nokta arasındaki mesafeyi istiyoruz.
‫Birincisi kulenin yeri.
‫Kule sınıfındayız, bu yüzden get actor location'ı çağırabiliriz ve bu bize kulenin konumunu verir.
‫Peki ya tank?
‫Tankı arayabilir, aktörün yerini öğrenebilir ve mesafeyi öğrenebiliriz.
‫Şimdi tek sorun, önce null olmadığından emin olmak için kontrol etmeden tank işaretçisini kullanıyor
‫olmamız.
‫Bu yüzden önce if tank demeliyiz ve sonra bu fonksiyon çağrısını alıp if deyiminin içine sürükleyebiliriz.
‫Yani tank geçerliyse, get actor location ile konumuna erişebiliriz.
‫Mükemmel.
‫Bu if deyiminde çalıştığımız için, bu diğer yorumları bunun içine taşıyacağım çünkü tank
‫geçerli değilse, tankın aralıkta olup olmadığını kontrol edemeyeceğimizi biliyoruz.
‫Bu yüzden tareti tanka doğru döndürmeniz için size meydan okumak istiyorum.
‫Şimdi, bunu yalnızca tank menzil içindeyse yapmak istiyoruz, mesafemiz var.
‫Şimdi bir ateş aralığı değişkenine ihtiyacımız var.
‫Bu nedenle, kule sınıfında yangın aralığı adında bir float oluşturun ve bunu özelliğinizle gösterin.
‫Bunu editörden düzenleyebilmek istiyoruz.
‫Şimdi tankın menzil içinde olup olmadığını kontrol edeceksiniz.
‫Tareti döndür denirse ve tareti döndürmek için hedefe bakmak gerekir.
‫Tankların bulunduğu yerden geçeceksin.
‫Bu yüzden videoyu durdurun ve bu davranışı şimdi uygulayın.
‫Tamam.
‫Bu yüzden bir yangın aralığı değişkenine ihtiyacımız var.
‫Burada, H Kulesi'nde özel bir bölümümüz var.
‫Bir şamandıra yapacağız.
‫Bu yangın aralığını çağıracağım ve devam edip 300 F gibi bir değerle başlatacağım.
‫Ama bunu deneyeceğiz çünkü bu sizin mülkünüz olacak.
‫Yani senin mülkün.
‫Tüm tankların aynı atış menziline sahip olmasını istediğimden, bunu yapacağım ve sadece varsayılan olarak ayarlayacağım.
‫Bu şekilde sadece varsayılan plan üzerinde düzenleme yapabiliriz.
‫Şimdi eğer sizinkini herhangi bir yerde düzenle ya da sadece örneği düzenle yaptıysanız, bu tamamen sorun değil.
‫Bu gerçekten bir tercih meselesi ve daha sonra değiştirebiliriz.
‫Ben de buna bir kategori vereceğim ve bu kategoriye savaş diyeceğim.
‫Tower CP'ye gidelim ve burada bir sonraki noktayı ele alalım.
‫Tankın menzil içinde olup olmadığını kontrol edin, bu da mesafenin ateş menziline eşit veya daha az olup olmadığını kontrol
‫etmemiz gerektiği anlamına gelir.
‫Sadece eşit değil, eşitten daha az veya eşit var, çünkü kareden kareye, mesafe aslında bir kare
‫ateş menzilinden daha büyük ve bir sonraki kare tamamen ateş menzilini geçerek ateş menzilinden daha az olabilir.
‫Yani aslında hiçbir zaman tam olarak ateş menziline eşit olmayabilir.
‫Aslında, kayan nokta değerlerinde, iki kayan noktanın tam olarak eşit olması oldukça nadirdir.
‫Yani bu if kontrolüne sahibiz ve bunun içine girersek, bu, mesafenin ateş menzilinden daha az veya eşit olduğu
‫anlamına gelir.
‫Tank şimdi menzilde, bu da bu yorumun oraya taşınabileceği anlamına geliyor.
‫Şimdi, menzil içindeyse, tareti tanka doğru döndürün; bu, tareti döndür işlevini çağıracağımız anlamına
‫gelir.
‫Bu, temel pod'a koyduğumuz korumalı işlevimizdir.
‫Şimdi döndürme tareti hedefe bakar ve tankın konumuna ihtiyacımız vardır.
‫Yani bu tank aktörün yerini alacak.
‫Ve bununla birlikte artık sadece tank menzil içindeyse tareti döndür diyoruz.
‫Şimdi bunu derleyelim ve nasıl çalıştığını görelim.
‫Düzenleyiciye geri döndük ve yapmamız gereken şey planlara, piyonlara gitmek ve bir BP piyon kulesi
‫bulmak ve tam plan düzenleyicisini açmak.
‫Şimdi sağ üstte, ana sınıf temel piyonu görüyoruz, ancak ana sınıfımızın kule olmasını istiyoruz, bu
‫nedenle sınıf ayarlarına, ana sınıfa gidebilir ve kuleyi arayıp seçebiliriz.
‫Şimdi piyon taretimiz kule sınıfına dayanıyor.
‫Şimdi oynat tuşuna bastığımızda ne olacağını görelim.
‫Tamam, tankın yerini değiştiriyorum.
‫Menzilde değiliz, bu yüzden kulelerden herhangi bir hareket göremiyoruz.
‫Ama menzile girersem, şuna bak.
‫Şimdi beni takip ediyorlar ve oldukça tehditkâr görünüyorlar.
‫Şimdi 300 birim o kadar da uzak değil.
‫Yapmak istediğim şey bu mesafeyi düzenlemek.
‫Buradan BP Piyon Tareti'nde, BP Gölet Tareti'ni kendim seçeceğim.
‫Ve işte savaş bölümü.
‫Devam edeceğim ve bunu yaklaşık 700'e ayarlayacağım.
‫Şimdi, oynat tuşuna basarsam, ben buraya geri dönerken onların dönmeyeceğini göreceğim.
‫Ama menzile girer girmez bana bakmaya başlıyorlar.
‫Mükemmel.
‫Özetle, kule sınıfını oluşturduk.
‫Artık tank için bir düşmanımız var.
‫Ayrıca tik fonksiyonunda kulenin taretini tanka doğru döndürdük ve bunu sadece tank ateş menzilindeyse
‫yapıyoruz.
‫Ayrıca, plan içinde ayarlanabilmesi için ateş aralığı değişkenini de açığa çıkardık.
‫Savaş için neredeyse hazırız.
‫Gelecek videolarda bunu ayarlamaya başlayacağız.
‫Yakında görüşürüz.