‫Merhaba ve tekrar hoş geldiniz.
‫Bu videoda tankımızı nasıl hızlandırabileceğimizden bahsedeceğiz.
‫Tankımızın tam olarak ne kadar hızlı hareket ettiğini kontrol etmek istiyoruz.
‫Ve şu anda sadece bu delta konum vektörünü add act'e, yerel bir ofsete aktarıyoruz ve tankın ne kadar
‫hızlı hareket ettiği konusunda hiçbir kontrolümüz yok.
‫Aslında oldukça yavaş ilerliyor.
‫Bu yüzden hızı kontrol etmek için kullanabileceğimiz bir hız değişkeni oluşturacağız.
‫Ayrıca, oyunumuz kareden kareye kare hızını değiştirdiği için oyunumuzun kare hızını da dikkate
‫alacağız.
‫Aslında tutarlı bir hareket elde edemiyoruz.
‫Bu kare hızını hesaba katmak için Delta Süresi adı verilen bir şeyden bahsedeceğiz.
‫Burada editördeyiz ve eğer oynat tuşuna basıp tankı hareket ettirmeye başlarsam, bu gerçekten
‫fark edebileceğiniz bir şey değil.
‫Ancak tankımız kareden kareye tutarlı bir hızda hareket etmiyor.
‫Bunun nedeni, kare hızımızın değişmesi ve görüntü alanının sol üst köşesinde küçük bir açılır menü
‫bulunmasıdır.
‫Buna tıklarsam, DPS'yi gösterin yanında bir onay kutusu var PES, saniye başına kare anlamına gelir.
‫Bunu işaretlersem, sağ üstte saniye başına kare sayımı görüyorum.
‫Ve bunun hemen altında, son kareden bu yana kaç milisaniye geçti?
‫Ve bu değerler kareden kareye değişir.
‫Oynat tuşuna basarsam kaçırmış olabilirsiniz ama kare hızı düştü ve sonra tekrar yükseldi
‫çünkü oyunun o başlangıç aşamasında pek çok şey oluyordu.
‫Tüm aktörler başlangıçtaki oyun işlevlerini çağırıyorlardı ve dünya için bazı sahne arkası kurulumları
‫vardı.
‫Şimdi, oyunu oynamaya başlarsam, aldığım 120 uygulama, 120 civarında seyretmesine rağmen
‫kareden kareye değişiyor.
‫Bunun tutarsız harekete neden olmasının nedeni, kare hızı düştükçe bu tik güncellemelerinin
‫daha az çağrılmasıdır.
‫Ve eğer bu tankı her karede aynı miktarda hareket ettiriyorsak, o zaman bu tutarlı hareketi elde etmek için
‫kare hızının tutarlı kalmasına güveniyoruz demektir.
‫Ve oyun daha karmaşık hale geldiğinde, kare hızı değişimleri daha da kötüleşecek.
‫Bu nedenle, Delta Zamanı adı verilen bir şey kullanarak bunu ayarladığımızdan emin olmamız gerekir.
‫Peki bu gizemli Delta zamanı nedir?
‫Diyelim ki burada 0 saniyeden başlayan ve zaman ilerledikçe artan bir zaman çizelgemiz var.
‫Şimdi, zaman ilerledikçe tik atıyor, bu da tik fonksiyonunun çağrıldığı anlamına geliyor.
‫Ancak tik fonksiyonunun çok tutarlı olmadığına dikkat edin.
‫Bazen çok hızlı çağrılır, bazen de daha seyrek çağrılır.
‫Bunun nedeni, bilgisayarınızın kare bazında hesaplamalar yapması gerekmesidir ve bazen bu hesaplamalar
‫bilgisayarınızdan daha fazla kaynak alır ve bu da kare hızımızı yavaşlatabilir.
‫Şimdi, tick fonksiyonunda sahip olduğumuz bu delta zaman değişkeni, son kareden
‫bu yana geçen süredir.
‫Yani burada 0 olabilir. 1 saniye.
‫Bu gerçekten CPU kullanımına ve bunun nasıl değiştiğine bağlıdır.
‫Dolayısıyla CPU kullanımınız değiştikçe delta süreniz de değişecektir.
‫Bu da saniyede daha fazla kare çektiğimizde daha fazla işlev çağrısı yapacağımız anlamına geliyor.
‫Şimdi eğer yerel ofset aktörünü daha sık çağırırsak, göletimizin daha hızlı hareket ettiğini ve tutarlı bir
‫hareket oranına sahip olmadığını göreceğiz.
‫Bu yüzden çözüm, hareketi Delta zamanına göre ölçeklendirmektir.
‫Yani Delta zamanı 0 ise. 1 ve havuzumuzu saniyede on santimetre hareket ettirmek
‫istiyoruz, bu hareketi 0 ile ölçeklendiriyoruz. 1 saniye bize 0 kare güncelleme süresi için ihtiyacımız olan tam hareket miktarını
‫verir. 1 saniye.
‫Şimdi, daha küçük bir delta zamanına sahip olduğumuz, yani TIC'nin daha sık çağrıldığı bu kısmı
‫düşünün.
‫Diyelim ki buradaki delta zamanı 0. 0 1 saniye.
‫Yani TIC burada on kat daha sık çağrılıyor.
‫Hareketimizi 0 ile ölçeklendirebiliriz. 01 ve bu şekilde havuzumuzu saniyede on santimetre
‫hareket ettireceğiz, 0. 0 1 saniye.
‫Dolayısıyla, TIC çok daha sık çağrıldığı için göleti küçük bir miktar hareket ettiriyoruz.
‫Bunu yapmak, göletimizin kare hızındaki değişikliklerden bağımsız olarak tutarlı bir şekilde hareket etmesini
‫sağlar.
‫VSE koduna geri dönersek, bu sorunla nasıl ilgilenmek istediğimizi düşünelim.
‫Delta konum vektörümüz var ve x değerini değere eşit olarak ayarlıyoruz, ancak değeri Delta zamanına göre ölçeklendirmek
‫istediğimizi biliyoruz.
‫Bu yüzden buraya küçük bir yorum koyacağım ve X eşittir değer çarpı delta zamanı diyeceğim, yani değeri Delta zamanına göre
‫ölçeklendirmek istiyoruz.
‫Şimdi bunu yaptığımızda, değeri çok küçük yapacağız çünkü Delta süresinin kendisi çok küçük bir
‫değerdir, özellikle de kare hızınız çok yüksekse.
‫Bu yüzden bunu da bir şeyle ölçeklendirmemiz gerekecek.
‫Else bir tür hız değişkeni ve tankların hızını kontrol etmek için bu değerin ne olması gerektiğine karar
‫verebiliriz.
‫Burada bize yol gösterecek küçük bir sözde kodumuz var ve şimdi hız için bir değer oluşturarak ve bu delta
‫zaman değerini nasıl elde edebileceğimizi bularak bunu uygulamamız gerekiyor.
‫Şimdi move fonksiyonundan Delta zamanına nasıl erişebileceğimizi konuşalım.
‫Şimdi, Unreal Engine'in Delta zamanına ulaşmak için birden fazla yolu var.
‫Aslında, Delta tabanında sahip olduğumuz tick fonksiyonuna bakarsanız, zaman bir float giriş parametresidir.
‫Yani tik fonksiyonunda çalışıyorsak, Delta zamanına zaten erişimimiz var, ancak tank DHCP'de, hareket fonksiyonumuz
‫bu giriş parametresine sahip değil, ancak gerçek dışı motorun kendi yolları var.
‫Bunun bir yolu, U gameplay statics adlı bir sınıfta bulunan get world delta seconds adlı bir işleve erişmektir.
‫Adından da anlaşılacağı gibi oyun statiği, oyunun programlanmasına yardımcı olan çok sayıda statik fonksiyona sahiptir.
‫Get World Delta seconds, delta zamanını döndürür.
‫Şimdi bir giriş parametresi var.
‫Burada bir dünya bağlamı nesnesi alır.
‫Bunu Unreal Engine'de çok göreceksiniz.
‫Birçok statik fonksiyon bir dünya bağlamı nesnesi gerektirecektir.
‫Dünya, you world türünde bir nesnedir.
‫Bu, oyunumuzun en üst düzey amacıdır.
‫Oyunumuzdaki tüm ilişkili nesneleri içeren haritamızı temsil eder.
‫Artık get world delta seconds gibi statik fonksiyonların hangi dünyada olduğumuz hakkında hiçbir fikri yok.
‫Bu fonksiyona hangi dünyada olduğumuzu söylememiz gerekiyor ki o dünyaya erişebilsin ve delta zaman değerini
‫alabilsin.
‫Şimdi, hangi dünyada olduğumuzu söylemek için, o dünyada var olan bir nesneye bir işaretçi aktarabiliriz.
‫Tank sınıfında çalışırken, anahtar kelime olan this'i geçebiliriz.
‫Bu, C++'da herhangi bir sınıfın içinde kullanabileceğimiz bir anahtar kelimedir.
‫Bu anahtar kelime, içinde çalıştığımız belirli bir nesnenin örneğine bir işaretçidir.
‫Eğer tank sınıfında çalışıyorsak, bu içinde bulunduğumuz tanka bir işaretçidir.
‫Dolayısıyla, bir dünya bağlamı nesnesi gerektiren işlevler genellikle bunu girdi parametresi olarak alabilir, çünkü
‫içinde çalıştığımız tank doğru dünyada mevcuttur.
‫Böylece get world delta seconds hangi dünyada olduğunu bilecek ve bize uygun deltayı getirebilecektir.
‫O dünyanın zamanı geldi.
‫Dolayısıyla, -- sınıfı içinden get world delta seconds çağrısı yapıyorsak, bunu dünya bağlamı
‫nesnesi olarak aktaracağız.
‫Artık tankların hızını kontrol etmek için ihtiyacınız olan tüm araçlara sahipsiniz.
‫Yapacağınız şey bir hız değişkeni oluşturmak, bunu bir float yapmak ve tank sınıfında
‫özel bir bölüme koymaktır.
‫Şimdi bunu planlara gösterin, böylece geliştirirken ayarlayabiliriz, bu da ona bir you özelliği
‫vereceğiniz ve istediğiniz maruz kalma düzeyine karşılık gelen uygun you özelliği belirticilerini kullanacağınız
‫anlamına gelir.
‫Şimdi MOV işlevinde, yorum olarak yerleştirdiğimiz sözde kod parçasına sahibiz.
‫Yani bunu bir rehber olarak kullanın.
‫Delta konumunu, F vektörünü ve ölçeği alacaksınız.
‫X'e göre delta zamanı.
‫Az önce U oyun istatistiklerini kullanarak delta zamanına nasıl erişebileceğimizi gördük.
‫Ayrıca X'i hız değişkenine göre ölçeklendireceksiniz.
‫Şimdi, oyun istatistiklerinde bir fonksiyon kullandığımız için, oyun istatistiklerine yönelik başlık dosyasını
‫eklemeniz gerekecek.
‫Şimdi size unreal engine belgelerini kullanarak belirli bir sınıf için include'i nasıl bulduğumu birçok
‫kez gösterdim.
‫Bu yüzden sizi Unreal Engine dokümantasyonunda oyun istatistiklerinizi aramaya ve bu başlık dosyasını
‫bulmaya davet ediyorum.
‫Ve eğer bulamazsanız, bu videonun kaynaklarındaki bağlantıyı bulun, bu size oyun istatistikleriniz
‫için belgeleri verecektir, ancak kendi başınıza bulmaya çalışın.
‫Önce videoyu duraklatın ve şimdi tank hızını kontrol edin.
‫Tamam.
‫Bu yüzden bana yol gösterecek sözde kodum var ve değeri delta zamanına ve hıza göre ölçeklendirmem gerekiyor.
‫Bu yüzden önce hız değişkenimi oluşturacağım.
‫Şimdi H tankına geri dön.
‫İşte hız değişkenini yerleştirebileceğim yer.
‫Ancak, daha önceki bir derste yaptığım alıştırmadan hatırlarsanız, Base Pond sınıfına Speed adında bir
‫float eklemiştim.
‫Şimdi burada temel havuzda hız değişkenine ihtiyacım yok.
‫Bu sadece alıştırmaydı, o yüzden burada buna ihtiyacım yok.
‫Aslında, özellik belirleyicilerini göstermek için oluşturduğum bu diğer 30 ikiliye ihtiyacım yok.
‫Bu yüzden tüm bunları vurgulayacağım ve temel havuz sınıfından sileceğim.
‫Artık onları istemiyorum.
‫Yani gittiler.
‫Şimdi, gölet tankı planında bu hız değişkenine atıfta bulunduğumu da hatırlayabilirsiniz.
‫Bu yüzden BP havuz tankını açacağım.
‫Ve burada olay grafiğinde, bahsettiğim hız değişkeni var.
‫Artık buna ihtiyacım olmadığından, devam edip bu düğümleri sileceğim ve BP gölet tankımı derleyip
‫kaydedeceğim.
‫Tamam.
‫Tüm bunları temizledikten sonra, hız değişkenimi eklemek için tanka geri dönüyorum.
‫Bu da buradaki özel bölümde olacak.
‫Bunu move fonksiyonunun hemen üstüne ekleyeceğim ve speed adında bir float olacak.
‫Şimdi buraya bir başlangıç değeri vereceğim.
‫Sanırım 200 F'yi deneyeceğim ve nasıl çalıştığını göreceğim.
‫Ancak bunu geliştirirken editörde düzenleyebilmek istediğimden, yeni bir özellik makrosu
‫alacak ve bunu örneklerde ve varsayılanda düzenleyebilmek istiyorum.
‫Bu yüzden her yerde düzenleme yapacağım.
‫Şimdi, bunu yapmak zorunda değildiniz, ama buna bir kategori veriyorum.
‫Hareket adında yeni bir kategori oluşturacağım.
‫Şimdi bunu olay grafiğine göstermek isteğe bağlıdır.
‫Olay grafiğinde buna erişmem gerekeceğini düşünmediğim için bunu bekleteceğim.
‫Gerekirse.
‫Gelecekte, bunu blueprint, read, write veya blueprint read only ile açığa çıkarabilir ve bu meta allow private access
‫specify'ı kullanabilirim.
‫Ama şimdilik yapmayacağım.
‫Bu yüzden bir hız değişkenim var ve burada tank DHCP'de değeri alacağım ve hıza göre ölçeklendireceğim.
‫Şimdi yapılacak son şey, değeri delta zamanına göre ölçeklendirmektir, bu da size oyun istatistiklerine ihtiyacım olduğu anlamına gelir.
‫İşte Unreal Engine'in belgeleri.
‫Devam edip oyun istatistiklerini arayacağım ve işte oyun oynanış istatistikleriniz.
‫Bu yüzden sadece include satırına gitmem ve bunu kopyalayıp tank CP'ye geri koymam gerekiyor.
‫Yapıştırabilirim.
‫Artık yeni oyun istatistiklerine erişebildiğime göre, Delta zamanını alabilirim, bu yüzden sizinle çarpacağım.
‫Oynanış statikleri dünya delta saniyelerini alır ve gördüğümüz gibi, bunun bir dünya bağlamı nesnesine ihtiyacı vardır.
‫Açılan pencerede bir dünya bağlamı nesnesi istediğini bile görebilirsiniz.
‫Bu yüzden bunu pas geçeceğim.
‫Şimdi Delta konumları X'i zaman, hız, zaman, delta zamanı değerlerine ayarladığıma göre, bunu derleyeceğim.
‫Yani başarılı bir derlememiz var.
‫Burada editörde BP Pond Tank'a girebiliyorum ve hızım orada.
‫Dünyadaki tank örneğini seçersem, ayrıntılar panelinde hareket için arama yapabilirim ve orada hız var
‫ve istediğim herhangi bir değere ayarlayabilirim.
‫Bunun sesini açıp çalmaya başlarsam, biraz daha hızlı hareket ediyorum.
‫İşte bu, değişkeni planlara açmanın avantajıdır.
‫Deneyebilir ve benim için uygun olan iyi bir hız bulabilirim.
‫Pekâlâ, harika görünüyor.
‫Şimdi FPSO'yu göstermeyi bırakıyorum.
‫Ve şimdi hız değişkenimiz var ve onu değiştirebiliriz.
‫Ve bu değişiklik piyonumun hareketine yansıyacak.
‫Artık tankımızın hareket hızını kontrol ediyoruz ve planlara gösterdiğimiz güzel bir hız
‫değişkenimiz var ve bunu değeriyle bir deney geliştirirken ayarlayabiliriz.
‫Ayrıca Delta zamanını ve hareketimizi Delta zamanına göre ölçeklendirmenin neden önemli olduğunu öğrendik.
‫Bu yüzden kare hızından bağımsızdır, çünkü kare hızı değişiklikleri tankımızla hala pürüzsüz, tutarlı bir hareket elde
‫edecektir.
‫Bölüm planımıza dönüp baktığımızda, ilk maddeyi neredeyse tamamladığımızı görüyoruz.
‫Bir tank yarattık ve bu tank tüm dünyada hareket edebiliyor.
‫İkinci noktamız, WASD klavye hareketi ve fare girişi ile girişi de ele almaktır.
‫W ve SW kısmını hallettik, ancak yine de A ve D tuşlarını kullanabilmemiz gerekiyor ve bunları tankı
‫döndürmek için kullanacağız.
‫Yani gelecek videolarda iyi bir ilerleme kaydediyoruz.
‫Tankı hareket ettirme yeteneğimizi tamamlamaya çalışacağız.
‫Yakında görüşürüz.