nurisural

Üye
8 Eyl 2015
102
9
18
(48) Muğla
Merhaba arkadaşlar,

Tilt event'i hakkında bir kaç sorum olacaktı.

Pawn'ı tilt event'iyle Level Blue Print'te hareketlendiriyorum. Ve Pawn'ı (ismi nuripawn) kendi blueprint'inde event hit ile destroy edip tekrar spawn edince tüm tilt kontrolü kaybediyorum.(Çünkü oluşturduğum yeni pawn aslında levelblue print'teki ilk oluşan pawn'ın yeni bir kopyası ve dosyalandırma şekli pawn(01) gibi). Tilt kontrollerini tekrar geri kazanmak için ne yapmalıyım?

Yada pawn'ın kendi blueprint'inde hareketlendirme yaparsam hit Event'i kaybediyorum. Acaba Tilt ile pawn'ı hareketlendir konusunda en iyi yer pawn blueprint'i midir?

Tilt ile hareketlendirme konusunda yeni bir player controller blueprint'i oluşturdum ama burada hiçbir hareket elde edemedim.

Resim de oluşturduğum pawn referansını uygun set edersem sorunumun çözüleceğini düşünüyorum ama bir çözüm üretemedim. Yardımlarınızı rica ederim.
 

Ekli dosyalar

  • lbp.png
    lbp.png
    237.2 KB · Görüntüleme: 15
Merhaba.

İlk olarak, kontrolleri nerede yapacağınıza dair 2 seçeneğiniz var.
1. Doğrudan Pawn üzerinde yapabilirsiniz.
2. PlayerController üzerinde yapabilirsiniz.
Eğer tek oyunculu bir oyunda tek çeşit pawn kullanıyorsanız; 1.sini yapmanızda herhangi bir sakınca yok. Aksi durumlarda mutlaka 2. yaklaşımı kullanmalısınız.

Asıl sorunuza gelecek olursak, Posses işlemini (yani oyuncunun kontrol ettiği pawnı seçme işlemini) nerede yaptığınızı göremedim. Eğer yapmadıysanız sorununuz bu olabilir. Yeni bir pawn oluşturduysanız ve oyuncunun bu pawnı kontrol etmesini istiyorsanız Posses nodunu kullanmalısınız.

Buradaki örnekte 3 farklı Pawn (Character) 1-2-3 tuşları ile seçilmiş oluyor:
Pawns9.jpg


Eğer doğru Pawn referansını seçmekle ilgili bir sorununuz varsa; yeni pawnınızı nerede spawn ettiğinizi de göstermelisiniz. Yeni spawn ettiğiniz Pawnı Posses etmelisiniz.

Son olarak bu konuyu incelemeniz de size yardımcı olacaktır:
https://docs.unrealengine.com/latest/INT/Gameplay/HowTo/RespawnPlayer/Blueprints/index.html
 
cahitburak' Alıntı:
Merhaba.

İlk olarak, kontrolleri nerede yapacağınıza dair 2 seçeneğiniz var.
1. Doğrudan Pawn üzerinde yapabilirsiniz.
2. PlayerController üzerinde yapabilirsiniz.
Eğer tek oyunculu bir oyunda tek çeşit pawn kullanıyorsanız; 1.sini yapmanızda herhangi bir sakınca yok. Aksi durumlarda mutlaka 2. yaklaşımı kullanmalısınız.

Asıl sorunuza gelecek olursak, Posses işlemini (yani oyuncunun kontrol ettiği pawnı seçme işlemini) nerede yaptığınızı göremedim. Eğer yapmadıysanız sorununuz bu olabilir. Yeni bir pawn oluşturduysanız ve oyuncunun bu pawnı kontrol etmesini istiyorsanız Posses nodunu kullanmalısınız.

Buradaki örnekte 3 farklı Pawn (Character) 1-2-3 tuşları ile seçilmiş oluyor:
Pawns9.jpg


Eğer doğru Pawn referansını seçmekle ilgili bir sorununuz varsa; yeni pawnınızı nerede spawn ettiğinizi de göstermelisiniz. Yeni spawn ettiğiniz Pawnı Posses etmelisiniz.

