coldwar

Yeni üye
3 Eyl 2016
4
0
0
(6) Ankara
Merhaba arkadaşlar, aranıza yeni katıldım. :)

Bir proje üzerinde çalışıyorum, TPS karakter üzerinden FPS kamera açısı ile bir oyun yapmaya çalışıyorum. Karakter hareketleri ve eğilip kalkma sistemini mevcut. Sorun şu ki, karakter bir statik objenin atlında eğilerek girdiğinde, daha o objenin altından dışarıya çıkmadan eğilme tuşunu bırakırsam kalkıp objenin içine giriyor ve ayakta hareket etmeye devam ediyor. Örneğin bir havalandırma boşluğuna eğilerek girdik diyelim, daha o havalandırma boşluğundan çıkmamışken eğilme tuşunu bırakınca karakter ayağa kalkabiliyor ve yürümeye devam ediyor. Bir türlü çözemedim olayı.

Eminim ki basit bir blueprint sistemi ile çözmek mümkündür, ama neleri kombine etmem lazım bilmiyorum.
 
Crouch tuşunun sonuna FlipFlop ekleyebilirsin. Pressed ve released'i FlipFlop'a bağla ve A çıkışına ilk basılınca ne olacağını, B çıkışına 2. kez basılınca işlemin sona erip normale dönmesi için gereken node'ları bağlarsan uzun basmaya gerek kalmaz. Ama eğer uzun basınca çalışmasını istiyorsan ve sadece bıraktığında collision'ların birbirine girmesini istemiyorsan bize nasıl bir sistem yaptığını söylemen lazım. Yaptığın sistemin fotoğraflarını atarsan sana yardımcı olabilirim.
 
coldwar' Alıntı:
Merhaba arkadaşlar, aranıza yeni katıldım. :)

Bir proje üzerinde çalışıyorum, TPS karakter üzerinden FPS kamera açısı ile bir oyun yapmaya çalışıyorum. Karakter hareketleri ve eğilip kalkma sistemini mevcut. Sorun şu ki, karakter bir statik objenin atlında eğilerek girdiğinde, daha o objenin altından dışarıya çıkmadan eğilme tuşunu bırakırsam kalkıp objenin içine giriyor ve ayakta hareket etmeye devam ediyor. Örneğin bir havalandırma boşluğuna eğilerek girdik diyelim, daha o havalandırma boşluğundan çıkmamışken eğilme tuşunu bırakınca karakter ayağa kalkabiliyor ve yürümeye devam ediyor. Bir türlü çözemedim olayı.

Eminim ki basit bir blueprint sistemi ile çözmek mümkündür, ama neleri kombine etmem lazım bilmiyorum.

Karakter eğildiğinde collisiona ne oluyor? Capsule collider yüksekliğini mi azaltıyorsunuz? Eğer öyleyse eğilme tuşu bırakıldığında yukarı yönlü ve karakterin kalktığı yere kadar uzanacak bir Line Trace gönderin. Line Trace bir şeye çarpmadığında artık collider yüksekliğini eski hale getirebilir, animasyon durumunu değiştirebilirsiniz. Aksi takdirde hiçbir şey yaptırmamalı, eğilmeye devam ettirmelisiniz.


furkanxdgs4' Alıntı:
Crouch tuşunun sonuna FlipFlop ekleyebilirsin. Pressed ve released'i FlipFlop'a bağla ve A çıkışına ilk basılınca ne olacağını, B çıkışına 2. kez basılınca işlemin sona erip normale dönmesi için gereken node'ları bağlarsan uzun basmaya gerek kalmaz. Ama eğer uzun basınca çalışmasını istiyorsan ve sadece bıraktığında collision'ların birbirine girmesini istemiyorsan bize nasıl bir sistem yaptığını söylemen lazım. Yaptığın sistemin fotoğraflarını atarsan sana yardımcı olabilirim.
furkanxdgs4' Alıntı:
Crouch tuşunun sonuna FlipFlop ekleyebilirsin. Pressed ve released'i FlipFlop'a bağla ve A çıkışına ilk basılınca ne olacağını, B çıkışına 2. kez basılınca işlemin sona erip normale dönmesi için gereken node'ları bağlarsan uzun basmaya gerek kalmaz. Ama eğer uzun basınca çalışmasını istiyorsan ve sadece bıraktığında collision'ların birbirine girmesini istemiyorsan bize nasıl bir sistem yaptığını söylemen lazım. Yaptığın sistemin fotoğraflarını atarsan sana yardımcı olabilirim.

