‫Tekrar hoş geldiniz.
‫Şimdi bu videoda, hit olaylar hakkında konuşacağız.
‫Merminin bir şeye çarptığını tespit etmek istiyoruz ve bu şekilde mermiyi yok etmek gibi
‫bir tepki verebiliriz.
‫Daha sonra hasar verme, patlama etkisi yaratma ve bunun gibi şeylerle ilgileneceğiz.
‫Şimdi biraz da hit etkinliklerden bahsedelim.
‫Mermimizin bir ağ bileşeni vardır.
‫Türü statik örgü bileşenidir ve statik örgü bileşeni uzun bir sınıf hiyerarşisinde bir sınıftır
‫ve unreal motor sistemi ebeveynlerinden biri ilkel bileşendir.
‫İşte size ilkel bileşen için dokümantasyon sayfası.
‫İlkel bileşenlerin, genellikle işlenecek veya çarpışma verisi olarak kullanılacak bir tür geometri içeren
‫veya üreten bileşenler olarak görüldüğünü söylüyor.
‫Yani bunlar temelde bazı ek özelliklere sahip sahne bileşenleridir.
‫Ve aşağı kaydırıp hiyerarşiye bakarsanız, bileşen gördüğünüzü ve bundan türetilmiş ilkel
‫bileşen olduğunu göreceksiniz ve aşağı kaydırmaya devam edebilir ve sizden türeyen diğer tüm sınıfları
‫görebilirsiniz.
‫İlkel bileşen.
‫Bunu belirtmemizin nedeni, statik örgü bileşeninizin bu özellikleri ilkel bileşeninizden
‫miras alması ve ilkel bileşeninizin isabet olayları oluşturma yeteneğine sahip olmasıdır.
‫Şimdi, isabetli etkinlikler oluşturmakla neyi kastediyoruz?
‫Diyelim ki dünyamızda sağdaki dikdörtgenle temsil edilen bir geometri var
‫ve soldaki daire ile temsil edilen statik ağ bileşenine sahip bir nesnemiz var.
‫Şimdi, statik örgü bileşenine sahip bu nesne bloğa doğru hareket ediyorsa, bu bileşen isabet olaylarını
‫işlemek üzere ayarlanmışsa, o bloğa çarpar çarpmaz isabet olayı üretilecektir.
‫Şimdi bir çarpışma olayı, çarpılan bileşen de dahil olmak üzere bu çarpışmayla ilgili bazı veriler üretecektir.
‫Yani buradaki blok statik bir ağ bileşenine sahip olabilir.
‫Çarpışmanın ardından bu bileşene erişebiliriz.
‫Ayrıca vurulan aktöre de erişebiliriz ve head olayı da bir EF vuruş sonucu oluşturur.
‫F isabet sonucu hakkında biraz bilgi edindik ve isabet olayı hakkında, dünyadaki bir konumu temsil
‫eden bir F vektörü olan isabet konumu gibi birçok değişken içerdiğini biliyoruz.
‫Yani mermi ağımız var.
‫Bu, statik örgü bileşeni işaretçisi türünde bir değişkendir.
‫Şimdi bu statik örgü bileşeni dünyada bir şeye çarptığında, buna yanıt veren bazı kodlara sahip
‫olmak istiyoruz.
‫Şimdi statik bir örgü bileşeni olarak, ilkel bileşen sınıfından bir şeyler miras alır.
‫Miras aldığı şeylerden biri, bileşen isabetinde adı verilen bir değişkendir.
‫İşte bileşen vuruşuna ilişkin belgeler.
‫Bir Bileşen Katı bir şeye çarptığında veya katı bir şey tarafından vurulduğunda adı verilen bir olay olarak tanımlanır.
‫Şimdi aşağı kaydırdığımızda, bileşen isabetinin F tipi bileşen isabet imzasına sahip olduğunu görüyoruz.
‫Ve buna tıklarsak, F bileşeninin isabet imzasının bir struct olduğunu görürüz.
‫Şimdi geri dönersek, belgelerde bir bileşenin katı bir şeye çarptığında veya katı bir şey tarafından vurulduğunda çağrılan bir olaydan
‫bahsedildiğini görebiliriz.
‫Bu durum, süpürme etkinken ayarlanan konumu kullanarak karakter hareketi veya bir tetikleyiciye doğru yürümek
‫gibi nesnelerin üst üste geldiği olaylar için fizik simülasyonu gibi şeyler nedeniyle meydana gelebilir, bkz.
‫Yani isabetli olaylar ve çakışan olaylar vardır.
‫Biz vurulma olaylarıyla ilgileniyoruz.
‫Dolayısıyla, on component hit'in belgelerde bir hit olayı olarak tanımlandığını ve on component hit'in
‫F component hit signature türünde bir struct olduğunu biliyoruz.
‫Şimdiye kadar çok iyi.
‫Şimdi bileşen isabetindeki bu isabet olayı da çok noktaya yayın delegesi olarak adlandırdığımız bir şeydir.
‫Bir çok noktaya yayın temsilcisinin kendisine bağlı birden fazla işlevi olabilir.
‫Birden fazla sınıfta var olan fonksiyonlar olabilir.
‫Ve bu işlevler bu çok noktaya yayın temsilcisine bağlanırsa, çağrı listesi adı verilen bir
‫şeye eklenirler.
‫Bu, bu vuruş olayı hepsinin çağrılmasını söylediğinde çağrılacak işlevlerin bir listesidir.
‫Bir şey olduğunda bu isabet olayının veya çok noktaya yayın temsilcisinin yayın yaptığını söylüyoruz.
‫Dolayısıyla, mermi ağımızın bir şeye çarpması durumunda, temsilci bu temsilciye bağlı bir
‫işlevi olan tüm sınıflara yayın yapacaktır.
‫Bu yayın gönderilir gönderilmez, tüm bu bağlı işlevler yayına yanıt olarak çağrılır.
‫Bu, Unreal Engine'in çok güçlü bir özelliğidir.
‫Çarpışma gibi bir olayı bekleyen ve delege adı verilen bu şeye sahip olmamızı sağlar.
‫Ve sonra.
‫Ve delege yayınlanacak, sonuçta tüm bağlı işlevler yayına yanıt olarak çağrılacaktır.
‫Bu hassasiyete birden fazla fonksiyon bağlanabildiği için buna çoklu yayın diyoruz.
‫İşlevleri kendisine bağlı olan birden fazla sınıfa yayın yapıyor.
‫Şimdi, bu temsilciye bir işlevi nasıl bağlarız?
‫Bileşen vuruşunda bunu yapmamıza olanak tanıyan bir dizi işlev vardır ve bunlardan biri dinamik ekle
‫olarak adlandırılır.
‫ADD dinamik fonksiyonunu çağırdığımızda, tek yapmamız gereken bunu kullanabileceğimiz kullanıcı nesnesi ve
‫sınıfımızdaki bazı fonksiyonların adresi olan geri arama fonksiyonu olmak üzere iki parametre girmektir.
‫Dolayısıyla, bu bileşene hit delegate üzerinden erişip dinamik ekle işlevini çağırdığımızda, kullanıcı nesnesini
‫ve geri aramayı iletebiliriz.
‫Ve bu, söz konusu geri aramanın isabet olayları çağırma listesine eklenmesiyle sonuçlanacaktır.
‫Şimdi bileşen vurulduğunda, bu delegeyi yayınlayarak ona bağlı tüm fonksiyonların çağrılmasını sağlayacağız.
‫Dolayısıyla, bu delegeye bağlanmak için bir geri arama işlevi oluşturmamız gerekir.
‫İşte mermi ve isabet olayı için bir geri çağırma işlevi istiyoruz.
‫Şimdi burada özel bir fonksiyon oluşturalım ve bu fonksiyon void olsun.
‫Ve ben bunu basitçe vuruş olarak adlandıracağım.
‫Buna istediğimiz adı verebiliriz, ancak on yeterince açıklayıcı görünüyor.
‫Şimdi bu geri arama işlevinin isabet olayları için doğru imzaya sahip olması gerekir, bu da girdi parametre
‫listesinin çok özel olması gerektiği anlamına gelir.
‫İlk giriş parametresi, ilkel bileşen işaretçisi türünde olmalıdır ve buna hit comp adı verilir.
‫Bu, vuruşu yapan bileşendir.
‫Bizim durumumuzda, mermi ağımızın bir şeylere çarpmasını sağlayacağız.
‫Bir sonraki parametre Diğer Aktör adında bir aktör işaretçisidir.
‫Bu vurulan aktör olacak.
‫Bir sonraki giriş parametresi, other comp adı verilen başka bir ilkel bileşen işaretçisidir.
‫Bu da isabet alan diğer bileşen.
‫Yani başka bir aktörün statik örgü bileşenine çarparsak, bu o statik örgü bileşeni olacaktır.
‫Sırada normal dürtü adı verilen bir F vektörü vardır.
‫Eğer fizik simülasyonu yapıyorsak, fizik motoru çarpışmaya tepki olarak bir itki uygulayacaktır.
‫Ve bu f vektörü, bu impulsun yönünü ve büyüklüğünü temsil eder.
‫Ve son olarak, const F hit result türünde bir girdi parametremiz var ve bu bir const referanstır ve hit olarak
‫adlandırılır.
‫Böylece isabet çağrıldığında, isabet hakkında daha fazla bilgi içeren bir isabet sonucuna erişebileceğiz.
‫Şimdi, bunu bir delegeye bağladığımız için, bir U fonksiyonu olması gerekir.
‫Bu yüzden bu işlevi sizinle birlikte işaretleyeceğiz.
‫Şimdi, işlevinize aşina olmalısınız.
‫Tıpkı sizin özelliğiniz gibi, sadece değişkenler yerine fonksiyonlar içindir.
‫Çok önemli.
‫Bunun çalışması için geri çağrımızın bir u fonksiyonu olması gerekir.
‫Şimdi fonksiyonu bildirdik.
‫Devam edelim ve fonksiyonu tanımlayalım.
‫Mermilere geri dönelim.
‫CP Tick fonksiyonumuzun hemen altında bu fonksiyonu tanımlayalım.
‫Buna bir fonksiyon gövdesi vereceğiz ve sınıf adını fonksiyon adından hemen önce koyacağız ve şimdi bir geri arama fonksiyonumuz
‫var.
‫Şimdi bu hit fonksiyonunu temsilcimize bağlamaya hazırız ve bunu begin play'de yapmamız gerekiyor.
‫Bunu yapıcıda yapmak çok erkendir ve bazen temsilcinizin bağlı olmaması gibi sorunlarla karşılaşabilirsiniz.
‫Bu yüzden burada yapacağız ve oynamaya başlayacağız.
‫Yani mermi ağımız var ve sizden miras alınan değişkene erişmek için ok operatörünü kullanacağız.
‫Bileşen isabetinde çağrılan ilkel bileşen ve bileşen isabetinde dinamik ekleme işlevi vardır.
‫Şimdi garip bir şekilde, otomatik tamamlama dinamik eklemek için çalışmayacak, bu nedenle tüm işlev
‫adını yazmanız gerekecek.
‫Bu, bileşen vurulduğunda geri aramamızı bağlamak ve bu işlevi çağırma listesine eklemek için kullanacağımız
‫işlevdir.
‫Şimdi ilk olarak, kullanıcı nesnesine ihtiyacımız var, bu da bu olacak çünkü bu, fonksiyonun
‫bağlandığı sınıftır ve daha sonra, vurulduğunda adresi olacak fonksiyonun adresine ihtiyacımız var.
‫Bu yüzden operatörün adresini ve isabet halinde mermi işlevini kullanacağız.
‫Bu şekilde fonksiyonumuzu bağladık ve isabet olayları oluşturmaya hazırız.
‫Şimdi bunu bir UEE günlüğü ile test edebiliriz ve log temp uyarısını kullanabiliriz.
‫Ve metin için basitçe vuruş diyebiliriz.
‫Ve bunu çıktı günlüğünde görürsek, isabet fonksiyonumuzun çağrıldığını biliriz, bunu derleyelim.
‫Bu yüzden çıktı günlüğünü burada açıyorum.
‫Oynat'a basıp bir mermi ateşleyeceğim ve işte isabet çağrısı ile ilgili günlük mesajım.
‫Yani bu işe yarıyor.
‫Şimdi sadece bir yan not, BP mermisine girersek ve ayrıntılar panelinde mermi ağını seçersek,
‫çarpışma bölümüne gidebiliriz.
‫Ve burada çarpışma ön ayarlarının tüm dinamikleri engelleyecek şekilde ayarlandığını ve çarpışma etkinliğinin
‫bu çarpışma etkin sorgu ve fizik ayarına ayarlandığını görüyoruz.
‫Bu, isabetli etkinlikler için gereklidir.
‫Bir isabet olayı için sorgulama yapabilmemiz gerekiyor.
‫Ve tabii ki fizik, fizik motorunun mermi ağı üzerinde hareket etmesini sağlar.
‫Şimdi on component hit delegate'e on hit fonksiyonumuzla bağlandığımıza ve çalıştığından emin olmak için büyük
‫bir log yerleştirdiğimize göre, on hit fonksiyonumuzdaki bu girdi parametrelerinden bazılarını anlayabilmemiz
‫için bu fonksiyonu biraz daha keşfetmenizi istiyorum.
‫Bu yüzden vuruş fonksiyonuna biraz daha YOUI kaydı ekleyin.
‫Bu girdi parametrelerinden bazılarının isimlerini git name fonksiyonunu kullanarak yazdırmanızı istiyorum.
‫Vurduğumuz bu nesnelerin adlarını görebilmemiz için vurulan comp, diğer aktör ve diğer comp'in adını yazdırmak için bir
‫YUI günlüğü kullanmanızı istiyorum.
‫Yüzde se biçimini kullanacaksanız, E günlük metni makrosunda bunu belirtin.
‫Ve sadece bir hatırlatma olarak, get name dediğimizde, bu dizeyi YUI log makrosuna geçirirken yıldız işaretini
‫kullanmamız gerekir, örneğin, diğer aktörün adını almak için other actor, get name deriz ve C stili
‫dizeyi döndürmek için başına yıldız işaretini koyarız, bu da log'un bir dizeyle biçimlendirdiğinizde
‫beklediği şeydir.
‫Bu yüzden videoyu duraklatın ve isabet eden comp, diğer aktör ve diğer comp'in adlarını yazdırmak için isabet fonksiyonumuzda
‫Yui log'u kullanın.
‫Tamam.
‫Yani burada mermi CP'sinde, burada logunuzu kullanacağım.
‫Bu yüzden Yui log kullandığım bu satırı kopyalayacağım ve dize için hit comp percent s diyeceğim
‫ve metinden hemen sonra hit comp get name diyeceğim ve F dizesinden C stili dizeye dönüştürmek için bu yıldız
‫işaretine ihtiyacım var.
‫Şimdi aynı satırı kullanacağım, sadece metni diğer aktör olarak değiştireceğim ve
‫bu sefer diğer aktör adını vereceğiz.
‫Ve son olarak, diğer bilgisayarın çağrısını yazdıracağım, diğer bilgisayarda isim alacağım.
‫Şimdi derleyelim ve burada düzenleyiciye geri dönelim, devam edip oynat düğmesine basacağım ve bir mermi ateşleyip
‫bunu kontrol edeceğim.
‫Vuruş kompozisyonunun mermi ağı olduğunu görüyoruz.
‫Bunun vurma işlemini yapan bileşen olduğunu söylediğimizi hatırlayın, bu bizim mermi ezmemizdir
‫ve varsayılan alt nesneyi oluştururken bu bileşene atadığımız adı kullandığını göreceksiniz.
‫Yani bu, o ismin kullanıldığı durumlardan biri.
‫Şimdi diğer aktör kusuru alt çizgi sıfır yazdığını göreceksiniz.
‫Bunun nedeni, kusur olan bu statik ağ aktörünün kusur alt çizgi sıfır adına sahip olmasıdır.
‫Bazen motor, aktörler ve bileşenler için dahili adının sonuna bir sayı yerleştirir ve diğer
‫comp'leri yazdırdığımızda da aynı şeyin olduğunu göreceksiniz.
‫Kusur statik örgü aktörünün bir statik örgü bileşeni vardır ve adı statik örgü bileşeni sıfırdır.
‫Bu da bize isabet halinde geri arama işlevimizdeki girdi parametreleri hakkında biraz daha fazla bilgi verir.
‫Ve bu kullanışlıdır çünkü isabet olayına yanıt olarak bir şey yapmak istersek C++'da bu nesnelere erişebiliriz.
‫Özet olarak, isabet olaylarını ve bunların çok noktaya yayın delegeleri olarak nasıl uygulandığını öğrendik ve bunların nasıl
‫çalıştığını öğrendik.
‫On Hit adında bir fonksiyon oluşturduk ve bu fonksiyonu, mermi ağımızın siz ilkel bileşen sınıfından
‫miras aldığı on component hit delegate'e bağladık.
‫Şimdi mermiyi vurulduğunda yok etmedik, ancak artık bunu kolayca yapabileceğimizi biliyoruz çünkü bu geri
‫arama fonksiyonuna sahibiz ve bu fonksiyona mermiyi yok etmek gibi bir mantık yerleştirebiliriz.
‫Bunu gelecekteki bir videoda ele alacağız.
‫Şimdilik sırtınızı sıvazlayın çünkü bu, Unreal Engine C++'ın şimdiye kadar öğrendiğiniz en karmaşık
‫alanlarından biri.
‫Bir sonraki videoda görüşürüz.