‫Merhaba ve tekrar hoş geldiniz.
‫Şimdi tankımızı ileri ve geri hareket ettiriyoruz, ancak tankı gerçekten yönlendirmenin bir yolu yok.
‫Bu videoda, yerel rotasyon adı verilen bir şey kullanarak tankı gerçekten döndürme üzerinde çalışacağız.
‫Bu, aktör yerel ofseti eklemenin rotasyonel analogudur.
‫Şimdi aktör yerel ofsetinin birden fazla giriş parametresi vardı ve diğer üçü isteğe bağlı olduğu için yalnızca
‫ilkini geçirdik.
‫Ancak diğer üçünden biri süpürmeyle ilgiliydi.
‫Rotasyon uygulamasına devam etmeden önce süpürme hakkında biraz tartışacağız.
‫Bu yüzden ADD Actor Local Offset için belgelere geri döndüm.
‫Şimdi bu giriş parametrelerine bir kez daha göz atalım.
‫İkincisi B Sweep olarak adlandırılır ve bir Boolean'dır.
‫Şimdi, biraz daha aşağı kaydırır ve B süpürme için buradaki bilgileri okursak, yol boyunca çakışmaları
‫tetikleyerek ve bir şey tarafından engellenirse hedefin yakınında durarak hedef konuma süpürüp süpürmeyeceğimizi
‫söylüyor.
‫Ayrıca, yalnızca kök bileşenin süpürüldüğünü ve çarpışmayı engelleme açısından kontrol edildiğini de belirtmektedir.
‫Çocuk bileşenler süpürülmeden hareket eder.
‫Çarpışma kapalıysa, bunun bir etkisi yoktur.
‫Şimdi bunun oyun programlamada ne anlama geldiğinden bahsedelim, süpürme etkinleştirildiği sürece süpürme motor tarafından
‫yapılan bir tekniktir.
‫Bu daire ile temsil edilen küre gibi hareketli bir nesnemiz varsa, bu küre hareket ederken her karede
‫motor tarama kontrolleri gerçekleştirir.
‫Bu, bu belirli kare için bu hareketin iki nesne arasında bir çakışmaya neden olup olmayacağını kontrol ettiği
‫anlamına gelir.
‫Burada bu dikdörtgenle temsil edilen bir blok var.
‫Şimdi bunların dünyadaki tek iki nesne olduğunu düşünelim.
‫Bu nedenle, küre nesneye doğru hareket ederken süpürme etkinleştirildiğinde, motor bu iki nesnenin üst
‫üste gelip gelmediğini kontrol ediyor.
‫Şimdi, küre hareket etmeye devam ederken, diyelim ki bu karelerden biri sırasında küre diğer nesnenin
‫üzerine binecek şekilde hareket etmiş olsun.
‫Şimdi, süpürme özelliğinin etkinleştirilmesinin yaptığı şey, motorun bu çakışmayı algılaması ve o belirli
‫kare için o küreyi geri taşımasıdır, böylece aslında nesneye asla girmez.
‫Şimdi kürenin nesnenin içine girdiğini asla göremiyoruz.
‫Motor, hareket gerçekten uygulanmadan önce bu çakışmayı yakalar.
‫Sonuç olarak kürenin üst üste binmeden hemen önce durduğunu görüyoruz.
‫Örneğin bu dikdörtgen bir duvar olsaydı, küre duvarın yüzeyinde duracaktı.
‫Süpürmenin bizim için başardığı şey budur.
‫Belgeler, çarpışma kapalıysa bunun bir etkisi olmadığını söylüyor.
‫Bu yüzden süpürmenin çalışması için çarpışmanın etkinleştirilmesi gerekir.
‫Burada, move fonksiyonundaki tank CP'de, aktör yerel ofsetini eklemek için çağrımız var ve eğer istersek
‫buraya başka bir girdi parametresi girebiliriz, ikincisi süpürme boolean'ıdır, bu yüzden buraya true
‫girebiliriz.
‫Şimdi bunu derleyelim ve süpürmeyi etkinleştirmenin etkisini görelim.
‫Şimdi oynat tuşuna basıp örneğin bir duvarın içinden geçmeye çalışırsak, duvarın içinden geçtiğimizi
‫göreceğiz.
‫Yani burada bir şeyler yolunda gitmiyor.
‫Şimdi BP gölet tankı için rota bileşeninin ne olduğuna bakalım.
‫Rota için kapsül bileşenini kullandığımızı hatırlayın.
‫Yani BP havuz tankında seçilen kapsül bileşenleri ile.
‫Ayrıntılar paneline gidelim ve aşağı kaydıralım; burada Çarpışma adlı bir bölüm göreceğiz.
‫Ve burada Çarpışma Ön Ayarlarını görüyoruz ve bir açılır menü var.
‫O zaman bunu genişletelim.
‫Şimdi, Çarpışma Ön Ayarları herhangi bir sayıda seçeneğe ayarlanabilir ve varsayılan olarak tüm dinamiklerin üst üste geldiğini görürüz.
‫Şimdi, kullandığınız Unreal Engine sürümüne bağlı olarak.
‫Burada başka bir şey görebilirsiniz ama bunu değiştirebiliriz.
‫Açılır menüyü seçer ve tüm dinamikleri engelle seçeneğini belirlersek, aşağıdaki gri seçenekler değişir.
‫Tüm dinamiklerin üst üste bindiğini ve burada üç sütun onay kutusu gördüğümüzü hatırlayın.
‫Bunlar çarpışma yanıtlarıdır ve soldaki sütun çarpışma nesnesi türlerinin bir listesini gösterir.
‫Yani herhangi bir bileşenin kendi çarpışma nesnesi türü vardır.
‫Kapsül için nesne türünün dünya dinamiği olarak ayarlandığını görebiliyoruz.
‫Çarpışma ön ayarlarını tüm dinamikleri engelleyecek şekilde değiştirdiğimizde, çarpışma yanıtlarının
‫tüm diğer çarpışma nesnesi türlerine yanıt olarak engellenmek üzere kontrol edildiğini göreceksiniz.
‫Şimdi oyuna basalım ve bir şeylerin içinden geçmeye çalıştığımızda ne olduğunu görelim.
‫Göreceksiniz ki, örtüşmenin hemen dışında duruyoruz.
‫Diğer göletler.
‫Şimdi, tankı duvarla örtüşecek ve diğer havuzların etrafından dolaşacak şekilde hareket ettirirsem.
‫Şimdi, oynat tuşuna bastığımda duvarı da bloke ediyorum.
‫Yani bu çarpışma ön ayar bloğu, tüm dinamik çarpışma tepkisini diğer tüm nesne türlerini engelleyecek şekilde ayarlar.
‫Ve belirli bir bileşenin çarpışma nesnesi türünü her zaman bileşenler panelinde seçip ayrıntılar
‫panelindeki çarpışma bölümüne kaydırarak ve Çarpışma Ön Ayarları için açılır menüyü açarak görebilirsiniz.
‫Temel ağ seçili ve nesne türü dünya dinamiği ve tümünü engelle olarak ayarlanmış.
‫Şimdi kapsül comp için çarpışma ön ayarlarımızı tüm dinamikleri engelleyecek şekilde ayarladığımızdan süpürmenin çalıştığını
‫görüyoruz.
‫Ve belgelerde sadece kök bileşenin süpürüldüğünü ve çarpışmayı engellemek için kontrol edildiğini gördük.
‫Bu yüzden diğer bileşenlerin neye ayarlandığı gerçekten önemli değildir.
‫Sadece kök bileşenin bir şeyi engelleyip engellemediğini kontrol ediyoruz.
‫Şimdi, bazı öğrencilerin takıldığı bir konu, kapsülü tüm dinamikleri engelleyecek şekilde ayarladıkları
‫anda hareket edememeleridir.
‫Bunun bir nedeni kapsülünüzün zeminle örtüşüyor olması olabilir.
‫Kapsül zeminle örtüşüyorsa, hareket edemezsiniz çünkü kapsül bileşeni engellemek
‫üzere ayarlandığı bir şeyle örtüşüyorsa motor tankınızın hareket etmesine izin vermez.
‫Bunun için kolay bir çözüm, kapsülünüzün zeminle örtüşmediğinden emin olmak olacaktır.
‫Şimdi, BP -- tankınıza girebilir ve kapsülünüzün buradaki tekerleklerin hemen üzerinde olduğundan emin olabilirsiniz.
‫Ortografik görünüme geçeceğim.
‫Ve temel ağımı seçip aşağı indirin.
‫Yani tekerlekler kapsül bileşeninin hemen altındadır.
‫Şimdi eğer ağınız zemindeyse ve kapsül de ağın hemen üzerindeyse.
‫Hareket edebilmelisin.
‫Şimdi oynat tuşuna basacağım ve işte başlıyoruz.
‫Artık süpürme işlemini aradan çıkardığımıza göre, rotasyonu uygulamaya başlamanın zamanı geldi.
‫Proje ayarlarımıza geri dönelim.
‫Bu yüzden proje ayarlarını düzenlemeye gidiyoruz, giriş bölümüne ilerliyoruz ve giriş bölümünde eksen eşlemelerimiz var.
‫Şimdi zaten hallettik.
‫İlerleyin.
‫Sıradaki Turn (Dönüş) ile ilgilenmenin zamanı geldi ve Turn'e D ve A atanmıştır; D'nin ölçeği
‫bir ve A'nın ölçeği negatif birdir.
‫Tankı döndürmek için D ve AX'i kullanmak istiyoruz.
‫Dolayısıyla, bir işlevi dönüş ekseni eşlemesine bağlamak için bağlanacak bir işleve ihtiyacımız vardır.
‫V'nin koduna geri döndük ve tank dosyasına gireceğim, böylece dönüş ekseni eşlemesine bağlanmak için bir işlev
‫oluşturabiliriz.
‫Şimdi bu boş fonksiyonu turn olarak adlandıracağım ve tıpkı move gibi.
‫Bir float giriş parametresine ihtiyaç duyar ve biz bu değeri çağıracağız.
‫Bu fonksiyonu tanımladık, hadi tanımlayalım ve CP'yi tanklayalım ve ben bunu move fonksiyonunun hemen
‫altına koyacağım.
‫Bu yüzden ona bir fonksiyon gövdesi verdim ve fonksiyon adından hemen önce çift iki nokta üst üste ile birlikte sınıf adına
‫ihtiyacım var.
‫Şimdi düzgün bir işlevimiz var.
‫Yapmamız gereken tek şey bu değil.
‫Bu fonksiyonun turn adı verilen eksen eşlemesine bağlı olduğundan emin olmamız gerekir.
‫Bunu oyuncu giriş bileşeni kurulumunda yaparız ve tıpkı ileri hareket ekseni eşlemesinde yaptığımız gibi yaparız.
‫Bu yüzden oyuncu giriş bileşeni diyeceğiz, ok operatörünü kullanacağız ve ekseni bağlayacağız.
‫Şimdi ilk parametre, bir metin makrosuna sarılmış eksen eşleme adı olacaktır.
‫Bu yüzden, eksen eşleme adı bu olduğu için dönüş diyeceğiz.
‫Sırada fonksiyonu bağlayacağımız nesne var.
‫Bunu aktarabiliriz ve son olarak tekrar bağlamak istediğimiz fonksiyonu aktarırız.
‫Operatörün adresine ihtiyacımız var ve bu bir tank dönüşü olacak.
‫Yani bu kadar kolay.
‫Dönüş fonksiyonunu dönüş ekseni eşlemesine bağladık.
‫Geriye kalan tek şey dönüş işlevinde gerçekten bir şeyler yapmaktır.
‫Şimdi, ADD aktör yerel ofsetine sahip olduğumuzu gördük, ancak bu işlevin rotasyonel bir benzeri
‫var ve buna ADD Aktör yerel rotasyonu deniyor.
‫Bunun yaptığı şey, adından da anlaşılacağı gibi aktöre yerel bir rotasyon eklemektir ve fonksiyonun
‫iki farklı versiyonu olduğunu göreceksiniz, biri F rotator alan ve diğeri F quad denilen
‫bir şey alan.
‫Bir F döndürücü alan versiyonu kullanacağız.
‫Buna Delta rotasyonu deniyor.
‫Ve tıpkı ADD Actor Local offset gibi, bir sweep parametresi ve add actor local offset ile aynı diğer iki giriş
‫parametresini de alabilir.
‫Ve bu son üç girdi parametresi, tıpkı aktör yerel ofseti eklemek gibi isteğe bağlıdır.
‫Yani bir F vektörü yerine, bir F döndürücü geçireceğiz.
‫Şimdi burada dönüş fonksiyonuna geri dönersek, bir F rotator oluşturur ve bunu Delta rotation olarak adlandırırsak,
‫F rotator'a sağ tıklayıp tanıma gidersek, rotator'a yönlendirildiğimizi ve burada float türünde üç ortak
‫üye değişken göreceğimizi göreceğiz.
‫Şimdi tıpkı F vektörü gibi F döndürücü de bu üç bileşene sahiptir, sadece X, Y ve Z yerine yunuslama sapması
‫ve yuvarlanma vardır.
‫Şimdi, ilgilendiğimiz bileşen sapmadır.
‫Z ekseni etrafında parantez içinde yukarı eksen etrafında dönüş yazıyor.
‫Ve bu, Z ekseni etrafında dönmeyi önemsediğimiz tek döndürme türüdür.
‫Tankımızı bu şekilde yönlendirebiliriz.
‫Şimdi, size F döndürücü için de birden fazla kurucu olduğunu ve varsayılanın yine
‫F vektöründe olduğu gibi başlatma olmadığını belirteceğim.
‫Bu yüzden tek bir float alanını kullanabiliriz ve tüm bileşenler bu float değerine başlatılır.
‫Üç kayan değerli bir tane var ve diğerlerinden bazılarına göz atıp görebilirsiniz.
‫Şimdi, bir sıfır döndürücü olduğunu ve bu arada bunun statik bir sıfır döndürücü olduğunu da belirteceğim.
‫Bu nedenle tank CP'ye geri dönebilir ve equals F rotator zero rotator zero rotator gibi bir şeyin statik bir üye değişken olduğunu söyleyebiliriz
‫ve kapsam çözümleme operatörü ile sınıf adını belirterek ve bu statik değişkene veya işleve adıyla referans
‫vererek statik üye işlevlere ve değişkenlere bu şekilde erişebilirsiniz.
‫Biz de burada sizinle birlikte bunu yapıyoruz.
‫Oynanış istatistikleri dünya delta saniyelerini statik olarak alır.
‫Fonksiyon, yani bu statik fonksiyona erişebilmemiz için game gameplay statics sınıfının gerçek bir örneğinin
‫var olmasına ihtiyacımız yok.
‫Zaten var.
‫Sıfır döndürücü ve sıfır vektör ile aynı.
‫Bu yüzden rotator h'yi kapatacağım ve bu delta rotasyonumuz var ve sıfır rotator olarak başlatıldı.
‫Şimdi, tıpkı X, Y ve Z'nin F vektörü için sıfırlandığı gibi, eğiminiz ve rolünüz de sıfırlanır.
‫Bu yüzden bileşeninizi değiştirmemiz gerekecek.
‫Tıpkı MOV işlevindeki delta konumumuzda yaptığım gibi, delta dönüşleri için de bir sözde kod oluşturalım.
‫Ya, hepinizin Delta zamanına göre ölçeklendirilmiş değere ayarlanmasını isteyeceğiz, çünkü bu dönüşün kare hızından
‫bağımsız olmasını istiyoruz, ancak bu dönüş hızı olarak adlandırabileceğimiz bir tür dönüş hızına da ihtiyacımız
‫var.
‫Bunu ayarladıktan sonra, evet, aktörü her karede F döndürücüye göre döndürecek olan yerel döndürmeyi
‫ekleyebiliriz ve bu ya değere göre ölçeklendirilecektir.
‫Yani herhangi bir tuşa basmıyorsak sıfır olacak ve DX ve ax tuşlarına basıyorsak bir değere sahip
‫olacaktır.
‫Şimdi bir meydan okumayla karşı karşıyasınız.
‫Bu tıpkı aktör yerel ofsetini eklemek gibi çalışacaktır.
‫Tek fark, artık aktörleri değiştiriyoruz.
‫Aktörü döndürmek için bir tür dönüş hızına ihtiyacımız olduğundan, bir dönüş hızı değişkeni oluşturacak,
‫bunu bir float yapacak ve hız değişkeninin hemen yanındaki özel bölüme koyacaksınız.
‫Bu değişkeni özelliğinizle gösterin ve uygun yeni özellik belirticilerini seçin.
‫Şimdi dönüş fonksiyonunda özellikle Delta rotasyonunu ayarlayacaksınız, bileşeninizi önemsiyoruz
‫değeri dönüş hızı değişkenimizin çarpımına eşit olarak ayarlayın ve ayrıca delta zamanı ile çarpın ve ardından bu f rotator'ı
‫geçerek aktör yerel rotasyonu ekle demeye hazırsınız şimdi ikinci parametre için devam edin ve dönerken
‫süpürmek istediğimizden B süpürme girişi için true değerini geçin, videoyu duraklatın ve şimdi tank için rotasyonu
‫uygulayın.
‫Tamam.
‫Yani bu oldukça basit olacak.
‫Sadece bir dönüş hızı değişkenine ihtiyacımız var.
‫Şimdi hızın hemen altındaki tanka gireceğim ve şamandıra dönüş hızı oluşturacağım.
‫Şimdi muhtemelen bunu bir değere başlatıyorsunuz ve bu sorun değil.
‫Eğer benim seçtiğimden farklıysa, 45 F ile devam edeceğim ve nasıl çalıştığını göreceğim.
‫Ancak bunu planlara açık hale getireceğiz, böylece geliştirirken değiştirebileceğiz.
‫Şimdi bunun her yerde düzenlenebilmesini istiyorum ve bunu hız ile aynı hareket kategorisine koyacağım.
‫Bu yüzden devam edeceğim ve bu mülkünüzü çalacağım ve herhangi bir yere ayarlamak için sağa dönün üzerine buraya yapıştıracağım.
‫Kategori hareketi şimdi ve tank CP.
‫Delta rotasyonu için maya ayarlamaya hazırım.
‫Bu yüzden Delta rotasyonu diyeceğiz.
‫Evet.
‫Ve bunu değer zamanlarına, dönüş hızı zamanlarına, delta zamanına eşit olarak ayarlayacağız.
‫Ve tabii ki U oyun statiği ile Delta zamanı elde edebiliriz, bunu dünya bağlamı nesnesi olarak geçirerek dünya
‫delta saniyelerini alabiliriz.
‫O yüzden bunu şuraya yapıştıracağım.
‫Şimdi sözde kodumun tam olarak uyuşmadığını biliyorum.
‫Yanlış sırada.
‫Delta zamanı burada ortadadır.
‫Bu önemli değildir çünkü üç değeri birlikte çarparken, bunları herhangi bir sırada çarpabilir ve yine de aynı
‫sonucu elde edebilirsiniz.
‫Bunu merak ediyorsanız diye söylüyorum, bu üç değeri farklı bir sırayla çarparsanız matematik
‫yine aynı çıkacaktır.
‫O yüzden bu konuda fazla endişelenmeyin.
‫Şimdi delta rotasyonumuz var.
‫Geriye kalan tek şey add actor local rotation'ı çağırmak ve Delta rotation'ı geçiyoruz ve ikinci girdi için
‫dönerken süpürmeyi etkinleştirmek için true'yu geçeceğiz.
‫Bunu derleyelim.
‫Pekala, şimdi derlendik.
‫Sonraki birkaç videoda sıfır vektör ve sıfır döndürücünün bu satırlarda eksik olduğunu fark edebilirsiniz.
‫Çünkü bunları ilk değerleriyle başlattım ve daha sonra bunların muhtemelen en azından sıfır değerleriyle
‫başlatılması gerektiğini fark ettim.
‫Bu nedenle, bu satırların daha sonra başlatıldığında böyle göründüğünü görürseniz endişelenmeyin, sıfır vektörünüzü ve sıfır
‫döndürücünüzü koruyun ve bunu yakın gelecekteki bir videoda yakaladığımı göreceksiniz.
‫O yüzden endişelenme.
‫Bu başlatma işlemlerini görmüyorsanız, orada olmaları gerekir.
‫Ve editöre geri döndük.
‫Play tuşuna basalım ve D tuşunu kullanacağım ve dönüyoruz ve A tuşu beni diğer yöne döndürüyor ve ayrıca ileri
‫ve geri hareket edebiliyoruz.
‫Artık dönebildiğimize ve ilerleyebildiğimize göre, dünya çapında hareket etme kabiliyetine sahibiz.
‫Bu büyük bir dönüm noktası.
‫Şimdi oldukça yavaş hareket ediyorum, ama sorun değil çünkü tankımı seçebilir ve hareket kategorisini
‫arayabilir ve dönüş hızını 90 gibi daha yüksek bir değere değiştirebilirim.
‫O zaman devam edelim ve oynat tuşuna basalım.
‫Ve bu biraz daha hızlı.
‫Şimdi, eğer bunun hala biraz yavaş olduğunu düşünüyorsanız.
‫Elbette bunları ayarlayabilirsiniz.
‫Bu yüzden tekrar -- tankını seçeceğim.
‫Ve 400 yerine, 800 yapalım.
‫Neden olmasın?
‫90 yerine 120 diyelim.
‫Şimdi, eğer oynat tuşuna basarsam, biraz daha hızlıyım.
‫Bu gerçekten çok iyi görünüyor.
‫Bölüm planına dönecek olursak, artık dünya çapında hareket edebilen bir tankımız var.
‫İlk madde kesinlikle işaretlendi ve WASD hareketini ele alıyoruz.
‫Henüz fare girişini ele almıyoruz, ancak buna da geleceğiz.
‫Ama bu oyunu tamamlamaya bir adım daha yaklaştık.
‫Özet olarak, süpürmenin ne olduğunu ve nesnelerimizin birbirinin içinden geçmemesi için bunu nasıl etkinleştirebileceğimizi
‫öğrendik.
‫Bir aktör yerel rotasyonu ekledik ve bunu ayrıntılarda ayarlayabileceğimiz bir dönüş hızı uygulayarak yaptık.
‫Geliştirmeyi biraz daha kolaylaştırmak için editördeki panel.
‫İyi işti.
‫Şimdi tankı dünyanın dört bir yanına taşıyoruz.
‫Bir sonraki videoda görüşürüz.