Siz soruyu yanlış anlamışsınız.
 
cahitburak' Alıntı:
coldwar' Alıntı:
Merhaba arkadaşlar, aranıza yeni katıldım. :)

Bir proje üzerinde çalışıyorum, TPS karakter üzerinden FPS kamera açısı ile bir oyun yapmaya çalışıyorum. Karakter hareketleri ve eğilip kalkma sistemini mevcut. Sorun şu ki, karakter bir statik objenin atlında eğilerek girdiğinde, daha o objenin altından dışarıya çıkmadan eğilme tuşunu bırakırsam kalkıp objenin içine giriyor ve ayakta hareket etmeye devam ediyor. Örneğin bir havalandırma boşluğuna eğilerek girdik diyelim, daha o havalandırma boşluğundan çıkmamışken eğilme tuşunu bırakınca karakter ayağa kalkabiliyor ve yürümeye devam ediyor. Bir türlü çözemedim olayı.

Eminim ki basit bir blueprint sistemi ile çözmek mümkündür, ama neleri kombine etmem lazım bilmiyorum.

Karakter eğildiğinde collisiona ne oluyor? Capsule collider yüksekliğini mi azaltıyorsunuz? Eğer öyleyse eğilme tuşu bırakıldığında yukarı yönlü ve karakterin kalktığı yere kadar uzanacak bir Line Trace gönderin. Line Trace bir şeye çarpmadığında artık collider yüksekliğini eski hale getirebilir, animasyon durumunu değiştirebilirsiniz. Aksi takdirde hiçbir şey yaptırmamalı, eğilmeye devam ettirmelisiniz.


furkanxdgs4' Alıntı:
Crouch tuşunun sonuna FlipFlop ekleyebilirsin. Pressed ve released'i FlipFlop'a bağla ve A çıkışına ilk basılınca ne olacağını, B çıkışına 2. kez basılınca işlemin sona erip normale dönmesi için gereken node'ları bağlarsan uzun basmaya gerek kalmaz. Ama eğer uzun basınca çalışmasını istiyorsan ve sadece bıraktığında collision'ların birbirine girmesini istemiyorsan bize nasıl bir sistem yaptığını söylemen lazım. Yaptığın sistemin fotoğraflarını atarsan sana yardımcı olabilirim.
furkanxdgs4' Alıntı:
Crouch tuşunun sonuna FlipFlop ekleyebilirsin. Pressed ve released'i FlipFlop'a bağla ve A çıkışına ilk basılınca ne olacağını, B çıkışına 2. kez basılınca işlemin sona erip normale dönmesi için gereken node'ları bağlarsan uzun basmaya gerek kalmaz. Ama eğer uzun basınca çalışmasını istiyorsan ve sadece bıraktığında collision'ların birbirine girmesini istemiyorsan bize nasıl bir sistem yaptığını söylemen lazım. Yaptığın sistemin fotoğraflarını atarsan sana yardımcı olabilirim.

Siz soruyu yanlış anlamışsınız.
Soruyu yanlış anlamışım gibi görülebilir ama sizin dediğiniz cevap kafamda oluştu. Lakin arkadaşa anlatmadan önce arkadaştan kendi yaptığı sistemin fotosunu oyüzden istedim. Dediğiniz gibi collision yüksekliğini ayarlayıp ayarlamadığını bilmediğimden resim istedim. Bir de FlipFlop sistemini belki bilmiyordur diye ekledim.
 
Kendimi senin yerine koydum ve ben olsam ne yapardım diye düşündüm. Aklıma gelen ilk şey trigger box oldu. Bir kaç yöntem vardır tabi ki fakat kolay olduğu için trigger box kullanırdım diye düşündüm. Laf aramızda bu trigger kullanımı bazen hayat kurtarıyor :D

