Unity 2D rastgele engel spawn etme nasıl yapılır?

Abdullah63

Femtopat
Katılım
20 Mayıs 2021
Mesajlar
29
Merhabalar. Burada hep söylüyorum ama 2D sonsuz koşu oyunu yapıyorum. Karakter dümdüz yolda koşuyor. Instantiate fonksiyonu az çok biliyorum ve bunu ıenumerator içine yazacağız onu da biliyorum. Tek sıkıntı şu. İzlediğim videoda arkadaş flappy bird yaptığı için tek çeşit engel var ve belli yükseklikler arasında spawn ediyor borularını.

Benimse üç çeşit engellim var. Yerden taş gelecek ve zıplayacaksın. Ortadan roket gelecek ve eğileceksın. Alttan taş üstten roket gelecek ve arasından atlayacaksın. Yani her engelin kendine özgü spawn konumu olmalı. Nasıl sağlayabilirim? Lütfen acil yardıma ihtiyacım var. Şimdiden teşekkürler.
 

Ömerrrrrr

Decipat
Katılım
8 Nisan 2020
Mesajlar
1.055
Makaleler
1
Çözümler
5
Z ekseninde ileriye gittiğinizi varsayarsak sürekli olarak x ve y ekseninde koordinatları random olarak atayıp oluşturacaksınız belirli periyotlarla. Her seferinde Z si de iki engelin arası ne kadar artsın istiyorsanız o şekilde olacak. Engeller birbirinden çok alakasız olmasın istiyorsanız random aralığınızı çok ufaltıp her seferinde önceki engelin konumuna o random elde ettiğiniz vektörü eklerseniz birbirine daha yakın engeller ortaya çıkar.
 

rico

Kilopat
Katılım
28 Haziran 2016
Mesajlar
1.653
Çözümler
3
Unity Learn'de Unity'nin hazırladığı ücretsiz bir kurs var. Orda 1. veya 2. levelde rastgele karakterler nasıl oluşturulduğunu gösteriyor. Ben çok şey öğrendim o kurstan bakmanı tavsiye ederim.
 
KS
Abdullah63

Abdullah63

Femtopat
Katılım
20 Mayıs 2021
Mesajlar
29
Z ekseninde ileriye gittiğinizi varsayarsak sürekli olarak X ve Y ekseninde koordinatları random olarak atayıp oluşturacaksınız belirli periyotlarla. Her seferinde Z si de iki engelin arası ne kadar artsın istiyorsanız o şekilde olacak. Engeller birbirinden çok alakasız olmasın istiyorsanız random aralığınızı çok ufaltıp her seferinde önceki engelin konumuna o random elde ettiğiniz vektörü eklerseniz birbirine daha yakın engeller ortaya çıkar.

Anlattığınızdan pek bir şey anlamadım çünkü daha yeniyim. Ama biraz daha açıklayayım. Karakter sabit ve engeller hareketli. O yöntemi kullanıyorum. Engellerimi sola doğru (-x) yönünde hareketlendirdim. Hem roket hem asteroid içeren engelim de ise roket ve asteroid arasındaki (y eksenindeki) mesafe hep aynı. Ve bunların hepsini prefab olarak kaydettim. İstediğim bu üç prefabın belli zaman aralıklarıyla her defasında içlerinden rastgele olarak seçilen birinin spawnlanması. Konumları sabit. Misal asteroid her defasında (10, 0, 0) konumunda spawnlanacak. Umarım bunun bir yolu vardır.
Unity Learn'de Unity'nin hazırladığı ücretsiz bir kurs var. Orda 1. veya 2. levelde rastgele karakterler nasıl oluşturulduğunu gösteriyor. Ben çok şey öğrendim o kurstan bakmanı tavsiye ederim.
Tavsiyen için teşekkür ederim. Mutlaka bakacağım.
 

rico

Kilopat
Katılım
28 Haziran 2016
Mesajlar
1.653
Çözümler
3
Anlattığınızdan pek bir şey anlamadım çünkü daha yeniyim. Ama biraz daha açıklayayım. Karakter sabit ve engeller hareketli. O yöntemi kullanıyorum. Engellerimi sola doğru (-x) yönünde hareketlendirdim. Hem roket hem asteroid içeren engelim de ise roket ve asteroid arasındaki (y eksenindeki) mesafe hep aynı. Ve bunların hepsini prefab olarak kaydettim. İstediğim bu üç prefabın belli zaman aralıklarıyla her defasında içlerinden rastgele olarak seçilen birinin spawnlanması. Konumları sabit. Misal asteroid her defasında (10, 0, 0) konumunda spawnlanacak. Umarım bunun bir yolu vardır.
Var hocam benim Unity Learn'de bahsettiğim yerde. Yukarıda karakter yazmışım prefab olcaktı. Derdinin aynısı orda var. Direk cevaplamak isterdim fakat ben de yeniyim :p
 
KS
Abdullah63

Abdullah63

Femtopat
Katılım
20 Mayıs 2021
Mesajlar
29
Var hocam benim Unity Learn'de bahsettiğim yerde. Yukarıda karakter yazmışım prefab olcaktı. Derdinin aynısı orda var. Direk cevaplamak isterdim fakat ben de yeniyim :p
Çok sağol. Biraz acele ediyorum da. Bu oyunu en yakın zamanda bitirmem lazım. Tekrar teşekkür ederim yardımın için.
 

Ömerrrrrr

Decipat
Katılım
8 Nisan 2020
Mesajlar
1.055
Makaleler
1
Çözümler
5
Anlattığınızdan pek bir şey anlamadım çünkü daha yeniyim. Ama biraz daha açıklayayım. Karakter sabit ve engeller hareketli. O yöntemi kullanıyorum. Engellerimi sola doğru (-x) yönünde hareketlendirdim. Hem roket hem asteroid içeren engelim de ise roket ve asteroid arasındaki (y eksenindeki) mesafe hep aynı. Ve bunların hepsini prefab olarak kaydettim. İstediğim bu üç prefabın belli zaman aralıklarıyla her defasında içlerinden rastgele olarak seçilen birinin spawnlanması. Konumları sabit. Misal asteroid her defasında (10, 0, 0) konumunda spawnlanacak. Umarım bunun bir yolu vardır.
Tamam o zaman engellerimizin hareket ettiğini farz ediyorum biz sabitiz engeller de sabitse bir anlamı olmuyor. Engellerin hareket ettiği scripti prefablarının üzerine atayın. Yani engellerin prefabı sahneye sürüklenip bırakıldığında hareket edebilir hale gelsin. Ardından sahnede bir obje yaratın atıyorum creator olsun bunun adı. O objeye bir script ekleyin O scripte bu 3 engelin prefabini verin. İstediğiniz 3 noktaya da birer obje oluşturup onların transformunu da bu scripte verin. Ardından ıenumerator ile istediğiniz zamanda bir bu engelleri verdiğiniz pozisyonlara instantiate edin. Geç gördüm mesajınızı gecikme için üzgünüm. Anlatamadıysam mutlaka sorun
 
KS
Abdullah63

Abdullah63

Femtopat
Katılım
20 Mayıs 2021
Mesajlar
29
Tamam o zaman engellerimizin hareket ettiğini farz ediyorum biz sabitiz engeller de sabitse bir anlamı olmuyor. Engellerin hareket ettiği scripti prefablarının üzerine atayın. Yani engellerin prefabı sahneye sürüklenip bırakıldığında hareket edebilir hale gelsin. Ardından sahnede bir obje yaratın atıyorum creator olsun bunun adı. O objeye bir script ekleyin o scripte bu 3 engelin prefabini verin. İstediğiniz 3 noktaya da birer obje oluşturup onların transformunu da bu scripte verin. Ardından ıenumerator ile istediğiniz zamanda bir bu engelleri verdiğiniz pozisyonlara instantiate edin. Geç gördüm mesajınızı gecikme için üzgünüm. Anlatamadıysam mutlaka sorun.

Aynen öyle. Hareketlendirip öyle prefab olarak kaydettim. Ve diğer anlattıklarınızı da anladım. Ben şöyle bir şey denemek istedim. Okulda aklıma geldi. Eve gelince hemen denedim. Asteroidimin rigidbodysi olduğu için nerede spawn edersem edeyim zemine düşecekti. Diğer roketli engeller için de ortak bir spawn noktası hesapladım. Yani spawnlanacakları noktalar aynı olacaktı. Ama deneyemiyorum. Çünkü Unity hata veriyor. public IEnumerator spawner() diye fonksiyon yazıyorum. Spawnere hata veriyor. Tamam o sonradan gidiyor. yield return WaitForSeconds() yazıyorum. Çağrılamaz üye diyor. Ve bahsettiğin creator boş objesinin içine atıyorum. Inspectorda script var ama hiç bir şekilde bir şey çıkmıyor. Hatalı olduğu için mi bir şey göstermiyor bilmiyorum. Yeni öğrendiğim için kütüphane mi eksik onu da bilmiyorum. O yüzden bir ekran resmi göstereceğim. Hata vermese hem sizin yöntemi hem kendi yöntemimi deneyeceğim de.
IMG_20210615_141859[1].jpg
 

Ömerrrrrr

Decipat
Katılım
8 Nisan 2020
Mesajlar
1.055
Makaleler
1
Çözümler
5
Aynen öyle. Hareketlendirip öyle prefab olarak kaydettim. Ve diğer anlattıklarınızı da anladım. Ben şöyle bir şey denemek istedim. Okulda aklıma geldi. Eve gelince hemen denedim. Asteroidimin rigidbodysi olduğu için nerede spawn edersem edeyim zemine düşecekti. Diğer roketli engeller için de ortak bir spawn noktası hesapladım. Yani spawnlanacakları noktalar aynı olacaktı. Ama deneyemiyorum. Çünkü Unity hata veriyor. Public ıenumerator spawner() diye fonksiyon yazıyorum. Spawnere hata veriyor. Tamam o sonradan gidiyor. yield return WaitForSeconds() yazıyorum. Çağrılamaz üye diyor. Ve bahsettiğin creator boş objesinin içine atıyorum. Inspectorda script var ama hiç bir şekilde bir şey çıkmıyor. Hatalı olduğu için mi bir şey göstermiyor bilmiyorum. Yeni öğrendiğim için kütüphane mi eksik onu da bilmiyorum. O yüzden bir ekran resmi göstereceğim. Hata vermese hem sizin yöntemi hem kendi yöntemimi deneyeceğim de. Eki Görüntüle 1069033

Yield return New WaitForSeconds() yazmalısınız.
 
Son düzenleyen: Moderatör:
Yukarı