‫Tekrar hoş geldiniz.
‫Şimdi bir oyun modumuz var ve oyunu ne zaman başlatabileceğimizi belirlemek için oyun modunu kullanmak istiyoruz.
‫Şimdi, bazı oyunlarda oyun başladığında başlayan bir gecikme veya geri sayım sayacı vardır.
‫Ve belirli bir süre sonra, oyuncunun karakteri veya bizim durumumuzda tankı dünyada hareket
‫ettirmesine izin verilir.
‫Bu yüzden bu videoda bunu uygulayacağız.
‫Bu, ilk olarak girişi devre dışı bırakmayı içerecek, böylece oyun ilk başladığında hareket edemeyeceğiz ve daha
‫sonra bir zamanlayıcı ayarlayacağız ve belirli bir süre sonra girişi etkinleştirebileceğiz.
‫Şimdi tankları ayarlama oyun moduna geri dönelim ve buraya birkaç şey ekleyelim.
‫İlk olarak, oyun başladığında hareket etmeye başlamadan önce geçmesi gereken süre için bir şamandıra
‫eklemek istiyorum.
‫Bu float'a başlangıç gecikmesi adı verilecek ve bunu üç nokta F olarak başlatacağım, böylece oyuna başlamadan
‫önce 3 saniye beklememiz gerekecek.
‫Şimdi, oyun başlar başlamaz bu zamanlayıcıyı başlatmak istiyorum, yani bu zamanlayıcıyı başlatacak
‫bir fonksiyon istiyorum ve bunu da özel bir fonksiyon yapacağım.
‫Bunu handle game start adında bir void fonksiyon yapacağım.
‫Artık oyun başlangıcını tune tanks oyun modunda uygulayabilirim.
‫Oyuna başlamak için buraya gelin.
‫Şimdi buraya tune tanks oyun modu sınıf adını eklemeyi unutmayacağım ve şimdi bir oyun başlatma işlevim
‫var.
‫Şimdi bunu arayacağınız yer Oyuna Başla olacaktır.
‫Oyunun başlangıcında Oyuna Başla çağrısı yapıldığından.
‫Bu yüzden oyunu idare edeceğim, buradan başlayacağım ve oyunu başlatacağım.
‫Ve burada oyunun başında tankı ve ayar tanklarını, oyuncuyu, kontrolör değişkenlerini
‫ayarladığımız birkaç şey yaptığımız için, bunları oyun başlangıcına taşımak istiyorum.
‫Bu yüzden bunları doğrudan oyun başlangıcına taşıyacağım ve bu şekilde tank ve ayar tankları oyuncu
‫denetleyicisi ayarlanacak çünkü burada oyun başlangıcını ele alıyoruz ve oyuna başlıyoruz.
‫İşte burada, kullanıcı girişini etkinleştirebileceğimiz bir geri sayım sayacı başlatmak istiyorum.
‫Şimdi zamanlayıcıyı başlatmadan önce, girişi devre dışı bırakacağım, böylece tankı henüz hareket ettiremeyiz.
‫Bu da bizim görevimizi gerektirecek.
‫Buraya tune tankları, set player enabled state adlı oyuncu kontrolörü yerleştirdik.
‫Bu da demek oluyor ki, oyuncu kontrolörü olan Tune Tank'ı kullanacağım.
‫Ve eğer tune tank'ın oyuncu kumandasını kullanacaksam, geçerli olduğundan emin olmak iyi bir fikir.
‫Bu yüzden if tune tanks, player, controller diyeceğim ve bu if ifadesinin içine ulaşırsak,
‫tune tanks, player controller'ı alabilir ve set player enabled state'i çağırabilir ve false'u geçirebilirim.
‫Ve bu şekilde tankımız hareket edemeyecek.
‫Kırmızı dalgalı çizgileri görüyorum ve bunun nedeni tankları ayarlamak yerine tank tankları, oyuncu kontrolörü
‫demem.
‫Yani şimdi doğru yazınca hiçbir hata almıyorum.
‫Şimdi bir zamanlayıcı başlatmamız gerekiyor.
‫Artık zamanlayıcıların bir F zamanlayıcı tanıtıcısı kullanmayı içerdiğini biliyoruz ve aslında sınıfa ait bir üye değişkene
‫sahip olmak yerine bir F zamanlayıcı tanıtıcısı oluşturabiliriz.
‫Şimdi devam edip bunu yapacağım ve bu oynatıcıyı etkinleştir zamanlayıcı tanıtıcısı olarak adlandıracağım.
‫Ve şimdi, zamanlayıcımızın geri arama işlevi için bir zamanlayıcı ayarlamamız gerekiyor, set player enabled
‫state kullanmak istiyorum, ancak set player enabled state boolean türünde bir girdi gerektiren bir işlevdir.
‫Şimdi, giriş parametreleri gerektiren bir geri arama kullanarak bir zamanlayıcının nasıl ayarlanacağını görmedik.
‫Bu, zamanlayıcı temsilcisi adı verilen yeni bir kavramı içerecektir.
‫Şimdi Unreal Engine'in zamanlayıcı sistemine bir göz atalım.
‫Yine, zamanlayıcılarımızı yöneten bir dünya zamanlayıcı yöneticisi olduğunu ve bunun bir zamanlayıcı ayarlama işlevi olduğunu biliyoruz.
‫Artık zamanlayıcı ayarlama işlevinin birden fazla aşırı yüklemesi var.
‫Onlardan birini zaten gördük.
‫Şimdi bu fonksiyonun başka bir versiyonundan bahsedeceğim.
‫Ve bu sürüm bir zamanlayıcı tanıtıcısı, bir zamanlayıcı oranı veya geri arama işlevimiz çağrılmadan önce beklememiz gereken
‫bir gecikme süresi gerektirir.
‫Ve doğrudan bir geri arama işlevinin adresini almak yerine, zamanlayıcı temsilcisi adı verilen bir şey
‫alabilir.
‫Bu, bir işlevi doğrudan kendisine bağlayabilen bir nesne oluşturmamızı sağlayan F timer delegate türünde
‫bir yapıdır.
‫Ve zamanlayıcı temsilcileri, giriş parametreleri gerektiren işlevleri bağlayabilir.
‫Şimdi bir EF timer delegate değişkeni oluşturabilir ve f timer delegate'den create you object fonksiyonunu kullanarak
‫bunu başlatabiliriz.
‫Bu, yeni bir zamanlayıcı delegesi oluşturacak ve parantez içine aktardığımız şeye göre onu başlatacaktır.
‫Bu, of olan bir kullanıcı nesnesi alacaktır.
‫Tabii ki, geri arama fonksiyonumuzun bulunduğu sınıf.
‫Daha sonra geri arama fonksiyonunun adresini ve çağrıldığında geri arama fonksiyonumuza aktarılmasını
‫istediğimiz tüm girdi değerlerini alır.
‫Buradan, dünya zamanlayıcı yöneticisinden set timer'ı çağırabilir ve bir zamanlayıcı delegesi alan aşırı yükü kullanabiliriz.
‫Bu aşırı yükleme, zamanlayıcı tanıtıcısının kendisini, zamanlayıcı temsilcisini, oynatma oranını veya geri çağrımızın çağrılacağı
‫gecikmeyi belirleyen bir float ve ardından zamanlayıcımızın döngü yapıp yapmayacağını belirlemek için bir boolean gerektirir,
‫böylece bir F zamanlayıcı temsilcisini nasıl oluşturacağımızı biliriz.
‫Bu yüzden yeni if deyimimizin içindeki handle game start fonksiyonunda bir tane oluşturmanızı istiyorum.
‫Bu yüzden yerel bir f timer delegate oluşturun ve f timer delegate kullanın.
‫Nesnenizi oluşturun.
‫Şimdi bir kullanıcı nesnesi aktarmamız gerekecek ve genellikle bunu kullanıcı nesnesi olarak kullanıyorduk,
‫ancak çağrılmasını istediğimiz işlev oyuncu denetleyicisinde mevcut.
‫Bu nedenle, kullanıcı nesnesi olacak ilk girdi olarak değişken tune tanks oyuncu denetleyicisini geçirin
‫ve geri arama işlevi, özel oyuncu denetleyicimize eklediğimiz işlev olan oyuncu etkin durumunu ayarlayacaktır.
‫Operatörün adresini ve üçüncü girdi olarak değeri aktaracağımızı unutmayın.
‫True, zamanlayıcının sonunda geri çağrımız çağrıldığında set player enabled durumuna geçirilecek
‫olan şey budur.
‫Videoyu durdurun ve bunu şimdi deneyin.
‫Zamanlayıcı tanıtıcımızın hemen altında, yerel bir F zamanlayıcı temsilcisi oluşturacağım ve bu oyuncuya
‫zamanlayıcı temsilcisini etkinleştir diyeceğim.
‫Sorun değil.
‫Eğer adını başka bir şey koysaydınız.
‫Şimdi bunu f timer, delegate kullanarak başlatacağım, nesnenizi oluşturacağım.
‫Ve bu ilk olarak bir kullanıcı nesnesi alacak ve bu bizim tune tanks oyuncu denetleyicimiz olacak.
‫Bu yüzden ilk girdi olarak tank oyuncu kumandasını ayarla diyeceğim.
‫Ve ikincisi için geri arama fonksiyonumuza ihtiyacımız var ve bu bir tune tanks player, controller
‫set player enabled state olacak.
‫Ve unutmamalıyım ki, bu fonksiyon adresi için operatörün adresine ihtiyacım var ve bu geri arama fonksiyonuna
‫aktarılmasını istediğim değer bu şekilde doğru olacak.
‫Gecikme süresinin sonunda, bu geri arama çağrıldığında geri arama işlevine aktarılan değer
‫true olacaktır.
‫Şimdi set timer'ı çağırmaya hazırım, bu da get world timer manager'ı çağırmam gerektiği anlamına geliyor.
‫Ve sonra oradan zamanlayıcıyı ayarla diyebiliyorum.
‫Ve kullandığımız fonksiyon aşırı yüklemesi ilk olarak bir zamanlayıcı tanıtıcısı alır ve bu, oyuncu etkinleştirme zamanlayıcı
‫tanıtıcısı olacaktır.
‫İçeri aktaracağım bir sonraki girdi temsilci olacak.
‫Yani bu oyuncu etkinleştirme, zamanlayıcı temsilcisi olacak.
‫Sıradaki.
‫Gecikme süremize ihtiyacımız var ve bu da az önce oluşturduğumuz float olan başlangıç gecikmesi olacak.
‫Sırada başlangıç gecikmesi var.
‫Ve son olarak, bu zamanlayıcının döngüye girmesini istemiyorum, bu yüzden döngü davranışı elde etmemek için false değerini
‫geçeceğim.
‫Şimdi devam edeceğim ve güzel görünmesi için bu girdileri girintileyeceğim.
‫Ve şimdi yeni timer delegemizi kullanarak set timer'ı çağırıyoruz.
‫Ve bu gecikme süresinin sonunda, başlangıç gecikmesi 3 saniye olduğundan ve zamanlayıcımızı ayarlamadan önce set
‫player enabled state'i false değerini girerek çağırdığımızdan, geri arama fonksiyonumuz set player enabled
‫state'in true değeriyle çağrılmasını sağlamalıyız.
‫Oynat tuşuna bastığımızda, bu üç saniyelik gecikme sona erene kadar hareket edememeliyiz.
‫Şimdi bunu derleyelim ve nasıl çalıştığını görelim.
‫Şimdi gidip oynat tuşuna basacağım ve hareket etmeye çalışıyorum ama yapamıyorum.
‫Ve 3 saniye sonra aniden hareket edebiliyorum.
‫Ayrıca şuna da bir bakın.
‫İmlecimin artı işareti olduğuna dikkat edin.
‫Ekranda görmek zor olabilir, ancak ekranınızda gayet iyi görebilmeniz gerekir.
‫Bu da tanklarıma nişan almamı ve onları kontrol etmemi çok daha kolay hale getiriyor.
‫Taret dönüşü.
‫Mükemmel.
‫Özetle, oyun modu için bir handle game start fonksiyonu oluşturduk ve bunu çağırıp oyuna
‫başlıyoruz.
‫Ayrıca, oyuncu denetleyicisindeki set player enabled state fonksiyonumuzu bağladığımız bir timer delegate kullanarak bir zamanlayıcı
‫ayarladık.
‫Bu, zamanlayıcımız için giriş parametrelerini alan bir işlev geri çağrısına sahip olmamızı sağladı ve bunu oyun başladığında üç
‫saniyelik bir gecikmeden sonra kullanıcı girişini etkinleştirmek için kullanıyoruz.
‫Şimdi, eğer girişin etkin olmadığını bildiren bir tür görsel ipucu olmasaydı, bu bir oyuncu
‫için sinir bozucu olabilirdi.
‫Ekranda geri sayım gibi bir şey.
‫Bu yüzden gelecek videolarda bununla ilgileneceğiz.
‫Ama şimdilik, tebrikler.
‫Artık girdi parametreleri alan bir fonksiyonu bir zamanlayıcı temsilcisine nasıl bağlayacağınızı biliyorsunuz.
‫Bir sonraki videoda görüşürüz.