Tanhu

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

Unreal Engine üzerinden çalışmaya devam ediyorum, amacım bir objeye bakıldığında ve örnek olarak e tuşuna basıldığında bir olayı tetiklemek, bir ses gibi. Bunu Blueprint Class ile başaramadım, ancak Level Blueprint ile yaptım. Fakat yaptığımda sahnenin her yerinde ses çıkıyordu, biraz araştırıp şu şekilde bir çözüm buldum;

L4MWQZ.jpg


Bu kodda zaten bu işten anlayanlar sistemin nasıl işlediğini anlamıştır, triggerbox içerisine girip E tuşuna bastığında ses tetikleniyor. Fakat ben ileride bazı objelerin rastgele spawnlanmasını yapmaya düşünüyorum ve sanırım bunun için de bu yöntem işe yaramayacak.

İstediğim şey bunu Blueprint Class üzerinden halletmek, ayrıca bir kapsama alanı değil de objenin kendisine bakarken E ye bastığımda sesin tetiklenmesini sağlamak. Objeye bakacağım, E'ye basacağım ve ses tetiklenecek. Bunun için nasıl yapılabileceğine dair fikriniz var mı? Ya da objelerin rastgele spawnlanmasını ayarladığımda, şuan benim uygulamış olduğum yöntem (Level Blueprint) işe yarayacak mı, yani triggerbox rastgele spawnlanabilecek mi objeyle?

Teşekkürler. Araştıra araştıra başlangıca göre baya yol almanın mutluluğu içerisindeyim bu arada, forumun katkısı büyük. :)
 
Merhaba. Blueprint Class derken sanırım herhangi bir Actor blueprinti kastediyorsunuz. Zira eğer c++ konu dışıysa neredeyse herşey blueprint class.

Öncelikle ne olduğunun bir önemi yok ama trigger içerisine girecek olan nesne bir şekilde Player yada AI tarafından kontrol edilecekse (AController) mutlaka Pawn olmalıdır. Yani blueprint Pawn'dan kalıtım almalıdır. Bunu öylesine bir hatırlatma olsun diye yazdım çünkü E tuşu kafamı karıştırdı. Galiba PlayerController atanmış bir Pawn blueprint kullanmnız gerekiyor.

Pawn yada Actor farketmez, bir cismin önünde ne olduğunun basit, etkili ve hızlı yöntemi RayCast kullanmaktır. RayCast, başlangıç ve biriş noktası belirtilen bir ışın gönderir ve bu ışın isteğe göre bir yada bir çok objeye çarptığında bunu HitResult olarak verir. Grafik aygıtında 3B Fizik kullandığından, PhysX gibi, oldukça hızlıdır. Ayrıntılı bilgiyi buradan edinebilirsiniz.

https://docs.unrealengine.com/latest/INT/Gameplay/HowTo/UseRaycasts/Blueprints/index.html

Örnekte Tick eventi kullanmış, yani her framede bunu denetlemiş, sizin durumunuzda Level Blueprint'de yaptığınız gibi E tuşunu kullanabilirsiniz. Ama oyuncu objeye baktığında "X durumu için E tuşuna basın" gibi bir bilgi vereyim sonra da basarsa ses çalayım derseniz sizinde Tick kullanmanız gerekir.

Fazla ayrıntıya girmeden bu yöntemi kullanın yine takıldığınız yer olursa devam ederiz.

Son olarak vermiş olduğunuz örnekte birşey kafamı karıştırdı. 'Add Audio Component' methodunda Target pinine self atanmış. Bunun hata vermesini beklerdim. Eğer vermiyorsa da bu node hiçbir işe yaramıyor demektir. Nedeni ise şu; Level Blueprint tüm Leveldan sorumlu özel bir blueprinttir. Ona Audio Component eklemek gereksizdir (belki de bunun istendiği durumlar olabilir ama ben öngöremedim). Bunun yerine Target olarak oyuncunun blueprinti (en azından başka bir Actor) seçilmesi daha mantıklı. Aslında zaten oynatacağınız sesin kaynak olarak bir Actor'e bağlı hareket etmesini istemiyorsanız bir Actor'e eklemeniz de gerekmez. Doğrudan 'Play Sound At Location' kullanabilirsiniz. Yok illaki onunla hareket etmesini istiyorsanız, 'Play Sound Attached' methodunun 'Attach to Component' pinine oyuncunun referansını alıp kök bileşenini bağlayabilirsiniz (yani GetPlayerPawn->GetRootComponent gibi.
 
Evet, Actor'den bahsediyorum. Daha çok yeni olduğumdan işe dökümanlardaki quick start guide'den başladım, orada fırlatma rampası için aktör kullanmıştım, biraz değiştirip bu yöntemi denediğimde işe yaramamıştı ama level blueprint ile çalışmıştı.

RayCast için, aslında tam da aklımda olan şey buydu ve olmuş olması da çok iyi oldu. Benim de aklımda "acaba bir görünmez objeyi temas ettirsek o zaman etkileşim olsa" tarzı bir şey vardı, RayCast tam olarak bu işlevi daha pratik olarak görüyor anladığım kadarıyla. Yarın dökümanı detaylıyca okuyacağım. :)

