s1studios

Yeni üye
27 Haz 2022
27
4
3
(34) İstanbul Avrupa
Merhabalar.

Bir level'da widget içinde butona tıklayıp başka bir level'da istediğim yerde actorun spawn olmasını istiyorum.


Bu kodda bir hata mı var? Gameinstance'de yenispawn diye değişken oluşturdum ve nerde spawn olacaksa koordinatlarını girdim.

Leveller arası bir actoru spawn ederken başka neye ihtiyaç var yardımcı olabilir misiniz? Yani kısaca 1.levelda bir butona basacağım ve 2.level'da bir aktör spawnlanacak. Yukarıdaki koda göre 1.level'da spawn olmaya devam ediyor.
 
BP in tamamen yanlış.
Önce şu çok önemli 2 kuralı bir kenara yazmalısın. Çünkü çok önemli:
1. Unreal Engine de aynı anda yalnızca 1 level açık olabilir. Başka bir deyişle iki level aynı anda açık olamaz.
2. Sadece belli bir anda açık olan level üzerinde işlem yapabilirsin. Açık olmayan level üzerinde hiç bir şekilde işlem yapamazsın.

Verdiğin BP de şunları yapıyorsun:
1. İçinde bulunduğun level içerisinde bir actor spawn ediyorsun.
2. GameInstance taki değişkenine spawn koordinatını koyuyorsun.
3. Başka bir level açıyorsun.

Yapabileceğin şey şu:
1. Widget ta butona tıkladığında istediğin koordinatı GameInstance taki değişkene koy.
2. Hemen ardından diğer levelini aç openlevel kullanarak.
3. Diğer level içerisinde herhangi bir yerde BeginPlay kullanarak (level bp olur character bp olur aklına ne gelirse. Diğer level de olması yeterli) GameInstance ta önceki level de koyduğun koordinatı oku al.
4. Bu koordinatta bir actor spawn et.
 
  • Beğen
Tepkiler: s1studios
Ya hocam bu doyurucu cevap için çok teşekkür ederim.

Gerçekten burası bir şeyleri öğrenmek için iyi bir yer. Yabancı forumlarda bile araştırdım ancak şu netlikte bir cevap alamadım. Akşam eve gittiğimde denemesini yapıp sonucu burada paylaşacağım.
 
Hocam selamlar.
Öncelikle işe yaradığını söyleyeyim. Ancak şöyle bir durum var. Burada herhangi bir koşul yok. Yani benim aslında istediğim şey 1.level'da butona tıklarsam eğer 2.level'da ilgili nesnenin spawn olması. Şu andaki durumda 1.level'daki widget'ta buton oluşturuyor ve openlevel yaparak 2.level'ı açıyorum. Gameinstance vasıtasıyla (event begin play) actor u spawnlıyorum. Benim yapmaya çalıştığım şey ise eğer o butona tıkladıysak 2.level'da spawn olsun. Çünkü ben 1.level'da başka bir butona tıklayıp 2.level'ı actor spawnlamadan da açabilmeliyim. Yani öyle bir seçeneğim de olmalı.

Özetle hocam
1.Level'da 2 tane buton um var. 1.Buton'a tıklarsam 2.Level'da actor spawnlanır. Şayet 2.Buton'a tıklarsam 2.Level'da herhangi bir şey spawnlamadan doğruca 2.level'a geçerim.

:rolleyes:
 
Hocam selamlar.
Öncelikle işe yaradığını söyleyeyim. Ancak şöyle bir durum var. Burada herhangi bir koşul yok. Yani benim aslında istediğim şey 1.level'da butona tıklarsam eğer 2.level'da ilgili nesnenin spawn olması. Şu andaki durumda 1.level'daki widget'ta buton oluşturuyor ve openlevel yaparak 2.level'ı açıyorum. Gameinstance vasıtasıyla (event begin play) actor u spawnlıyorum. Benim yapmaya çalıştığım şey ise eğer o butona tıkladıysak 2.level'da spawn olsun. Çünkü ben 1.level'da başka bir butona tıklayıp 2.level'ı actor spawnlamadan da açabilmeliyim. Yani öyle bir seçeneğim de olmalı.

Özetle hocam
1.Level'da 2 tane buton um var. 1.Buton'a tıklarsam 2.Level'da actor spawnlanır. Şayet 2.Buton'a tıklarsam 2.Level'da herhangi bir şey spawnlamadan doğruca 2.level'a geçerim.

:rolleyes:

Boolen'lar bu noktada işimi görür mü sizce?
 
Boolen'lar bu noktada işimi görür mü sizce?
İlk mesajımdaki 2 kural kesin. Bunları değiştirmenin bir yolu yok. Ama yapmaya çalıştığın şey basit.
1. Dediğin gibi bir boolean ile yapabilirsin. Basıldıysa GameInstance ta bir boolean i true basılmadıysa false yaparsın. Diğer level de bu boolean i "branch" ile kontrol edip ona göre spawn olup olmamasını sağlayabilirsin.
2. Daha kısa yol: Diğer level de lokasyonu kontrol ettiğinde bu 0,0,0 noktası ise bir önceki level de buton basılmamış dolayısı ile gameinstance ta lokasyon set edilmemiş demektir. Ona göre spawnlarsın ya da spawn lamazsın.

