Tanhu

Unreal MVP
22 Tem 2015
208
34
0
Belirtilmemiş
Merhabalar.

Sorum basit. En genel olarak farklı blueprintlerden fonksiyonları çağırıp aktifleştirmek istiyorum.

Mesela KarakterBP'ye B tuşunu atadım. Bu B tuşuna bastığım zaman LAMBA içerisindeki fonksiyon ve Widget BP'lerden birinin (farketmiyor) içindeki fonksiyon harekete geçmeli.

Diyelim ki bir save load sistemi hazırladım ve Widget içinde ve LAMBA içinde kayıt yapacak fonksiyonlar var. Bunları tetiklemeye çalışıyorum.


İşte o çağırma olayını tam anlayamadım çünkü cast to dediğim zaman hata veriyor ya da görünürde sorun olmasa bile etkileşime geçmiyor.
 
QMPo7G.jpg
 
Teşekkürler ama sanırım kendimi yanlış ifade ettim.

Bir blueprinti karaktere cagirdigimda (cast ile) genelde arkadaki object girişine ne yapmam gerektiğini bulamiyorum. Blueprintten bluerinte ulaşamıyorum ya da oradaki değişkeni karakterde kullanamıyorum.
 
Dispatcher'lar işinize yarayabilir.

Hangi blueprint içerisinde bir fonksiyon çağırmak istiyorsanız(Örnekte CrashBandicootPlayerBP), bu blueprint içerisinde bir Dispatcher oluşturup ilgili kısımda bu dispatcher'i çağırın.

Erişmeye çalıştığınız blueprint ise örnekteki gibi MainUI olsun. MainUI  blueprint'inin içerisinde CrashBandicootPlayerBP'ye bir referans oluşturup bu referans üzerinden dispatcher için "bind" fonksiyonunu çağırın. Bind'in event kısmına ise çağırmak istediğiniz event'i bağlayın.

Örneğin ben karakterim bir objeyi aldığında UI üzerinde objeden kaç tane aldığımı gösteren kısmın belirmesini istiyorum. Karakterimin içerisinde eatWumpa isimli bir dispatcher oluşuturup, karakterin objeyi almasını kontrol eden event'da bu dispatcher'i çağırıyorum:

R3gj01.png


Bu call fonksiyonu dispatcher'a bind ettiğim bütün eventleri o anda çağıracak. Şimdi UserWidget blueprint'ime gidiyorum. Burada Gather Wumpa UI isimli bir event'im var, ekranda topladığım objelerin sayısının belirmesini sağlıyor. Player 0 karakterine bir cast gerçekleştirip içerisinden bind eatWumpa'yı çağırıyorum. Bunu da az önce bahsettiğim event'a bağlıyorum:

pP5O00.png


Böylece her obje aldığımda UI üzerinden bu event çağırılacak ve ekranda objelerin sayısı belirecek.

Tabii ki C++ ile çalışıyor olsaydık, iki satırlık iş aslında şu.
 
Tanhu' Alıntı:
Mesela KarakterBP'ye B tuşunu atadım. Bu B tuşuna bastığım zaman LAMBA içerisindeki fonksiyon ve Widget BP'lerden birinin (farketmiyor) içindeki fonksiyon harekete geçmeli.

Hem basit yöntem olarak, hem de işlem yükü olarak en doğrusu KarakterBP örneği üzerinden LambaBP'nin söz konusu örneğine erişip, bahsettiğiniz fonksiyonu(public olmalı) çağırmak. Phyrexian'ın örneğinde de yapılan bu ancak LambaBP'nin tüm örneklerini döngü ile dolaşmaya gerek yok. Bunun da en kolay yöntemi Overlap Begin kullanmak.

Küçük bir hatırlatma yapmak gerekirse, sık sık yanlış bilinen şeylerden bir tanesi Nesne(Class) ile Nesne Örneği(Class Instance). Content Explorer'da oluşturduğunuz örneğin bir Character Blueprint, aslında bir Nesne(Class) daha spesifik anlamda Character Blueprint Classıdır. Tamamen nesneleri tanımlamak için kullanılır. Gerçek dünyadan örnek vermek gerekirse "insan" gibi bir kavram adıdır. Oyun başlatıldığında sahnede oluşan (muhtemelen CharacterBP_C_1 gibi bir isme sahip) ise bu nesnenin örneğidir. Gerçek dünyadan örnek vermek gerekirse doğrudan belirli bir kişiyi temsil eder. İşte bu yüzden iş yapılacak nesnenin spesifik örneğine/referansına ihtiyaç vardır. Bazı özel yapıların sadece bir örneği bulunur bu yüzden referanslarına ihtiyaç yoktur. Mevcut 1 adet referanslarına global olarak yada başka kolay yöntemlerle erişilebilir (Game Mode, Level Blueprint, Game State... gibi).
 
Herkese çok teşekkür ederim, Phyrexian'ı da yanlış anlamışım sanırım çünkü tuşa atama yapıp oradan çağırmayı denedim ve fonksiyon çalıştı.


Bu forumun değeri çok büyük, çok konu açıyorum belki şu sıralar ama cevapların çok faydası oluyor. :D