Yani belli bir mesafeye yaklaşıp istenilen tuşa bastığında, örnek olarak o itemi yerden alması gibi. Belli mesafede ses çıkaracak, bu ses olayını ben tabi baya değiştirebilirim. Şuan yapmak değil de, öğrenmek adına bunlara bakıyorum.

Son olarak attığım görselde aslında biraz hızlı doğaçlama yaptım, işe yaradığında da "o zaman kullanayım" dedim. Hata vermedi, yarın önerinizi uygulayacağım ve eğer işe yarıyorsa bu şekilde yolu da kısaltmış olurum. Yani onu seçmemdeki tek olay, doğaçlama ilerleyip çalışıp çalışmamasıydı. :D Bu tür şeyleri hızla öğrenmeye başlamalıyım.

Teşekkürler. :)
 
RayCast'de obje görünmez olabilir ama Collider yada Trigger bulundurması gerekir yani fizik bilgisine ihtiyacı var.

Ben de forumda mümkün olduğunca ayrıntıya girmeye çalışıyorum. Hem bildiğim her ayrıntıyı aktarmak hem de yanlış bildiklerim varsa düzeltmek için.

Kolay gelsin.
 
Merhabalar tekrardan.

Dökümanları okuyup başarıyla ekledim RayCast'i, düzgün bir şekilde çalışıyor şuanda. Sadece aşağıya doğru yığınla yazı akıyor, ama o önemli değil zaten kolayca kapatılabilecek bir şey bu. Benim anlamadığım şey, Raycast'ı yaptıktan sonra, Raycast'ın mesafesine giren aktör ile örnek olarak "e" tuşuna basıp etkileşime girme durumu. Bunu bana açıklayabilir misiniz rica etsem?
 
Tanhu' Alıntı:
Merhabalar tekrardan.

Dökümanları okuyup başarıyla ekledim RayCast'i, düzgün bir şekilde çalışıyor şuanda. Sadece aşağıya doğru yığınla yazı akıyor, ama o önemli değil zaten kolayca kapatılabilecek bir şey bu. Benim anlamadığım şey, Raycast'ı yaptıktan sonra, Raycast'ın mesafesine giren aktör ile örnek olarak "e" tuşuna basıp etkileşime girme durumu. Bunu bana açıklayabilir misiniz rica etsem?

Siz oluşturduğunuz grafı buraya koyun ki daha doğru bir yaklaşım izleyelim.
 
Raycast için olan bu;
ZVolWV.jpg


Aktör için ise çalışmadığı için şuanda oluşturduğum bir grid yok. Mesela ses çalması için bir BP oluşturup başa direk Event Tick koyduğumda, ne olursa olsun bunu yapmış oluyor. Sanırım Event Tick'in burada bir şeyi hedef alması gerekiyor, ama bu belirtilmediğinden her şeye çalıyor. Aklımdaki, raycast ilgili aktöre gönderildiğinde o aktör ile bir tuşa basıp etkileşime geçmek. Anlamadığım şeyler şunlar.

1 - Mesela E'ye bastığında o objeyle etkileşime geçmesi, Aktör blueprintine mi ayarlanmalı yoksa fotoğrafta gösterdiğim gridde mi oluşturulmalı?
2 - Event Tick ve E gibi başlangıçları nasıl bir arada toplayıp bu bahsettiğim etkileşimi ayarlayabiliyorum?
 
SoloWarior'un dediği gibi olur fakat eğer daha önceki postlarda demiş olduğum gibi bu esnada ekrana bilgi mesajı verip E ye bastıracaksanız; LineTraceByChannel'in ReturnValue değeri ile bir gate kullanarak yapacağınız işlemlere bağlayabilirsiniz.

Edit: Graf


Not: Bu graf sizinkine ekleme olacak yani LineTrace hala Tick'e bağlı.