‫Merhaba ve hoş geldiniz.
‫Bu derste, bağımlılık enjeksiyonu adı verilen bir teknik kullanarak hareket ettirici ve tetikleyici arasındaki
‫bağlantıyı kuracağız, böylece dersin sonunda çirkin yaratığı içeri sokarsak kapı aşağı hareket edecek
‫ya da en azından kısmen hareket edecek.
‫İçeri dalalım ve bunun nasıl çalıştığını görelim.
‫Ben de bir fincan aldım.
‫Fizik kolu için bağımlılık dediğimiz bir bağımlılık olduğunu gördük.
‫Etrafta bir yerde bir fizik kolu bileşeni olmadığı sürece bu tutucu işini yapamaz, sadece tetikleyici
‫bileşenin aynı olduğu görülür.
‫Tetikleyici bileşenin işini düzgün bir şekilde yapabilmesi için bir taşıyıcı bileşene erişimi olması gerekir.
‫Ancak, bu durumda durum biraz daha karmaşıktır çünkü gizli kapımız söz konusu olduğunda,
‫tetikleyici ve hareketli nesne aynı aktörün içindedir.
‫Böylece aktör üzerinde a türünde bir bileşen bularak bir nesne elde edebilirsiniz.
‫Ama ya senaryomda bu tür bir esnekliğe izin vermek için tetiğimin odanın iyi hareket
‫eden aktörden farklı bir yerinde olmasını istediğim bir durum olursa.
‫Tetikleyicinin gidip kendi bağımlılıklarını bulması gerekmeyecek şekilde olmasını istiyoruz.
‫Ve aslında bu tür bir program konsepti için bir isim var.
‫Buna bağımlılık enjeksiyonu denir.
‫Temel olarak, "Başka bir nesneye ihtiyacım var ama onu kendim bulamıyorum ya da kendim bulmak istemiyorum"
‫diyen bir şeyimiz olduğu durumda söz konusudur.
‫Ve genellikle kendi işini yapan nesneye bırakmamak, onu bir nesneyi ele geçirmeye çalışmak gibi başka
‫bir işle uğraştırmak mantıklıdır.
‫Bunu yapabilmemizin yolu, planların tetikleyici bileşene bir taşıyıcıyı nerede bulacağını söylemesi için bir mekanizma
‫oluşturmaktır.
‫Bunu yapmanın yolu da tetikleyici bileşenimiz üzerinde çağrılabilir bir blueprint işlevi oluşturmaktır.
‫Yani halka açık olacak.
‫Bunu tick bileşeninin altındaki public bölümüne koyacağız ve bir U fonksiyonu
‫olacak, böylece parantez içinde blueprint çağrılabilir olacak.
‫Ve bu işlev için fazla bir şey olmasına gerek yoktur.
‫Bir şey döndürmesi gerekmediği için void olacak, ancak set mover olacak, böylece mover'a
‫bir bağlantı ayarlayacak ve mover'a bir bağlantı ayarlaması için bir mover bileşenine bir
‫işaretçi alması gerekiyor.
‫Yani bu sizin taşıyıcı yıldızınız olacak ve buna bu şekilde taşıyıcı diyebiliriz ve bu satırın sonuna noktalı virgül koyabiliriz.
‫Ve bunu bir yerde saklamamız gerekiyor.
‫Bu yüzden yeni bir özel değişken oluşturacağız.
‫Bu yeni bir mülk olmayacak ve sadece bizim de taşıyıcı olarak adlandıracağımız
‫bir U hareket göstergesi olacak.
‫Bunun gibi ve yapacağımız şey, bu set mover'ı CPP'de uygulamaktır, böylece bu hareketi varsayılan olarak null
‫olacak bir işaretçi olarak ayarlar.
‫Ve bir şey daha yapmamız gerekiyor.
‫Taşıyıcımız için başlık dosyasını dahil etmeliyiz.
‫Şimdi bu durumda, başlık dosyası tetikleyici bileşenle aynı klasörde
‫olduğu için, tek yapmamız gereken hash include quote mover H'dir ve bu, tetikleyici bileşenin taşıyıcı türünden haberdar olmasını sağlayacaktır.
‫Şimdi tetikleyici bileşenimize geçelim.
‫CP Ve bunu set mover'ı uygulayacağımız tick bileşenimizin altına koyacağım.
‫Bileşeni tetiklediğiniz sınıfı daha önce koyacağız ve girintileyeceğiz.
‫Noktalı virgülü kaldırın ve parantez ekleyin.
‫Ve esasen burada yapmamız gereken tek şey, sadece C++ dosyasındaki adı değiştirmek olacak.
‫Parametrelerin adının başlık ve C++ arasında eşleşip eşleşmediği aslında önemli değildir.
‫Bu yüzden burada bunu değiştirebilir ve yeni hareket ettiricinin hareket ettiriciyi ayarlamak için gelen şey olduğunu söyleyebiliriz.
‫Ve böylece yerel değişkenimizi, sınıf değişkenimiz mover'ı yeni mover'a eşit olarak ayarlayabiliriz.
‫Şimdi, bu yeniden adlandırma adımını atlamamanız oldukça önemlidir çünkü girdi parametresi sınıftaki
‫değişkenlerden biriyle aynı addaysa, unreal varsayılan olarak bunu bir hata olarak ayarlayacaktır.
‫Buna gölgeleme denir ve Unreal bunu yapmanızı istemez, bu nedenle parametre adınızın artık değişkene
‫farklı olduğundan emin olmanız gerekir, çünkü bu yeni işlevler her zaman canlı kodlama değişiklikleriyle
‫görünmez.
‫Düzenleyiciyi kapatacağım, Visual Studio kodundan yeniden derleyeceğim ve ardından yeni projeden yeniden başlatacağım.
‫Şimdi içerik çekmecesine gidelim, gizli duvar planımızı açalım ve ardından
‫olay grafiğindeki Begin Play düğümümüzden buradan çekip set mover'ı arayalım.
‫Şimdi burada iki seçenek olduğuna dikkat edin.
‫Birincisi, taşıyıcı olarak da adlandırılan bileşeni ayarlamak ve diğeri tetikleyici bileşen üzerindeki bir işlevdir.
‫Bu yüzden tetikleyici bileşen üzerinde bir fonksiyon olanı seçmek istiyoruz.
‫Ve sonra yapmak istediğimiz şey, taşıyıcı bileşenimizi bu işleve diğer argümanlar olarak sürüklemektir ve bu işimizi
‫görecektir.
‫Taşıyıcıyı oyun başlangıcına ayarlar.
‫Şimdi esasen olmasını istediğimiz şey, tetikleyici bileşenimizin burada should move boolean'ını
‫ayarlaması ve ayarlaması gerektiğidir.
‫Bu nedenle, mover ve mover'da bazı genel işlevler oluşturmanız için size meydan okuyacağım.
‫CP Ayarlanmalı, hareket etmeli ve bu özellik değişkenini güncellemelidir.
‫Aslında, bunu artık yeni bir özellik olmaktan çıkarabilirsiniz çünkü şimdi kod aracılığıyla ayarlayacağız
‫ve sonra bunu genel bölüme koyabilirsiniz.
‫Herkese açık olması gerekiyor çünkü tetikleyici bileşenimizden erişmeye çalışacağız.
‫Ve bunu, tetikleyici bileşeninde sahip olduğumuz hareket işaretçisi üzerinde, tik bileşeni ayarından, uygun boolean'dan, kilidi
‫açmasını veya tekrar kilitlemesini, videoyu duraklatmasını ve denemesini isteyip istemediğimizi çağırabilirsiniz.
‫Tamam, tekrar hoş geldin.
‫Bu yüzden should move özelliğini kaldıracağım, TTIC bileşeninin
‫hemen altındaki public bölümüne gideceğim ve should move olarak adlandıracağımız bir boolean alarak void set
‫should move oluşturacağım.
‫Ve sonra bunu alıp move CP'ye gideceğiz ve noktalı virgülü değiştirerek, you move
‫colon, colon sınıfını ekleyerek uygulayacağız ve sonra temel olarak buna yeni should move
‫diyebiliriz ve should move eşittir yeni should move diyebiliriz.
‫Şimdi merak ediyor olabilirsiniz, neden değişkenlerin kendilerini doğrudan ayarlayabilmemiz için
‫herkese açık hale getirmiyoruz?
‫Bu genellikle C++'da iyi bir uygulama değildir çünkü birinin değişkenlerinizi değiştirmesine izin verirseniz, onlara ne olabileceğini
‫asla bilemezsiniz.
‫Oysa bunu sizin için yapacak bir yönteminiz varsa, daha sonra genel işlevlerinizi değiştirmek zorunda kalmadan dahili değişkenleri nasıl
‫yapılandırdığınızı değiştirmenize olanak tanır, bu da farklı sınıflarda yapmanız gereken daha az güncelleme
‫olduğu anlamına gelir.
‫Bu nedenle, genel bir kural olarak, diğer sınıflardaki değişkenlere erişmemiz gerekiyorsa her zaman setter ve getter
‫kullanırız.
‫Şimdi bu yeni fonksiyonu oluşturduğumuza göre, şu anda günlük mesajlarımızın bulunduğu trig
‫bileşeni CP'ye gidelim.
‫Yapmak istediğimiz şey taşıyıcı işaretçimize erişmek, bu yüzden taşıyıcı ok seti hareket etmeli yapacağız.
‫Ve elimizde kabul edilebilir bir aktör varsa, bu doğru olmalıdır.
‫Noktalı virgülü satır sonuna taşımalıyız.
‫Diğer durumda ise, o zaman muhtemelen yapmamalıyız.
‫Bu yüzden ok setini hareket ettireceğiz ve parantez içine false koyarak yöntemimin sonundaki fazladan R'yi kaldıracağız
‫ve şimdi bu durumda yeniden derleyelim çünkü bu işlevi yalnızca C++ ülkesine ekledim ve
‫blueprint çağrılabilir değil.
‫Bu işlevin çalışması için editörü yeniden başlatmam gerektiğini sanmıyorum, çıktı günlüğümüzü
‫kapatın, gargoyle'ımıza doğru gidin ve oynamaya başlayın ve onu alın.
‫Bu kafesten çıkalım ve oyuğa sokalım, aşağıya doğru hareket ediyor, ancak çirkin adam düştüğü anda duruyor,
‫bu ideal değil çünkü çirkin adam gerçekten yerinde tutulmuyor ve duvar tamamen
‫aşağıya inmiyor.
‫Ve fiziği simüle ettiği için, o oyuktan dışarı fırlayacak, değil mi?
‫Bu yüzden yapmamız gereken şey, onu tetikleme alanımıza bıraktığımızda orada sabitlendiğinden ve öylece kaldığından
‫emin olmaktır.
‫Bu da bir sonraki dersin konusu olacak.
‫Orada görüşürüz.