﻿ Actor’ler Arası Haberleşme ve Referans Alma
Unreal Engine Türkiye | Topluluk > Unreal Engine Türkiye Topluluk > Araçlar, Dersler ve Paylaşımlar > Actor’ler Arası Haberleşme ve Referans Alma >
Actor’ler Arası Haberleşme ve Referans Alma
02-01-2019, Saat: 21:07
Öncelikle Oyuna başlamadan bir aktörü başka bir aktöre nasıl referans olarak gösterebileceğimize bakalım. Aşağıdaki level içine yerleştirilmiş bir spot bir de davul blueprint actor bulunmakta.
Spot blueprint’i içinde BOOM isimli bizim oluşturduğumuz bir custom event bulunmakta, biz de davula her vurduğumuzda bu event’i ateşlemek istediğimizi farzedelim.
Önce davul blueprint’i içinde yeni bir değişken oluşturuyoruz ve bu değişkenin türünü spot BP olarak belirliyoruz, ardından Instance Editable kutucuğunu seçiyoruz.
Instance Editabe seçeneği aktif olduğu için davul blueprint’inin level içine yerleştirdiğimiz her bir kopyası için bu değişkeni ayrı ayrı belirleyebileceğiz. Level içinde davulu seçip sağdaki Details paneline bakarsak orada Spot isimli yeni bir parameter çıkacak. Bunu level içindeki herhangi bir spot BP aktörünü seçerek referansımızı belirleyebiliriz. Bu değişkeni kullanarak da oyun öncesi(Construction Script) veya oyun sırasında(Event Graph) davul blueprinti içinden BOOM eventini(veya spot BP’ye ait herhangi bir değişken/fonksiyonu) ateşleyebilir&değiştirebiliriz.
Peki oyun sırasında oluşturulmuş(Spawn Actor from Class) bir aktörü çağırıp nasıl işlem yapabiliriz?
Yöntemlerden birisi Get All Actors of Class fonksiyonunu kullanmaktır.
Örnekte E’ye basıldığında 0. Indexteki, yani bulunan ilk spot aktörüne ulaşırız. R’ye basıldığında ise tüm spot BP’lerini alıp, döngüden(loop) geçirip hepsine işlem yaptırırız. Anlayacağınız bu şekilde istediğimiz aktöre komut gönderemiyoruz, üstelik actor sayısı fazla ise Tick veya Timer ile yaptırılacak işlemlerde büyük performans kaybına yol açar.
Çaresiz durumda olmadığınız veya gerçekten ihtiyacınız olmadığı sürece Get All Actors of Classyerine yapabilecekleriniz şunlardır:
Line trace, Hit veya overlap event gibi collision ile eleme yaparak istediğiniz actor veya aktörleri seçebilirsiniz. Actor pinini çekip Cast To(cast to ile event sonucu alınan actor’ün istediğimiz actor olup olmadığını control edip yine elemeden geçiriyoruz) yaparak spot içindeki istediğimiz şeye müdahele edebiliriz.
Veya Blueprint Interface kullanabiliriz. Bunun için öncelikle Content Browser içinde bir Blueprint Interface yaratıyoruz.
Ardından interface içinde istediğimiz fonksiyonu ve değişkenlerini oluşturuyoruz.
Son olarak da bu interface’i Class Settings aracılığıyla spot blueprint’I içine ekliyoruz;
Ekledikten sonra bu fonksiyonu bir event olarak kullanıp istediğimiz işlemi yaptıralım:
Artık Cast To yapmamıza gerek kalmadan bu interface’e sahip tüm aktörlerde interface’i kullanarak hazırladığımız event ve fonksiyonlara erişebiliriz;
Peki, ya bir actor içinden Level Blueprint’e mesaj göndermek istersek? Bildiğiniz gibi level veya level BP’ye referans alınamıyor. O yüzden actor BP’ler içinden Event Dispatcher kullanıp level BP içinde de bu actor/actor’lerin referansını alıp mesajlaşma sağlıyoruz.
Oyunumuzda player controller BP içinden herhangi bir leveled bulunan bir Matinee’yi(Matinee, eski Sequencer, level dışında erişilemeyen bir araçtır bu yüzden bahsettiğimiz konu için güzel bir örnek olacak) başlatmak istediğimizi farzedelim. Önce player controller BP içinde ismi MatineeDispatcher olan yeni bir Event Dispatcher yaratıyoruz ve “Call” fonksiyonuyla bu dispatcher’ı çağırıyoruz;
Sonra da Level BP > Event Begin Play ile Player Controller içinden bu dispatcher’I çağırıp “Bind” ediyoruz, yani level BP içindeki eventi bu dispatcher’a bağlıyoruz. Artık player controller içindeki Continue event’I ne zaman matineeDispatcher’I çağırırsa level BP içinde de aşağıdaki resimde göreceğiniz MatineeDispatcher_Event_0 ateşlenecek ve bununla level BP içinde istediğiniz amaçla kullanabileceksiniz:
02-01-2019, Saat: 23:08
Çok teşekkürler. Gerçekten sorularıma cevap aldım. Mantığıma dahada oturdu çok teşekkür ederim.
Unreal Engine 4 - Ders 8 - Can Paketi Oluşturma ve Pickup (Alma) İşlemi. oguz-ulku 0 680 22-09-2015, Saat: 20:22