Trigger box'ı karakterin eğilmesi gereken yerden başlayarak, kalkması gereken yere kadar uzatırdım. Sonra karakterin eğilme veriable değerini trigger'a set ederdim. Özetle karakter bu trigger içerisindeyken hiç bir şekilde ayağa kalkamayacaktır. Trigger bitince eski haline geri gelecektir. En basit haliyle bunu yapardım heralde.
 
Arkadaşlar cevaplarınız için çok sağolun, bu tarz bir sorunla karşılaştığımda ne yapmam gerektiğini öğrenmiş oluyorum. Size kurduğum sistemin fotoğraflarını atayım gerçi zaten soruyu hepiniz anlamış ve gereken cevabı vermişsiniz. Line Trace olayını hiç bilmiyorum daha önce hiç uygulamadım, nasıl yapacağımı araştırmam gerekecek. Trigger Box kullandım ancak eğilmeyi tetikleyip o şekilde tutmasını sağlamak için ne yapmam lazım bilmiyorum yine. :D

Eğilme variable değerini set etmenin açılımı nedir mesela? Trigger'ı kur, level blueprint'e gir, begin overlap'den trigger'a bağla, trigger'dan variable'a bağla şeklinde mi kombinasyon? blueprintlerde çok yetersizim arkadaşlar o yüzden terimlerden çıkarım yapamıyorum. "Şuraya gir, şundan şuna ok çek, ucuna şunu bağla, ondan şuna ok çıkar ve ucuna şunu bağla" şeklinde anlayabilirim ancak. 

@cahitburak, hocam line trace tekniğini yabancı bir forumda da benimle aynı problemi yaşayan biri için çözüm olarak sunmuşlar. Ancak yabancı olması + "line trace kullan" denilmesi sebebi ile yapmam gereken şeyin ne olduğunu çözemedim yine. Line Trace nereden çekilir? Hangi editöre girmek lazım, neyi nereye bağlamak lazım tutorial gerekiyor aslında bana. Ama soruyu tam olarak anlamışsın, ben karakter blueprint'indeki "CharacterMovement (inherit)"' in details panelinden "Can Crouch" ı işaretledim. Bu sayede eğildiğim zaman collider yüksekliği de karakter animasyonum ile beraber alçalıyor. Bu sayede objelerin altına giriyorum, ama objenin altındayken tuşu bıraktığım zaman mal gibi geri kalıyor ayağa. Kalkmaması lazım doğru anlamışsınız. Çözüm line trace'den geçiyorsa bunu öğrenmem lazım. 

RESİMLER:

dXXrgZ.png


byy17Y.png


A33Vr7.png


Bu arada karekterim 2D BlendSpace şeklinde hareket ediyor. Her yöne koşabiliyor ve shift ile hızlı koşabiliyor. Eğilip kalktıktan sonra bu hızlı koşma ve yürüme hızlarında bir değişiklik oluyordu o sebeple EĞİLME blueprintlerinin sonunu (set) max walk speed node'u ile bağladım o şekilde çözüldü sorunum. Kafa karışıklığı olmasın diye belirtiyorum bunu, normal şartlarda bağlamıyorlar çünkü sonuna bu nodları.

Şimdi tavsiye etmiş olduğunuz şeyleri, bu son (set) max walk speed node'lardan yeni bağ çıkarıp mı bağlayacağım?
 
Trigger box olayında dediğin şeyi kastetmiştim ben de. Fakat şimdi düşündüm de o şekilde bazı sorunlar ortaya çıkabilirdi. Örneğin trigger box içerisindeyken karakter eğilecek, burası tamam fakat tekrar eğilme tuşuna basıp bıraktığında karakter ayağa kalkacaktı. Bu da bir bug olacaktı. Çünkü On Actor Begin Overlap nodu sadece bir defa için sorguyu çağırır, devamında karakter hala trigger içinde mi diye kontrol etmez. Eğilme tuşu tekrar aktif edildiğinde ayağa kalkması için emir gider ve kalkar. Kalkmasını engelleyecek bir şey yok ortada. Dolayısıyla karakterin trigger içerisinde mi yoksa değil mi sürekli bunu kontrol edecek bir şeylere ihtiyacın olacak.

