‫Kulelerimize yaklaşırsam, hata ayıklama küreleri çizdiklerini, ateşleme işlevini çağırdıklarını ve bunu
‫her 2 saniyede bir yaptıklarını kanıtladıklarını görebilirim.
‫Şimdi, buna ek olarak, sadece bu işlevi çağırıyorlar.
‫Eğer ateş menzilindeysem, buraya geri dönersem, hata ayıklama küreleri çizmediklerini fark edeceksiniz.
‫Yani bu aynı zamanda bir mesafe kontrolünü de içerir.
‫Ve yeterince yaklaştığımda, işte, o hata ayıklama kürelerini çizmeye başlıyorlar.
‫Merhaba ve tekrar hoş geldiniz.
‫Şimdi zaten bir fire fonksiyonu oluşturduk ve bunu tank sınıfında kullanıyoruz çünkü onu
‫fire eylem eşlemesine bağladık.
‫Ancak bunu kule sınıfı ile de yeniden kullanmak istiyoruz.
‫Şimdi, kule sınıfı için kullanıcı girişi kullanmak yerine, zamanlayıcıları kullanacağız.
‫Kule sınıfı için bir zamanlayıcı oluşturacağız, böylece zamanlayıcı yangın fonksiyonunu çağırabilir.
‫Sık sık fire fonksiyonuna yapılan çağrılar arasında belirli bir saniye sayısı ayarlayacağız.
‫Fire fonksiyonunun kule sınıfında sık sık çağrılmasını istediğimizden, şimdi zamanlayıcılar hakkında konuşmamız
‫gerekiyor.
‫Unreal Engine, F Timer Manager adlı bir sınıf kullanarak zamanlayıcıları ayarlama yeteneğine sahiptir.
‫Dünyadaki zamanlayıcıları yöneten bir dünya zamanlayıcı yöneticisi vardır.
‫Şimdi bu dünya zamanlayıcı yöneticisinin Zamanlayıcıyı Ayarla adlı bir işlevi vardır ve zamanlayıcıyı ayarla, zamanlayıcı tanıtıcısı
‫gibi bir dizi girdi alır.
‫Bu, zamanlayıcı yöneticisi tarafından yönetilen belirli bir zamanlayıcıya yönelik bir tanıtıcıdır.
‫Bu, yöneticinin birden fazla zamanlayıcıya sahip olmasını sağlar ve zamanlayıcı tanıtıcısını o zamanlayıcı için bir tür ad veya kimlik
‫olarak kullanarak her biri için zamanlayıcı bilgilerine erişebiliriz.
‫Bu, F zamanlayıcı tanıtıcısı türünde bir nesnedir.
‫Bu yüzden bir zamanlayıcı tanıtıcısı oluşturuyoruz ve bunu set timer fonksiyonuna aktarıyoruz.
‫Şimdi zamanlayıcıyı ayarlamak, bir şey yapmadan önce beklememiz gereken oran veya süre gibi başka
‫girdiler de gerektirir.
‫Şimdi bu, geri arama işlevimizde olacak bir şey.
‫Bir fonksiyon oluşturuyoruz ve bu fonksiyonu zamanlayıcıya bağlıyoruz, böylece yeterli süre geçtiğinde,
‫özellikle zamanlayıcı oranı, geri arama fonksiyonumuz çağrılabilir.
‫Zamanlayıcımız için birkaç şeye ihtiyacımız olduğunu gördük ve bunları kule sınıfına yerleştireceğiz.
‫Şimdi Tower H'ye gidelim ve burada Tower H dosyasına bazı özel değişkenler ekleyeceğiz.
‫Ateş menzilinin hemen altında, zamanlayıcı tutacağımıza ihtiyacımız olacak.
‫Yani bu bir F zamanlayıcı tutamacıdır ve buna basitçe ateş hızı zamanlayıcı tutamacı diyebiliriz.
‫Ayrıca şamandıra olacak bir atış hızına da ihtiyacımız var.
‫Buna yangın oranı diyeceğiz ve bunu iki nokta F olarak başlatabiliriz.
‫Bu şekilde, geri arama işlevimiz gerçekten çağrılmadan önce iki saniye bekleyeceğiz.
‫Geri arama fonksiyonlarından bahsetmişken, aslında bir tanesine ihtiyacımız var.
‫Bu yüzden bir void fonksiyonu oluşturacağız ve bu kontrol ateşleme koşulunu çağırabiliriz.
‫Yani bir zamanlayıcı tanıtıcımız var ve zamanlayıcıyı ayarlayıp çalışmaya başlar başlamaz, zamanlayıcı işlevimizin
‫çağrılmasıyla sonuçlanmadan önce beklememiz gereken 2 saniyemiz var.
‫Buna yangın kontrol koşulu diyorum çünkü kulemizin yangın işlevini çağırıp çağıramayacağını kontrol edebiliriz,
‫böylece yangının çağrılması gerektiğinden emin olmak için kontrol edebileceğimiz bazı koşullar yerleştirebiliriz.
‫Şimdi yangın koşulu fonksiyonunu tanımladık.
‫Bunu tanımlamamız gerekiyor, böylece kule CPP'ye gidebilir ve fonksiyonu burada tanımlayabiliriz.
‫Bunu begin play'in altına yerleştireceğim, bu yüzden ona bir fonksiyon gövdesi ve fonksiyon adından hemen önce bir kule
‫sınıfı adı vereceğim.
‫Şimdi bir fonksiyonumuz var, ancak aslında zamanlayıcıyı ayarlamamız gerekiyor, böylece zaman çalışmaya başlayacak
‫ve fonksiyon bu sürenin sonunda çağrılacak.
‫Zamanlayıcıyı buradan ayarlayabilir ve oyunun başından itibaren çalışmaya başlaması için oyuna başlayabiliriz.
‫Dünya zamanlayıcı yöneticisinden bahsetmiştik ve buna Get World Timer Manager adlı bir fonksiyonla erişebiliriz.
‫Şimdi get World Timer Manager, bir F timer manager nesnesi döndürür.
‫Ve bu türü kullandığımız için, F zamanlayıcı yöneticisi için başlık dosyasını eklememiz gerekecek.
‫İşte basitçe timer manager h.
‫Ayrıca bu sınıfa ait bazı fonksiyonları da görebiliriz.
‫F zamanlayıcı yöneticisine ait tüm farklı işlevlerle ilgileniyorsanız, bunlar arasında
‫gezinin.
‫Böylece bu başlık dosyasını kulenin üst kısmına, diğer içeriklerin hemen altına dahil edebiliriz.
‫Şimdi bu başlık dosyasını dahil ettiğimize göre, artık dünya zamanlayıcı yöneticisine erişimimiz
‫var ve ilgilendiğimiz fonksiyonun adı set timer.
‫Şimdi get world timer manager basitçe bir F timer manager döndürür, bir işaretçi döndürmez.
‫Bu yüzden nokta yerine nokta kullanacağız.
‫Ok ve zamanlayıcıyı ayarla diyeceğiz.
‫Şimdi set timer'ın çeşitli versiyonları veya fonksiyon aşırı yükleri vardır.
‫Şimdi kodda, her bir aşırı yüklemenin üzerinden geçmemizi ve bu fonksiyonun farklı versiyonlarını görmemizi sağlayan bu
‫açılır pencere var.
‫Ve ilk olarak ilgilendiğim sürüm bir F zamanlayıcı tutamacını alır ve H Kulesi'nde bildirdiğimiz
‫ateş hızı zamanlayıcı tutamacımızı kullanacağız.
‫Şimdi özel fonksiyon yüklememiz için bir sonraki parametre, tıpkı bind axis ve bind action'da olduğu gibi
‫kullanıcı sınıfı olacaktır.
‫Bu, içinde çalıştığımız ve fonksiyonunu bağlayacağımız sınıftır.
‫Şimdi sırada, A kulesi kontrol ateşleme koşulumuz olacak olan geri arama işlevi, az önce oluşturduğumuz
‫işlev olacak.
‫Şimdi operatörün adresine ihtiyacımız var çünkü set timer fonksiyon adresini alır.
‫Şimdi bir sonraki parametre, oran için bir floattır ve bu, geri çağrımızın çağrılmasından önce ne kadar zaman geçmesi
‫gerektiği olacaktır.
‫Bu bizim ateş oranımız olacak.
‫Ve son parametre, bu zamanlayıcının döngüye girip girmeyeceğini belirten bir boolean'dır.
‫Şimdi geri arama fonksiyonumuzun her 2 saniyede bir çağrılmasını istiyorum, bu yüzden bu zamanlayıcının döngü yapmasını istiyorum.
‫Bu yüzden doğru diyeceğim.
‫Eğer yanlışlıkla geçecek olsaydık 2 saniye geçecekti.
‫Fonksiyonumuz çağrılacak ve hepsi bu kadar olacaktı.
‫Ancak döngüye ayarladığımız için, fonksiyonumuz 2 saniye sonra çağrılacak, ardından zamanlayıcı
‫yeniden başlayacak ve iki saniye sonra fonksiyon tekrar çağrılacak ve oyun bitene kadar döngüye
‫devam edecektir.
‫Artık zamanlayıcımıza bağlı bir fonksiyonumuz var ve her 2 saniyede bir çağrılacak şekilde ayarlandı.
‫Böylece zamanlayıcımıza bir fonksiyon bağladık ve bu fonksiyon her 2 saniyede bir çağrılacak.
‫Ancak bu işlevin gerçekten çağrıldığına dair bir tür kanıt veya onay istiyoruz.
‫Kule sınıfındaki meydan okumanız için yeni geri arama işlevimize gidin, yangın koşulunu kontrol edin.
‫Tankın ateş menzilinde olduğundan emin olun.
‫Kule ile tank arasındaki mesafeyi kontrol edeceksiniz.
‫Ve bunu nasıl yapacağımızı biliyoruz çünkü bunu zaten tick fonksiyonunda yapıyoruz.
‫Bu nedenle, kendinize hatırlatmak için tik fonksiyonuna bakmanız ve bunun nasıl yapıldığını görmeniz gerekebilir,
‫şimdi bu mesafeyi kontrol edin, ateş menzilinde olduğumuzdan emin olun ve eğer öyleysek, ateş fonksiyonunu çağırın, videoyu
‫duraklatın ve bunu şimdi uygulayın.
‫Tamam.
‫Kule CP'ye geri döndüm ve bu mesafeyi nasıl aldığımı ve ateş menzilinde olup olmadığını kontrol ettiğimi kendime
‫hatırlatmak için tik fonksiyonuna kadar ilerleyeceğim.
‫Şimdi bu kodu burada tekrar kullanabilir ve yangın koşulunu kontrol edebiliriz.
‫Şimdi kodu yeniden kullanmak çok verimli değildir, bu yüzden bunu yeniden düzenlemeyi düşünebiliriz, ancak önce bunun çalıştığından
‫emin olalım, böylece önce geçerli olduğundan emin olmak için tank işaretçimizi kontrol edebiliriz.
‫Bunu burada yapacağım ve yangın durumunu kontrol edeceğim.
‫If tank diyeceğim ve eğer tank geçerliyse, yapabileceğimiz bir sonraki şey, f vector
‫dist fonksiyonuyla hesaplanan bu değer olan mesafeyi elde etmektir.
‫Şimdi bunu alacağım ve yangın kontrol koşullarında buraya yerleştireceğim.
‫Şimdi yapacağımız bir sonraki şey, mesafenin ateş menziline eşit veya daha az olup olmadığını kontrol etmektir.
‫Burada yapacağımız şey bu.
‫Mesafenin ateş menziline eşit veya daha az olup olmadığını söyleyeceğiz ve eğer durum buysa, o zaman basitçe ateş fonksiyonunu
‫çağırabiliriz.
‫Bu yüzden yangın ihbarı yapacağız ve bu kadar basit.
‫Şimdi devam edip bunu derleyelim ve editöre geri dönüp play tuşuna basacağım ve ateş menziline
‫gireceğim.
‫Ve kulelerimizin namlunun ucunda hata ayıklama küreleri çizdiğini görebiliyorum, böylece ateşleme
‫işlevinin çağrıldığını ve tank için olduğu gibi kule için de aynı şekilde çalıştığını görebiliriz.
‫Yani bu harika.
‫Bu bize zamanlayıcımızın çalıştığını ve geri arama işlevimizin her 2 saniyede bir çağrıldığını kanıtlıyor.
‫Tamam, şimdi kontrol, yangın koşulunda her 2 saniyede bir çağrılan bu yangın fonksiyonuna sahibiz.
‫Aralıkta olup olmadığımızı gördüğümüz bu işlevselliğe sahibiz ve aynı şeyi burada tik fonksiyonunda
‫da yapıyoruz.
‫Yani bu, yeniden düzenlemek için mükemmel bir fırsat.
‫Tankla menzil içindeysek bize bir boolean döndürecek bir tür fonksiyon oluşturabiliriz.
‫Öyleyse neden devam edip bunu hızlıca boğa döndüren bir fonksiyona dönüştürmüyoruz?
‫H Kulesi'nde özel bir fonksiyon oluşturalım.
‫Bool döndürecek ve yangın aralığında diyeceğiz.
‫Şimdi bu basit bir oyun ve kulemiz sadece tankın menzilinde olacak.
‫Yani bu belirsiz değil çünkü kulenin menzilde olup olmadığını kontrol etmek isteyeceği başka
‫bir şey yok, eğer bu kulenin mesafeyi kontrol etmek isteyeceği başka şeylerin olduğu daha karmaşık bir
‫oyun olsaydı, o zaman bunu biraz farklı adlandırabilirdik, ancak buna basitçe ateş
‫menzilinde diyebiliriz.
‫Ve benim yapacağım şey bunu Tower'da uygulamak olacak.
‫Şimdi devam edelim ve fonksiyon gövdesini oluşturalım.
‫İşlev adını düzeltmeden önce bu kuleye ihtiyacımız olacak.
‫Burada yapacağımız şey de temelde aynı mesafe kontrolüdür.
‫Bu yüzden ilk olarak bir if kontrolü ile tankın geçerli olup olmadığını kontrol edeceğiz.
‫Şimdi eğer öyleyse, bu mesafeyi alabiliriz, böylece bu satırı kopyalayabilir ve tam burada yerel mesafe float'ımızı oluşturabilir
‫ve bu mesafeyi yangın aralığına göre kontrol edebiliriz, böylece mesafenin yangın aralığından küçük veya eşit
‫olup olmadığını söyleyebiliriz ve durum buysa, basitçe true'yu döndürebiliriz.
‫Bu fonksiyon true değerini döndürebilir.
‫Ve şimdi, aralık içindeysek true değerini döndürecek bir fonksiyonumuz var.
‫Şimdi, if deyiminde bu return true satırına geldiğimiz anda, fonksiyon geri dönecektir.
‫Fonksiyondan atlayacağız.
‫Yani bu if ifadesinden sonra başka bir şey çalışmayacaktır.
‫Yani yapabileceğimiz şey, in fire range fonksiyonumuzun en sonunda false değerini döndürebiliriz çünkü eğer
‫return true değerine ulaşırsak, aslında burada return false satırına asla ulaşamayız.
‫Fonksiyondan erken çıkacağız.
‫Ancak menzil içinde değilsek, buradaki mesafe kontrolü başarısız olursa, o zaman asla true dönüşüne ulaşamayız.
‫Ve fonksiyonun sonuna ulaşıp false değerini döndüreceğiz.
‫Dolayısıyla bu fonksiyon, aralıkta olup olmadığımıza bağlı olarak true veya false döndürür ve iki fonksiyonumuzda
‫tekrarlanan kod kullanmak yerine bunu kullanabiliriz.
‫Örneğin kene işaretinde, tareti döndürmeden önce menzilde olup olmadığımızı görmek için yalnızca tek bir kontrole ihtiyacımız
‫var.
‫Yani yapabileceğimiz şey, ateş menzilindeyse diyebiliriz ve bu true döndürürse, ateş menzilindeyizdir, böylece tareti
‫döndür diyebiliriz.
‫Bu yüzden bunu if deyiminin içine koyacağız.
‫Ve artık tüm bu kodlar gereksiz olduğundan basitçe silebiliriz.
‫Ve şimdi bu daha önce sahip olduğumuzdan çok daha temiz görünüyor.
‫Sonra buraya gelip yangın durumunu kontrol edebilir ve aynı şeyi yapabiliriz.
‫Tüm bunlar yerine, sadece ateş menzilinde olup olmadığını kontrol edebiliriz.
‫Ve eğer öyleyse, basitçe yangını çağırabiliriz.
‫Şimdi tüm bu kodu, in fire range fonksiyonumuzda yapılan bir kontrole başarılı bir şekilde yeniden düzenledik.
‫Şimdi devam edip bunu tekrar derleyelim ve her şeyin beklendiği gibi çalıştığından emin olmak için
‫hızlıca test edelim.
‫Şimdi gidip play tuşuna basacağız ve ateş menziline gireceğiz.
‫Ve tabii ki ateş menzilindeyiz ve doğru çalışıyor.
‫Özetle, bir zamanlayıcı oluşturduk ve her 2 saniyede bir kule sınıfındaki yangın fonksiyonunu çağırıyoruz.
‫Şimdi Tank'ın menzilde olup olmadığını da kontrol ediyoruz.
‫Yani ateşleme fonksiyonunu sadece tank ateşleme mesafesi içindeyse her 2 saniyede bir çağırıyoruz.
‫Ayrıca bu mesafe kontrolünü iki farklı işlevde kullandığımızı gördük.
‫Bu yüzden bunu kendi fonksiyonuna dönüştürdük ve aralıkta olup olmadığımızı kontrol etmek için bunu çağırıyoruz.
‫Artık kule sınıfında çağrılan bir yangın fonksiyonumuz var.
‫Yapılacak bir sonraki şey, ateş fonksiyonumuzla mermileri gerçekten ortaya çıkarmaya başlamaktır.
‫Bir sonraki videoda bu konu hakkında konuşacağız.
‫Yakında görüşürüz.