Son olarak bu konuyu incelemeniz de size yardımcı olacaktır:
https://docs.unrealengine.com/latest/INT/Gameplay/HowTo/RespawnPlayer/Blueprints/index.html

Cevabınız için teşekkür ederim.

Anladığım kadarıyla levelblue print'de pawn'ı kontrol etmek pek akıllıca değil. (Ki ben level blueprint'te daha çok denedim.)

Ayrıca pawn'ın blueprint'inde posses'ı hiç kullanmadım. Gerekli değişiklikleri yapıp sıkıntı ile karşılaşırsam tekrar yardımlarınızı rica edebilirmiyim? Ayrıca sorunu çözmem durumunda blueprint'i sizlerle burada paylaşırım. Umarım birilerine yardımım da dokunur.

İyi çalışmalar dileklerimle,
 
Pawnı level bp'de kontrol etmek hiç de doğru değil ama Posses işlemi LevelBP yada GameMode gibi otoriter(?) BPlerde yapılır. Böylece referansına erişmekte de sorun yaşamazsınız.

İşinize yaradıysa ne mutlu. Her şeyi sorabilirsiniz. Tam da böyle sorulara ihtiyacımız var. Tasarım açısından kritik sorular bunlar.

Bu arada bir sonraki ekran görüntünüzü paylaşacağınızda sorununuzla daha ilgili olursa iyi olur. İlk sorunuzda Pawn'ın Posses edilmesi yada Pawn referansı ile ilgili bir sorundan bahsetmiş ama sadece Pawn'ın posizyonu ile ilgili bir görsel paylaşmışsınız.
 
cahitburak' Alıntı:
Pawnı level bp'de kontrol etmek hiç de doğru değil ama Posses işlemi LevelBP yada GameMode gibi otoriter(?) BPlerde yapılır. Böylece referansına erişmekte de sorun yaşamazsınız.

İşinize yaradıysa ne mutlu. Her şeyi sorabilirsiniz. Tam da böyle sorulara ihtiyacımız var. Tasarım açısından kritik sorular bunlar.

Bu arada bir sonraki ekran görüntünüzü paylaşacağınızda sorununuzla daha ilgili olursa iyi olur. İlk sorunuzda Pawn'ın Posses edilmesi yada Pawn referansı ile ilgili bir sorundan bahsetmiş ama sadece Pawn'ın posizyonu ile ilgili bir görsel paylaşmışsınız.

Tekrar merhaba Cahit Bey,

Yapmak istediğim oyun türü basit bir shoot them all aslında. Kısaca özetlemek gerekirse; Sabit hızla ilerleyen (Hiç geriye gelmeyen ama örneğin 3 dk sonra duran ) bir kamera ve bu kameranın içerisinde akıllı cihazların tilt hareketleriyle ileri geri hareket edebilen ama ekranın dışına çıkamayacak bir pawn'ım var. Bu arada düşman olarak da actor blue print'leri de bir trigger ve matinee aracılığıyla hareketlendiriyorum. Score, life gibi instance'larımı ve fire button'umu da level blue print'den idare ediyorum.

Level Blue Print'imin ekran görüntüsünün tamamını sizlerle paylaşıyorum.

Pawn ve enemy actor'lerde ise gameinstance'a score ve life set'leri dışında sadece event hit var.

Aslında pawn'ı destroy edene kadar oyunun neredeyse motorunun tamamını bitirmiştim.

Bu açıdan bakılırsa level blue print'imi inceleyerek neyi nerede yapmam konusunda eleştiri ve görüşlerinize ihtiyacım var.

Eğer pawn ve actor'lerin blueprint'lerini de görmek isterseniz bir sonraki yorumda onları da gönderebilirim.

İyi çalışmalar dileklerimle,


Aşağıdakiler de dosya limitinden dolayı yükleyemediklerim.
 

Ekli dosyalar

  • 1.jpg
    1.jpg
    255.8 KB · Görüntüleme: 10
  • 2.jpg
    2.jpg
    273 KB · Görüntüleme: 6
  • 3.jpg
    3.jpg
    251.3 KB · Görüntüleme: 2
  • 4.jpg
    4.jpg
    223.8 KB · Görüntüleme: 1
  • 5.jpg
    5.jpg
    228.8 KB · Görüntüleme: 5
  • 6.jpg
    6.jpg
    216.9 KB · Görüntüleme: 2
Oyununuz çok oyunculu olmadığı için LevelBP kullanmış olmanız görmezden gelinebilir ama Pawn'ı yok edip tekrar oluşturduğunuzu düşünürsek, yeni Pawn'ın referansını bu kod üzerinde entegre etmenizde zorlanmanıza şaşmamalı.

Object Oriented Programming(OOP) temel amaçlarından bir tanesi, belirli bir nesnenin kendisini ilgilendiren tüm işlemleri yine kendisinin temsil ettiği sınıf içerisinde yaparak kod sadeliği, anlamsal bütünlük gibi sonuçlar elde etmektir. Örnek vermek gerekirse; "Araba" isimli bir sınıf hızlanma, durma gibi eylemleri kendini temsil eden sınıfın içerisinde yapmalıdır. Eğer bir sebepten dış etken ona müdahale ediyorsa; ancak o zaman dışarıdan müdahale edilmelidir. Mesela araçların yeni bir pistte yarışmak üzere sıralanması LevelBP'de yapılabilir ama Input'a göre aracın hızlanması, yavaşlaması sadece aracı ilgilendirir/ilgilendirmelidir. Böylece daha iyi bir tasarım yapmış, projeniz büyüdükçe kontrol etmeniz zorlaşmaz, karmaşıklığı önlemiş olursunuz. Tabi bunun için bilinmesi gereken başka tasarım yaklaşımları da vardır.

İkinci olarak aslında böyle bir Pawn için Character ve CharacterMovement kullanmak çok yanlış/gereksiz. Doğrusu baştan aşağıya yeni bir Pawn yazılması gerekir. Bu doğrudan Pawn'dan kalıtım almalıdır. Daha üst seviye bir Pawn'dan(Character gibi) değil. Böylece Pawn kontrolü, Pawn'ın içerisinde ve çok daha sade bir kod ile yapılabilirdi. Sizin yaklaşımınızda birden çok oyuncu yada kontrol edilmesi gereken Pawn olduğunu düşünürseniz, kod karmaşıklığınız kartezyen hatta üssel olarak artacaktır.


Diğer Notlar

Bir oyun içerisinde zaman "DeltaSeconds" değeri toplanarak hesaplanmaz. "GetRealTimeSeconds" oyun başladığı zamandan beri geçen süreyi verir zaten. Siz belirli bir yerden sonra geçen süreyi hesaplayacaksanız o belirli yerde Get Real Time Seconds değerini mesela x değişkenine alırsınız sonra geçen süreyi ekrana yazdıracağınızda "Get Real Time Seconds - X" işlemini yaparsınız.

Ateş etme ile ilgili bir tavsiye vermek gerekirse, ateş gecikmesi (2 ateş etme arası beklenmesi gereken süre) gibi kontroller yaptıktan sonra Projectile'ı Spawn eder etmez ses oynatmanızı tavsiye ederim. Ses oynattıktan sonra belki de Projectile'ı Spawn edemeyeceksiniz.

Transformasyon değerlerini belirli bir sınır içerisinde hareket ettirecekseniz; lineer interpolayon (Lerp) kullanmanızı öneriririm. Hem kolaylık sağlar hem de belirlediğiniz sınır içerisinde kalmasını garanti eder. Özellikle de açı değerleri arasındaki sorunu çözmede ve Gimbal Lock sorunu ile karşılaşmamak için.

AddActorLocalRotation nodunu kullandığınız yerde DeltaSeconds' değerini 0 ile çarpmışsınız. Bir işe yaramıyor; daha bitmemiş olduğunu tahmin ediyorum. Yine de tek tek X Y Z bileşenleri ile çarpmanıza gerek yok, doğrudan FRotator ile çarpabilirsiniz.
 
Merhaba Cahit Bey,

Tüm önerilerinizi dikkate alarak oyunu yeniden şekillendireceğim. İşim bitince sonuçları buradan tekrar sizlerle paylaşırım.

Sevgi ve saygılar,