Bu problemi belki 20 değişik şekilde çözebilirsin. Kalem senin elinde. Ancak daha bu seviyede isen daha temel daha basit şeyler çalışarak biraz gelişmeni yavaş yavaş daha komplex şeylere geçmeni öneririm.
 
  • Beğen
Tepkiler: s1studios
Hocam cevap için teşekkürler. Boolen ile açıkçası yapamadım. Bende component kullanayım dedim. Player characterim de component içinde bazı değerleri kayıt edeceğim. Widget içinde butona tıkladığımda bir değer elde edecek daha sonra 2.level'da bu değeri kontrol edecek. Bu değer varsa spawnlayacak. Integer değişkeni ile deneyeceğim :).

Benim için bir yol göstermiş oldunuz. Başarabilirsem yazarım. Muhtemelen save ve load da etmem gerekecek değerleri ki okuyabilsin.
 
Hocam cevap için teşekkürler. Boolen ile açıkçası yapamadım. Bende component kullanayım dedim. Player characterim de component içinde bazı değerleri kayıt edeceğim. Widget içinde butona tıkladığımda bir değer elde edecek daha sonra 2.level'da bu değeri kontrol edecek. Bu değer varsa spawnlayacak. Integer değişkeni ile deneyeceğim :).

Benim için bir yol göstermiş oldunuz. Başarabilirsem yazarım. Muhtemelen save ve load da etmem gerekecek değerleri ki okuyabilsin.
Şöyle bi durum var. Player character içinde component içine bazı değerleri kayıt etsen de yeni level'a geçtiğinde o component 0'dan oluşturulacak. Yani kayıt ettiğin değer diye bi değer olmayacak (aslında default olan olacak).

Ergin abi'nin "game instance" da kaydet demesinin sebebi game instance level değişse de olduğu gibi kalıyor.

Save load'lık bir işin yok. Tabi oyunu açıp kapatınca da çalışsın istiyorsan o ayrı.

Kıssadan hisse: Game instance harici nerede kaydedersen kaydet Diğer level'a geçtiğinde o veri kaybolacak.
 
Hocam cevap için teşekkürler. Boolen ile açıkçası yapamadım. Bende component kullanayım dedim. Player characterim de component içinde bazı değerleri kayıt edeceğim. Widget içinde butona tıkladığımda bir değer elde edecek daha sonra 2.level'da bu değeri kontrol edecek. Bu değer varsa spawnlayacak. Integer değişkeni ile deneyeceğim :).

Benim için bir yol göstermiş oldunuz. Başarabilirsem yazarım. Muhtemelen save ve load da etmem gerekecek değerleri ki okuyabilsin.
Save Load edebilirsin ama bu değer kalıcı olmayacaksa gereksiz.

GameInstanceye git.
Button1 adında bir boolean ( True False ) değer oluştur.
Widgetta button1 e tıkladığında GameInstancedeki o Button1 Booleanı True olarak değiştir.

Sonra Level2 yüklendiğinde Branch ile GameInstancedeki o Button1 Boolean değeri çek ve = True ise Spawn Actor çalıştır.
 
Şöyle bi durum var. Player character içinde component içine bazı değerleri kayıt etsen de yeni level'a geçtiğinde o component 0'dan oluşturulacak. Yani kayıt ettiğin değer diye bi değer olmayacak (aslında default olan olacak).

Ergin abi'nin "game instance" da kaydet demesinin sebebi game instance level değişse de olduğu gibi kalıyor.

Save load'lık bir işin yok. Tabi oyunu açıp kapatınca da çalışsın istiyorsan o ayrı.

Kıssadan hisse: Game instance harici nerede kaydedersen kaydet Diğer level'a geçtiğinde o veri kaybolacak.
Hocam dediğin gibi component 0'dan oluşturuluyor. Dün akşam hayal kırıklığı oldu. Gameinstance üzerinden devam edeceğim.
 
Son düzenleme:
Save Load edebilirsin ama bu değer kalıcı olmayacaksa gereksiz.

GameInstanceye git.
Button1 adında bir boolean ( True False ) değer oluştur.
Widgetta button1 e tıkladığında GameInstancedeki o Button1 Booleanı True olarak değiştir.

Sonra Level2 yüklendiğinde Branch ile GameInstancedeki o Button1 Boolean değeri çek ve = True ise Spawn Actor çalıştır.
Merhaba Hocam.
Aslında ilk bunu denedim ama başaramamıştım. Sonra yapmaktan vazgeçtim olmuyor diye.
Muhtemelen level 1'deki widget içinde butona tıkladığımda yeni bir widget ortaya çıkarıcam (bu loading ekranları gibi) o load ederken game instance'den çekicem. 2.Level'a geçtiğinde spawn olacak.

Akşam sizin bahsettiğiniz şeyleri tekrar deneyeceğim. Muhtemelen bir yerde yanlış yaptığımdan spawnlamadı.
 
Arkadaşlar sonunda başardım. Yardımlarınız için çok çok teşekkür ederim.

1.Level'daki Main Widget kodum;
https://blueprintue.com/blueprint/bndqryib/

Game Instance;

2.Level'daki kodum;
https://blueprintue.com/blueprint/yipq0l_y/


Şu an sorunsuz çalışıyor gibi gözüküyor. Herhangi bir hata da vermedi :)

Button_1'e bastığımda sadece level'ı açıyor.
Button0'a basıp daha sonra tekrar button1'e bastığımda 2.level'da istediğim objeyi spawnlıyor :)
 
Son düzenleme: