27 Ocak 2020 Pazartesi

Alınıp Bırakılabilir item oluşturmak:
Uzun olmasından korkmayın gayet basit.

İlk önce alıp bırakma tüşlarını tanımlamak için sol üstten edit>project settings>input bölümüne girip oradan
Action mappings bölümünün yanındaki + butonuna basarak bir alma bir de bırakma tuşu ayarlıyoruz.
(Ben E(alma) ve G(bırakma) kullandım.
Daha sonra kullanacağım item için bir BluePrint dosyası açıp içine yukarda görülen kodu yazdım. (Burası çok önemli değil sadece karakter üzerine gelince alabilirsiniz diyecek. Ama box collisionu test etmek için kullanabilirsiniz.)
Daha sonra ThirdPerson BP'yi açtım itemin skeletal mesh dosyasını karakterin sol tarafta görülen menüsünden mesh dosyasının içine attım.(Tam meshe bağlı olup olmaması çok önemli bunu kontrol edin.) Daha sonra kılıcın üzerine tıkladım sağda çıkan menüden sockets kısmını buldum orada parent sockets yazan kısımdan büyüteçe tıkladım ve hand_r yani karakterin sağ el soketini seçtim. Böylece kılıç sağ ele bağlandı. Daha sonra karakterime tıkladım animations kısmından pause anims kutusuna tik koydum. Animasyonlar durdu ve kılıcımı böylece kolayca karakterin sağ eline yerleştirdim. Sonra pause anims kutusundan tiki kaldırdım. Kılıç şuan karakterin elinde duruyor hareket sırasında da eliyle hareket ediyor. Ancak kılıcın başta görünmez olması gerekiyor.

Bu nedenle event begin play den bir kablo çektim ve set visibility fonksiyonunu çağırdım. Target kısmından kılıcımı seçtim. Artık kılıç görünmüyor. Görünürlüğü kılıcın yanına gelinip E tuşuna basıldığı zaman aktif edeceğim bu nedenle kılıcın yanına yaklaşılmış mı (yani overlap olmuş mu) ve E tuşuna basılmış mı, bunları sorgulatmalıyım.

İtemin yanında olup olmadığımızı sorgulatmak için is_overlap adında boolen bir variable(değişken) tanımlıyorum. Actor begin overlap cast to sword yapıyorum sonra set is_overlap yapıp kutuya tik koyuyorum. Yani değişkeni 1(doğru) yapmasını söylüyorum. Ardından end overlap olduğunda yani temas kesildiğinde set is_overlap false yapıyorum.(tik atmıyorum) 
Bu arada overlap olduğunun algılanabilmesi için kılıcın bp dosyasından sol üstteki add component bölümünden bir box collision ekleyip boyutunu ayarlamam lazım yoksa karakter iteme dokunduğunda algılamaz.

Daha sonra ayarladığım item alma (e tuşu) tuşunun eventını çağırıyorum.(event ın ismi başta gösterdiğim yerden ayarlanır. Ben interaction dedim.(bu isimlerde Türkçe
 karakter kullanmazsanız güzel olur. Yoksa hata olabilir.)  Bu eventtan bir branch çekiyorum (branchlar bir boolen değerin doğru mu yanlış mı olduğunu sorgular. If yazdığınız zamanda çıkar.)
Bu brancha is_overlap'i bağlıyorum. True kısmına set visibility fonksyonunu bağlayıp true yapıyorum. Şuana kadar yaptıklarım ile item ele alınıyor ancak yerdeki item yok olmuyor.
 Yerdeki itemin yok olması için o itemin dosyasına cast to yapıyorum. Ve onu da görüldüğü şekilde destroy actor fonksyonuna bağlıyorum. Buraya kadar yaptıklarımızda da itemi alma kısmı tamam ancak itemi bırakamıyoruz.
   İtem bırakabilmek için G ye atadığım eventı çağırıyorum. İlk olarak elimdeki itemin yok olması gerek bu nedenle set visibility false yapıyorum. Ancak burada çağırdığımız itemin BP değil karaktere bağladığımız item olduğundan emin olmalıyız. Şimdi bırakınca item elimizden yok oluyor ancak yerde itemi görmeliyiz.
  İtemin bırakılacağı yeri belirlemek birazcık daha kompleks. Çünkü karakterin tam yerine bırakması için ayarladığımda item havada kaldı. Bu nedenle x ve y kordinatlarını karakterden z yi ise zeminden almam gerekti. Set visibility den spawn actor class fonksiyonunu çağırdım. Görüldüğü üzere bu fonksiyondaki transform bölümü itemin spawnlanacağı konumu belirtiyor.
 Bunun için en başta karakterimin lookasyonunu aldım. Daha sonra break vector ile x y z olarak ayırdım. Ardında make vector yaptım x ve y yi direkt olarak bağladım z ye ise zeminin kordinatını girdim. Daha sonra make vectorden aldığım veriyi transform verisine dönüştürmem gerektiği için make transform fonksiyonunu çağırdım. Make vectoru locationa bağladım, rotation için de get player rotation'ı çağırdım. Ardından transform kısmına bağladım. Artık item alnıp bırakılmaya hazır. Kılıç varken farklı yokken farklı animasyonların devreye girmesi ise ayrı bir konu.