‫Hey.
‫Tekrar hoş geldiniz.
‫Artık imlecin altındaki isabet sonucunu almamız gerektiğini biliyoruz.
‫Bu videoda bunun nasıl işlediği ve ne anlama geldiği hakkında biraz daha konuşacağız.
‫Amacımız, isabet sonuçlarını imlecin altına almak ve bu konumu göstermektir ve bunu bir hata ayıklama küresi
‫çizerek yapabiliriz.
‫Bunu nasıl yapacağımızı da öğreneceğiz.
‫Şimdi isabet sonucu denen bir şeyden bahsedelim.
‫Oyunlarda genellikle böyle bir şey yapmak isteyeceksiniz.
‫Uzayda bir noktamız olacak.
‫Bu noktaya başlangıç diyeceğiz ve F vektör tipine sahip olacak ve bir bitiş konumumuz olacak.
‫Bu aynı zamanda F vektör tipi uzayda bir nokta olacaktır.
‫Şimdi başlangıç noktasından bitiş noktasına görünmez bir çizgi çizmek istediğimizi varsayalım.
‫Ve bu çizgiyi çizdiğimiz anda, başlangıç ve bitiş konumları arasında herhangi bir nesne olup olmadığını
‫görmek istiyoruz.
‫Şimdi, eğer varsa, uzayda çizdiğimiz bu çizgi o nesneye çarpacaktır.
‫Yüzeyde, bu gerçekleştiğinde, buna bir vuruş olayı diyoruz.
‫Şimdi, bu şekilde görünmez bir çizgi çizdiğimizde, buna çizgi izleme yapmak denir.
‫Ve bir şeyi vurduğumuzda, bir iz vuruşumuz olduğunu söyleriz.
‫Şimdi, eğer bir şeye çarpar ve bir isabet olayı alırsak, isabet izi isabet sonucu adı verilen bir
‫yapıda bilgi depolar.
‫Türü F isabet sonucudur.
‫Şimdi F vuruş sonuçları yapısı, diğer bilgilerin yanı sıra uzayda bir f vektörü olarak vuruş konumu
‫ve vurduğumuz aktör dahil olmak üzere vuruş olayı hakkında bilgi depolayan değişkenler içerir.
‫Şimdi, bir çizgi izleme gerçekleştirdiğimizde, bunu bir çarpışma kanalı belirleyerek yaparız.
‫Genellikle çizgi izlerinde görünürlük adı verilen kanalı seçeriz.
‫E Çarpışma Kanalı adında bir enum vardır ve bu enum içinde XY görünürlüğü adında bir enum sabiti
‫vardır.
‫Bu, bir çizgi izleme gerçekleştirirken belirttiğimiz parametrelerden biridir.
‫Şimdi, görünürlük kanalını belirtirsek, bu, çarpışma ayarlarında görünürlük kanalını engelleyecek şekilde ayarlanmış
‫nesnelerin isabet olaylarını kaydedeceği anlamına gelir.
‫Görünürlük kanalını engelleyecek şekilde ayarlanmamış hiçbir nesne isabet olayı oluşturmaz.
‫Şimdi imlecin altındaki izleme sonucunu istiyoruz.
‫Ekranın burada olduğunu ve imlecimizin de burada olduğunu düşünün.
‫İmlecimizin ucunda, imlecin altındaki isabet sonucunu almak için fonksiyonu kullandığımızda ekranda
‫bir nokta var.
‫Olan şey, kameramızın dünyadaki bazı nesneleri, örneğin buradaki zemini görmesidir.
‫Ve ekranda imleç konumumuza karşılık gelen noktada kameradan bir çizgi izi gerçekleştiriyoruz
‫ve çizgi izini doğrudan dünyaya çekiyoruz.
‫Ve eğer bir şeye çarparsak, bir isabet olayı oluşturacağız ve bilgileri bir isabet sonucu yapısında saklayacağız.
‫Şimdi bunu nasıl yapabileceğimizi öğrenelim.
‫Burada tank CP'deyim ve yapmak istediğim şey her karede imlecin altında isabet sonucunu almak, bu da tick fonksiyonuna ihtiyacımız
‫olduğu anlamına geliyor.
‫Bu yüzden tekrar tabana geri dönüyoruz ve burada tik fonksiyonumuzu buluyoruz.
‫Şimdi bunu temel piyonda herhangi bir şey için kullanmıyoruz, bu yüzden bu işlevi tıpkı Begin Play'de yaptığımız gibi tank
‫sınıfına taşıyabiliriz.
‫Bu yüzden fonksiyon bildirimini yorumuyla birlikte vurgulayacağım ve kopyalayacağım.
‫Ve bundan sonra tüm bu bölümü, public ve hepsini sileceğim ve sonra Tank H'ye geri döneceğim ve burada
‫public bölümüne tick fonksiyon bildirimini yapıştıracağım.
‫Şimdi bunu temel piyonda kullanmıyoruz, bu yüzden tik fonksiyonunu temel piyondan kaldıracağım.
‫CP Şimdi temel piyondan gitti.
‫Şimdi burada niyet beyan ettik, ancak işlevi tank içinde de tanımlamamız gerekiyor.
‫CP Bunu burada tank DHCP'de, oyuncu giriş bileşeni kurulumunun hemen altında yapacağım.
‫Bu yüzden geçersiz tik diyeceğiz.
‫Delta Zamanı adı verilen bir değişken alır.
‫Ve işte bedenimiz.
‫Şimdi yine, kapsam çözümleme operatörüyle birlikte tick fonksiyonundan hemen önce bir tanka ihtiyacımız var.
‫Ayrıca super tick'i çağırmamız ve Delta zamanında geçmemiz gerekiyor.
‫Yani şimdi tank sınıfında kene var.
‫Yapmak istediğimiz şey, imlecin altındaki isabet sonuçlarını almaktır.
‫Şöyle yapacağız.
‫Kullanacağımız fonksiyon, oyuncu kontrolöründe imleç altında get hit result adında mevcuttur.
‫Bunun hakkında konuşuyorduk.
‫İşte söz dizimi.
‫Bir izleme kanalı alır.
‫Bir izleme kanalı belirlememiz gerektiğini ve görünürlük kullanacağımızı unutmayın.
‫Şimdi iki ek giriş parametremiz var.
‫Birincisi B iz kompleksi adı verilen bir bool.
‫Bunun ne anlama geldiğini birazdan konuşacağız.
‫Üçüncü giriş parametresi ise bir F isabet sonucudur.
‫Şimdi sadece dokümantasyonda bu türü görmek için F hit sonucuna tıklayacağım.
‫Eğer aşağı kaydırırsam, bazı değişkenleri göreceğiz.
‫Bunlardan birinin adı aktör ve açıklamasında Aktörün İz Tarafından Vurulduğu yazıyor.
‫Ayrıca, bu vuruşun bir bloklama çarpışmasının sonucu olup olmadığını belirten bu B bloklama vuruşuna sahibiz.
‫Şimdi, diğer değişkenler arasında darbe noktası gibi şeyler var.
‫Bu, uzayda gerçekten bir şeye çarptığımız yerdir.
‫Öyleyse neden devam edip bu işlevi çağırmayı denemiyoruz?
‫Öncelikle oyuncumuzu, kontrolörümüzü istiyoruz ve burada yaptığımız şey sayesinde oyuna başlıyoruz, oyuncumuz, kontrolörümüz,
‫hakemimiz var.
‫Şimdi yapmamız gereken ilk şey, oyuncu denetleyicisi ref'inin geçerli olup olmadığını kontrol etmektir.
‫Bir if deyimine her zaman bir işaretçi aktarabiliriz.
‫İşaretçinin kendisi bir null işaretçi değilse true değerini döndürür.
‫Eğer null pointer ise, if deyiminde false döndürür ve if deyiminin içine asla
‫ulaşamayız.
‫İşaretçilerimizi kullanmadan önce kontrol etmek ve null olmadıklarından emin olmak her zaman iyi bir fikirdir.
‫Şimdi oyuncumuzu, kontrolör ref'ini alacağız ve fonksiyonu çağırmak için ok operatörünü
‫kullanacağız, imleç altında isabet sonucunu alacağız.
‫Şimdi açılan pencerede üç giriş parametremiz olduğunu görebiliriz.
‫Bunlardan ilki İzleme Kanalıdır.
‫EA Çarpışma Kanalını kullanacağız ve iki iki nokta üst üste yazarsak, EA Çarpışma Kanalı enumundaki tüm
‫farklı enum sabitlerini gösteren bir açılır menü elde ederiz.
‫Görünürlüğü kullanmak istiyoruz, bu yüzden görünürlük kanalını kullandığımızı belirtmek için XY görünürlük yazacağız.
‫Şimdi bir sonraki parametre B Trace Complex olarak adlandırılıyor ve buna false değerini aktaracağız.
‫Şimdi bunun ne anlama geldiğini birkaç dakika içinde tartışacağız.
‫Ama şimdilik false kullanacağız.
‫Şimdi üçüncü parametre için bir isabet sonucuna ihtiyacımız var.
‫Bu, F isabet sonucu türünde bir yapıdır.
‫Şimdi, bunun üzerine gelirseniz, F isabet sonucunun, ve işaretine benzeyen referans operatörü tarafından gösterildiği
‫gibi bir referans olarak aktarıldığını göreceksiniz.
‫Şimdi, genellikle bir şeyi referans olarak ilettiğinizde, bu bir maliyet referansıdır, yani fonksiyon
‫onu değiştiremez.
‫Ancak burada bir F isabet sonucunu sabit olmayan bir referans olarak aktarıyoruz.
‫Bu genellikle fonksiyonun bu giriş parametresini doğrudan değiştirmek için tasarlandığına dair bir ipucudur.
‫İmleç altındaki isabet sonucunu al öğesinin yapacağı şey, isabet sonucundaki bu değişkenleri isabet sonucu hakkındaki bilgilerle
‫doldurmaktır.
‫Bu, bu f hit sonuçlarından birini içeri aktarmamız gerektiği anlamına gelir.
‫Burada, if kontrolünde F hit result türünde bir yerel değişken oluşturacağız.
‫Ve bu isabet sonucunu çağırabiliriz ve bu N'yi üçüncü giriş parametresi olarak geçebiliriz.
‫Şimdi, bu fonksiyonu çağırdıktan sonra, bu isabet sonucu bu hat iziyle ilgili verilerle doldurulacaktır.
‫Örneğin, vurulan aktörü almak için vuruş sonucu nokta aktörüne veya vuruş olayını yaşadığımız uzaydaki noktayı almak
‫için nokta çarpma noktasına erişebiliriz.
‫Yani isabet sonucu, hat izi hakkında bilgi almak için kullanacağımız şeydir.
‫Şimdi genellikle bir çizgi izlemenin sonucunu görebilmek güzeldir.
‫Bir hata ayıklama küresi çizerek bir çizgi izlemenin sonucunu kolayca görselleştirebiliriz.
‫Hata ayıklama küreleri, uzayda çizdiğimiz basit şekillerdir ve bir konumu göstermek için harikadırlar ve bunları
‫hata ayıklarken kullanırız.
‫Aslında bir vardiya oyununda hata ayıklama küreleri kullanmıyoruz.
‫Şimdi bu hata ayıklama kürelerinden birini nasıl çizebileceğimizi görelim.
‫Şimdi burada draw debug sphere adlı bir fonksiyonun dokümantasyonu var.
‫Çizim hata ayıklama yardımcılarında mevcuttur.
‫Böylece bu başlığı kopyalayabilir ve hata ayıklama alanını çağırmak istediğimiz her yere ekleyebiliriz.
‫Şimdi tüm giriş parametrelerine bakın.
‫İlk olarak, bir dünya alır, bu şekilde kürenin hangi dünyada çizileceğini bilir.
‫Kürenin merkezi için bir F vektörünün yanı sıra yarıçap için bir float alır.
‫Bu kürenin segment sayısı için bir N 32 alır.
‫Ne kadar çok segment olursa, küre o kadar yuvarlak bir F rengi alır.
‫Bu şekilde, bu küreyi hangi renkte çizeceğini bilir.
‫Kalıcı çizgiler isteyip istemediğinizi bilmek ister.
‫Başka bir deyişle, çizgiler hemen kaybolmalı mı yoksa devam mı etmeli?
‫Eğer devam ederlerse, kürenin ömrünü bilmek ister.
‫Küreyi çizmeyi ne zaman bırakmalı?
‫Kalıcı çizgiler çizmiyorsanız, örneğin tek bir kare için çizmek istiyorsanız, negatif
‫olanı yaşam süresi olarak geçirirsiniz.
‫Şimdi son iki parametre isteğe bağlıdır, bu yüzden sadece ilk yedi parametreyi tartışarak bunu basit
‫tutacağız.
‫Bakalım nasıl çalışacak.
‫Şimdi en üstte bir hata ayıklama küresi çizeceğim, hata ayıklama yardımcılarını çizeceğim.
‫Bu hata ayıklama küresi çizme işlevi burada bildirilir.
‫Şimdi oyuna başlayalım ve bunun nasıl çalıştığını görmek için basitçe bir hata ayıklama küresi çizelim.
‫Bu yüzden draw debug sphere ve
‫İlk girdi parametresi yeni bir dünyadır.
‫Get World'ü çağırarak dünyamızı istediğimiz zaman elde edebiliriz, Get World mevcut dünyamıza yeni bir dünya işaretçisi
‫döndürür.
‫Böylece ilk girdi karşılanmış olacaktır.
‫Daha sonra, kürenin merkezi için bir f vektörüne ihtiyacımız var.
‫Şimdi bunu çağırıyoruz ve oynatmaya başlıyoruz, böylece basitçe get actor location diyebilirim ve bu tank havuzumuzun
‫konumunu alacaktır.
‫Tank sınıfında olduğumuza göre.
‫Şimdi küreyi biraz yukarı kaldıracağım.
‫Bu yüzden x için sıfır nokta F, Y için sıfır nokta F ve Z için 200 F değerine sahip bir F vektörü ekleyeceğim.
‫Şimdi bu giriş parametrelerinin her birini kendi satırlarına yerleştireceğim.
‫Böylece her bir girdi için ne aktardığımız açık olur.
‫İkinci girdi, aktör konumu artı 200 uzunluğunda yukarı doğru işaret eden bir vektör olan bu
‫ifadeyi alıyor.
‫Bu iki vektörü birbirine eklediğimde, tankın Z ekseninde 200 birim yukarı kaldırılmış konumu elde
‫edilir.
‫Şimdi bir sonraki giriş parametresi, kürenin yarıçapı olacak.
‫Yarıçapı 100 olan bir hata ayıklama küresinin neye benzediğini görebilmemiz için 100 F seçeceğim.
‫Sırada segment sayısı var.
‫Ben 12'yi seçeceğim.
‫Neye benzediğini göreceğiz.
‫Şimdi bir F rengi için, bir F renk sınıfı var ve kırmızı gibi birçok renk içeriyor.
‫Şimdi B kalıcı çizgiler adlı boolean için true değerini seçeceğim.
‫Ve bir sonraki giriş parametresi için ömür boyu bildirimimiz var.
‫Varsayılan değeri negatif birdir.
‫Bu, varsayılan olarak hata ayıklama küresini tek bir kare için çizeceği anlamına gelir.
‫Ancak 30 saniye boyunca küreyi elde etmek için 30 F değerini geçeceğim ve son iki parametreyi atlayabilirim.
‫İşte hata ayıklama küresi çizmek için fonksiyon çağrımız.
‫Bunu derleyelim ve nasıl göründüğüne bakalım.
‫Tamam, editöre geri döndüm.
‫Bunu tam ekranda görebilmemiz için ikinci bir pencere açacağım.
‫Pencere görünüm portlarına gidip Viewport ikiyi seçebiliyorum ve şimdi bu ikinci pencereyi görüyorum.
‫Açıldığında tam ekran olmayabilir, ancak her zaman büyütebilirsiniz.
‫Şimdi buradan oyunu alt p ile oynayabilirim.
‫Şimdi şuna bir bak.
‫İşte hata ayıklama alanımız.
‫Tam yuvarlak olmadığına dikkat edin.
‫Segment sayısı için 12'yi seçtik.
‫Ne kadar çok segment seçerseniz, küreyi çizmek için o kadar çok çizgi gerekir.
‫Şimdi, bu 100 yarıçaplı bir küre.
‫Oldukça büyük ve kürenin merkezi tankın bulunduğu yerde, artı 200 birim havada.
‫Hata ayıklama kürelerini bu şekilde çizebiliriz.
‫Yani sizin göreviniz, imlecimizin altındaki izleme sonucunu kullanarak bir hata ayıklama küresi çizmektir.
‫Bu nedenle, oyuncu denetleyicisi ref'inin null olup olmadığını kontrol ettiğimiz yeni if deyimimizde bir hata ayıklama küresi
‫çizin.
‫Şimdi isabet sonucumuzu kullanarak, isabet sonucundan çarpma noktasını alın ve bunu Kürenin Merkezi olarak
‫kullanın.
‫Şimdi kalıcı çizgiler giriş parametresi için false kullanın ve süre için negatif bir kullanın.
‫Ve bu, kürenin tek bir kare için çizilmesiyle sonuçlanacaktır, bu sorun değil çünkü bunu tic işlevinin
‫içindeki her karede çağırıyoruz.
‫Bu yüzden videoyu duraklatın ve tick işlevinde hata ayıklama küresini çizin.
‫Tamam.
‫Tank'a geri döndüm.
‫Şimdi burada bu draw debug sphere fonksiyon çağrısı var ve oynatmaya başla, böylece devam edip bunu kopyalayabilir
‫ve oynatmaya başla'dan kaldırabilirim ve burada if deyimimizin içindeki tick'e geri döneceğiz ve sadece buraya
‫yapıştıracağım ve bazı giriş parametrelerini değiştireceğiz.
‫Birincisi, kürenin merkezinin yerini değiştiriyoruz.
‫İsabet sonucunu kullanacağız.
‫Bu yüzden isabet sonucu nokta çarpma noktası diyeceğim.
‫Şimdi yarıçap için, bunu biraz daha küçük yapmak istiyorum.
‫Şunu 25 yapalım.
‫Sorun değil.
‫Eğer bunu yapmadıysan, ben sadece bunu yapıyorum.
‫Yani küre o kadar da büyük değil.
‫Şimdi, sondan ikinci parametre kalıcı çizgiler içindir.
‫Yanlış olarak geçeceğim ve süre için 30 saniye yerine negatif bir F noktası kullanacağım.
‫Bu şekilde tek bir kare için bir küre elde edeceğiz, bu da sorun değil, yine bunu tik fonksiyonunda çağırıyoruz,
‫bu yüzden bunu her karede çağıracağız.
‫Devam edelim ve bunu derleyelim.
‫Şimdi, editöre geri dönelim.
‫Şimdi oynat tuşuna basarsam, şuna bir bak.
‫Bir hata ayıklama kürem var ve imlecin altındaki çizgi izi için çarpma noktasında çiziliyor.
‫Şimdi bunu duvarlara ve diğer nesnelere taşıyabiliriz ve görünürlük kanalını engelleyecek şekilde ayarlandıkları
‫için iz bu nesnelere çarpıyor.
‫Şu anda oldukça harika.
‫Karmaşık izleme ile basit izlemeyi tartışacağımıza söz vermiştim.
‫Oyunu oynarken size bir şey göstereceğim.
‫Avuç içimizi kontrol edebilmek için görüntü alanına tıklayalım.
‫Şimdi tilde tuşuna basın ve show collision konsol komutunu yazın.
‫Benim ekranımda görmek o kadar kolay olmayabilir ama siz kendi ekranınızda kesinlikle görebilirsiniz.
‫Piyonlarımızın çarpışmasına dikkat edin.
‫Sadece kapsülü görmekle kalmıyor, aynı zamanda tank ve taret kafeslerimizin etrafındaki bu çarpışma hacmini de görebiliyoruz.
‫Bu basit bir çarpışma.
‫Size basit çarpışmayı nerede görebileceğimizi hızlıca göstereyim.
‫Varlıklara ve kafeslere gideceğim ve örneğin burada tank tabanına çift tıklarsam, karmaşık çarpışmaya
‫bakıyoruz.
‫Üstteki bu göster simgesine tıklayıp karmaşık çarpışmayı seçersem, karmaşık çarpışmadaki tüm poligonları
‫görebilirim ve bunlardan çok sayıda var.
‫Göster simgesine tekrar tıklarsam ve bu sefer Basit Çarpışma'nın yanındaki onay kutusunu işaretlersem, başka bir çarpışma hacmi
‫olduğunu fark ediyorum.
‫Buna çarpışma gövdesi denir ve çok daha az geometriye sahiptir.
‫Bu çarpışma hacmine sahip daha az sayıda poligon vardır.
‫Bu, fizik motorunun vuruş olaylarındaki çakışmayı tespit etmek için kullandığı şeydir.
‫Eğer karmaşık çarpışma kullanılıyor olsaydı, çok daha fazla hesaplama yapılması gerekirdi.
‫Bu yüzden basit çarpışma hacimlerimiz var, bu yüzden bir çizgi izlemesi yaparken karmaşık çarpışma
‫yerine basit çarpışma için izlersek performans açısından çok daha iyi olur.
‫Şimdi imlecin altında isabet sonucunu elde ettik.
‫Oraya ulaşmak için biraz çalışmak gerekti, ancak şimdi onu elde ettik ve bu konumu bir hata ayıklama küresi ile göstererek
‫kanıtladık.
‫Bu, izleme vuruşumuzun çalıştığını doğrulamak için güzel bir yoldur.
‫Artık çalıştığını bildiğimize göre, bu konumu tankımızdaki tareti döndürmek için kullanabiliriz.
‫Bunu da bir sonraki videoda yapacağız.
‫Yakında görüşürüz.