Yukarıda bu olayı olabildiğince basitleştirerek anlattım. Gelelim sorunun çözümüne. Sürekli kontrol etmesi için bir Event Tick'e ihtiyacın var. Bunu trigger box ile birlikte kullanmanın yolu ise "Gate" noduya mümkün oluyor. Hemen aşağıdaki gibi yaparsan çalışması lazım;

dXXADZ.png


Yukarıdakileri açıklamak gerekirse; Event Tick sürekli kontrol sağladığı için "Gate" noduna kadar geldi fakat kapı kapalı. Kapının açılması için, karakterimizin trigger içerisine girmesi gerekli. Girdiği anda kapı açılacak ve Event Tick karakterin sürekli olarak eğildiğini ve kalkmaması gerektiğini söyleyecek. Karakter trigger içerisinden çıktığı anda ise "On Actor End Overlap nodu çalışacak ve hem karakter tekrar ayağa kalkacak hem de "Gate" nodundaki yolu tekrar kapatacak. Böylelikle Event Tick kapıdan geçemeyerek eğilme bilgisine ulaşamayacak. 
Bu arada not olarak belirteyim; yukarıdaki "Sequence" nodu gelen execute (Beyaz ana kabloyu) çoğaltmak için kullanılır, bilgin olsun. Ek olarak bu şema Level Blueprint içerisinde yapılmıştır.

Umarım açık olarak anlatabilmişimdir :)
 
İlk öncelikle terim kavramları öğrenmelisiniz bence. Eğlence Ustası adlı Youtube kanalı her şeyi en basit yöntemiyle anlatıyor. İlk önce terimleri kavrayabilmek için o videoları izleyebilirsin. Ama yaptığı sistemler kaliteli olmuyor. Buyüzden o sistemleri oyunda kullanmaya çalışma. Sadece kavramları kavramak adına izle ve dediklerini yapmaya çalış. Sonra da rahatlıkla dediklerimizi anlamaya başlarsın.
 
@FURKAN, evet çok doğru. Adı anıldığında direk neyi kastettiğini anlamam lazım yardım alabilmek için. 

Ama yinede yardımlarınız işe yaradı, olayı line trace ve trigger box ile çözdüm. İkisini bir arada kullandım çünkü birini yapınca ufak bir bug oluyordu. (Sadece line trace kullanınca: Nesnenin altından çıkıncaya dek ayağa kalkmıyordu gayet güzel şekilde, ancak nesnenin altından çıkınca da ayağa kalkmıyordu ta ki yeniden eğilme tuşuna basana kadar. Buna rağmen shift'e basınca eğilerek spin atmaya devam ediyordu çömelmiş vaziyette iken, bende trigger box ile alandan çıkınca karakteri kalkmaya zorlayan uncrouch variable'ını bağladım ve nesnenin altından çıkınca otomatikman ayağa kalkıp normale dönmesi ile bug kapanmış oldu)

Yardımlarınız için teşekkürler.
 
coldwar' Alıntı:
Arkadaşlar cevaplarınız için çok sağolun, bu tarz bir sorunla karşılaştığımda ne yapmam gerektiğini öğrenmiş oluyorum. Size kurduğum sistemin fotoğraflarını atayım gerçi zaten soruyu hepiniz anlamış ve gereken cevabı vermişsiniz. Line Trace olayını hiç bilmiyorum daha önce hiç uygulamadım, nasıl yapacağımı araştırmam gerekecek. Trigger Box kullandım ancak eğilmeyi tetikleyip o şekilde tutmasını sağlamak için ne yapmam lazım bilmiyorum yine. :D

Eğilme variable değerini set etmenin açılımı nedir mesela? Trigger'ı kur, level blueprint'e gir, begin overlap'den trigger'a bağla, trigger'dan variable'a bağla şeklinde mi kombinasyon? blueprintlerde çok yetersizim arkadaşlar o yüzden terimlerden çıkarım yapamıyorum. "Şuraya gir, şundan şuna ok çek, ucuna şunu bağla, ondan şuna ok çıkar ve ucuna şunu bağla" şeklinde anlayabilirim ancak. 

