leonscottkfm

Unreal MVP
31 May 2015
1,540
5
219
63
28
(34) İstanbul Avrupa
store.steampowered.com
Merhaba, Bir projemde oyuncu diskler var.Fakat bunlar çeşitli yani birisi parlak diğeri ışıklı diğeri kendine has başka bir özellik barındırıyor vs ve her birinin de kendi özelliği bulunmakta.

Ben de bu sistemi yapmak için bir masterbp oluşturdum bunları da onun altdalı yaptım. Çünkü genel olarak aynı özellikleri barındıracaklar fakat kendi ekstra özellikleri olacağı için bu şekilde yaptım.

Oyun başladığında beni seçtiğim disk ile posses yapsın istiyorum. Bunu nerede yapabilirim ? Masterbp içerisinde yapamam herhalde. Mesela ışıklı olan diskimi nasıl posses ederim? Cast edilmesi lazım ama object kısmına ne koyacağım.

Öncesinde bir UMG widget aracılığı ile karakter diski seçiliyor bu da gameinstancedeki bir değişkene kaydoluyor. Daha sonra oyunun mapı açılıyor ve gameinstance den çekmeye çalışıyorum.

World ayarlarında kendi gamemode im ve defaultpawn kısmı ise discmasterbp

 
Yukarıda ki kodda bir enum ile hangisini alman gerektiğini check ediyorsun. Ancak ortada "Possess" yapılacak bir pawn olması lazım. Şu an o yok."Cast to Lighter" node undaki Lighter ın bir pawn olduğunu tahmin ediyorum ama onun object kısmına bir şey bağlamamışsın. Yani o bir şeyi cast yapacak ama ne cast yapacağını bilmiyor şu an. Herhangi bir şekilde bir pawn a ulaşman gerek. Bunu kendin yaratabilirsin ( SpawnActor nodu ile) ya da oyuna önceden koyduğun pawn lardan bulabilirsin (GetAllActorsofClass ile.). Yani Possess bir pawn istiyor. Ona bir şeyi cast yaparak koymak itemişsin ama orata cast edilecek bir şey yok. Çünkü possess kendi yaratamaz. Yaratılmış bişeyi ele geçirir. Ancak bir başka hususu da belirteyim.
  Eğer oyunda seçimle kullanacağın karakteri değiştirmeye çalışıyorsan bu şekilde yapılabilir ama asıl yapılması gereken yolu bu değil. GameMode da GetDefaultClassForController diye bir fonksiyon var. Onu override edeceksin. Şu an default olarak o game mode da hangi pawn ı belirlediysen onu verecek şekilde ayarlanmış vaziyette. Sen bunu override edip (üstüne yazmak diyelim) sen ne istiyorsan onu vermesini sağlayabilirsin. Böylece gamemode beginplay de direk o istediğin class ta bir oyuncu yaratır. Yani bu işin gerçekte yapılması gereken şekil bu. Ama senin sistemde çalışır. Ben sadece belirtmek istedim.
 




Az önce kendim de test etmiştim doğrudur. İlk önce spawn ediyorduk ben bunu unutmuşum.Fakat varolan karakterde spawn oluyor bunu da engellemek için dediğin gibi overriding yapmak lazım o nasıl yapılır bilmiyorum ama onu da bulurum ben şimdi sağol. Bir de bu spawn olayını gamemode içerisinde yapmam zorunlu mu ? Player starta spawn etmek istiyorum çünkü ben. Ama ona da buradan ulaşamıyorum. Level içerisinde olduğundan.

Çözüm: Default pawnı clear yaptım , artık hiçbir şekilde pawn yaratmıyor. Direkt olarak istediğim karakteri spawnlayıp ele geçiriyor.