VoiclessCry

Yeni üye
8 Şub 2021
135
2
0
(16) Bursa
envanterden eşya attırabilmek istiyorum drag&drop ile fakat bunu yanlızca ana wb(envanter wb i) üzerinde işlem yaparak yaptırabilmenin bir yolunu bulamadım yardımcı olurmusunuz.
 
şöyle açıklayayım dediğiniz on drag cancel ı kullandığımızı düşünürsek peşine öyle bişey bağlayayımkiben mouse ile bi item ı envanterden envanterin dışına sürükleyip bıraktığımda bunun envanterin dışı olduğunu algılasın.. yani envanter dışı olarak kastettiğim bölge wb ekrandayken wb haricinde kalan kısım
 
Mouse ile onDrag olayı başladığında iki ihtimal var. Ya OnDrop olan bir yerde bırakırsın ve orasının OnDrop u çalışır. Yada OnDrop u olmayan herhangi bir başka yerde bırakırsın ve OnCancel çalışır. Bu mantıkla baktığında Widget dışarısı her zaman OnCancel ı çalıştıracaktır zaten. Ancak sorun şurda çıkabilir. Başka bir widget ın üzerinde isek ve o widgetın o bölgesinin OnDrop u yoksa orada da OnCancel çalışacaktır. Bunu önlemenin 3 yolu olabilir. 
 1. Tüm widgetlara boş ta olsa bir OnDrop fonksiyonu eklersin ki OnCancel sadece ve sadece widget dışarısında çalışsın.
 2. OnCancel çalıştığında altta yani mouse altında bir skeletal mesh ya da static mesh varmı diye kontrol edebilirsin. Hatta SceneComponent içeriyor mu diye kontrol etsen dışarıda olduğu anlaşılır. Çünkü widget üzerinde isen bu doğru olmayacaktır.
 3. Genel olarak ekrandaki widget ın onMouseOver fonksiyonuna onCancel da ne yapacaksan onu iptal etmeye yaran bir boolean koyarsın ve onu false yaparsın. OnCancel olduğunda On Mouse over da false hale geldiiği için bir şey yapmaz. Sadece widget dışında OnCancel çalışır. Mouse çıkıca tekrar doğru yapman gerekir tabi.
 Sonuç olarak elde ettiğin onCancel eventine ne yapmak istiyorsan onu yaparsın.  Ordan sonra ne yapacağını soruyorsan o da ayrı konu. Gerekirse cevap veririm.
Kolay gelsin.
 
Oraya isvalid bağlamayı dene. Mouse un altındaki actoru alıp onun üzerinde arama yapman gerekir. Yani önü  ve arkası bağlı değil şu an. Bunu mouse altındaki actor neyse onda kullanacaksın. Sonra çıkışında isvalid diyeceksin. Mouse altındaki nesneyi alma ile ilgili yakında bir c++ kodu ornek vermiştim onu alabilirsin. BP c++ komutlar mantık değişmez.( O karmaşada yolunu bulman çok zor. Tek ve düzenli,sıralı gitmelisin.)
 
O zaman diğer yöntemi dene. Tüm widgetlara ekrandaki tüm UMG lere OnDrop yeteneği ver ancak OnDrop ta bir şey yapmasın. Bu şekilde hiç bir test yapmadan widget üzerinde olmadığında OnDragCanceled çalışacaktır.
 
kötü haber ben bi sıkıntıdan dolayı on drop işlemini on cancel ile birleştirmek zorunda kalmıştım yani on cancel da işlem var orayı kullanamıyorum bunun için

https://pasteboard.co/JQTgVANb.png

.. ben scene component bölümünü widget component yaptım dedim ondan gelen çıktı false olursa çalıştırtırım ama bu sefer sürekli false oluyor wb de de true vermiyor bi yerde bi sıkıntı var ama :L

-- Sanırım en alt katmanda boş bir wb açıp ona on clicked de işlemi bağlayabilirim
 
Ben kendi inventory sistemimde drag-drop u collision  ile trigger ediyordum. Tam olarak senin durumun gibi değildi ama genel mantık dragoff da item eğer bir slot ile overlap değilse diye logic oluşturmuştum. Sonra ters tıkle direkt bırakmayı seçtim daha kullanışlı geldi doğrusu.