@cahitburak, hocam line trace tekniğini yabancı bir forumda da benimle aynı problemi yaşayan biri için çözüm olarak sunmuşlar. Ancak yabancı olması + "line trace kullan" denilmesi sebebi ile yapmam gereken şeyin ne olduğunu çözemedim yine. Line Trace nereden çekilir? Hangi editöre girmek lazım, neyi nereye bağlamak lazım tutorial gerekiyor aslında bana. Ama soruyu tam olarak anlamışsın, ben karakter blueprint'indeki "CharacterMovement (inherit)"' in details panelinden "Can Crouch" ı işaretledim. Bu sayede eğildiğim zaman collider yüksekliği de karakter animasyonum ile beraber alçalıyor. Bu sayede objelerin altına giriyorum, ama objenin altındayken tuşu bıraktığım zaman mal gibi geri kalıyor ayağa. Kalkmaması lazım doğru anlamışsınız. Çözüm line trace'den geçiyorsa bunu öğrenmem lazım. 

RESİMLER:

dXXrgZ.png


byy17Y.png


A33Vr7.png


Bu arada karekterim 2D BlendSpace şeklinde hareket ediyor. Her yöne koşabiliyor ve shift ile hızlı koşabiliyor. Eğilip kalktıktan sonra bu hızlı koşma ve yürüme hızlarında bir değişiklik oluyordu o sebeple EĞİLME blueprintlerinin sonunu (set) max walk speed node'u ile bağladım o şekilde çözüldü sorunum. Kafa karışıklığı olmasın diye belirtiyorum bunu, normal şartlarda bağlamıyorlar çünkü sonuna bu nodları.

Şimdi tavsiye etmiş olduğunuz şeyleri, bu son (set) max walk speed node'lardan yeni bağ çıkarıp mı bağlayacağım?


TriggerBox ile ilgili sorun her yere TriggerBox koymak zorunda olmakla ilgili. TriggerBox aslında tam tersine eğilerek geçilen boşluklara konulabilir. Karakter, TriggerBox ile End Overlap olduğunda artık ayağa kalkmaya uygundur. Yine de dediğim gibi her eğilebilir boşluğu Trigger ile doldurmak gerekecek.Collision bulunan yerlerde bir fizik bilgisi zaten var. Neden bunu kullanmayalım?

Bunun yerine yapmanız gereken sadece şu. Eğer karakter Crouch pozisyondaysa Tick Event üzerinde Line Trace by Channel fonksiyonunu kullanarak karakter pozisyonundan başlayıp, tahminen karakter pozisyonu + Up Vector * 100 kadar bir mesafeye Line Trace uygulamak. Line Trace, bu aralık içinde bir şeye çarpıyor yada çarpmıyor bilgisini verecektir size. Eğer çarpmıyorsa; örneğin CanStandUp isimli kendinizin oluşturacağı boolean bir değişkeni true yapmalısınız. Daha sonra her şey eskisi gibi devam etmeli ve eğilme tuşu bırakıldığında ekstradan CanStandUp değerinin de true olduğunu denetleyip kalkmasına öyle izin vermelisiniz. Yani burada yapmanız gereken Set Crouching False yaptığınız bölümden hemen önce bir de CanStandUp değerinin True olup/olmadığını denetlemek.

Basit bir örnekle Line Trace'in nasıl çalıştığını inceleyin. Ayrıca ipucu olarak Line Trace ile aynı değerleri kullanarak bir de Draw Debug Line yardımcı fonksiyonu ile Line Trace'i görselleştirebilirsiniz. Sorununuz devam ederse yardımcı olmak için buradayız.
 
Çok teşekkürler, sizden bir önceki mesajımda yazmış olduğum gibi yardımlarınız sayesinde sorunu çözdüm. Line Trace kullandım, ateş etmekle alakalı bir örneğini buldum onu izledim ne olduğunu irdeledim önce, sonra aynı mantığı kendi projemde kullandım 1-2 ufak değişiklikle bu sayede çözüldü. Trigger tek başına geçici bir çözüm, her yere koymak gerekiyor evet. Line Trace sürekli yanımızda geliyor sürekli çalışma halinde kalıcı çözüm oluyor bu tip şeyler için.