Hey merhaba ziyaretçi bize destek olmak ister misin ? Hemen Kayıt Ol Seni hiç sıkmadan kayıt edeceğiz endişelenmek bize destek olduğun için teşekkürler.



  • Toplam: 0 Oy - Ortalama: 0
  • 1
  • 2
  • 3
  • 4
  • 5
skora göre object pooling
#1
merhaba arkadaşlar. ben unity'nin öğrenme sayfasından object pooling script'ini aldım ve kendimce değiştirdim. şimdi ben bunun multiple olmasını istiyorum instantiate kısmı tamam ama skor'a göre obje sırası olmuyor. 50'den aşağı ise geniş yüksek ise orta 200'den yüksek ise dar olmasını istiyorum. bunun için kendim yazdım fakat çalışmadı bilen arkadaşlar yardımcı olabilirler mi acaba?

skor ne kadar yüksekse o kadar daralıcak.

Kod:
public GameObject[] columnPrefab;                                 //The column game object.
   public int columnPoolSize = 5;                                  //How many columns to keep on standby.
   public static float spawnRate = 1.4f;                                    //How quickly columns spawn.
   public float columnMin = -1f;                                   //Minimum y value of the column position.
   public float columnMax = 3.5f;                                  //Maximum y value of the column position.

   private GameObject[] columns;                                   //Collection of pooled columns.
   private int currentColumn = 0;                                  //Index of the current column in the collection.

   private Vector2 objectPoolPosition = new Vector2(-15, -25);     //A holding position for our unused columns offscreen.
   public float spawnYPosition = 5f;

   private float timeSinceLastSpawned;
   [HideInInspector]
   public int j;
   void Start()
   {
       timeSinceLastSpawned = 0f;
       //Initialize the columns collection.
       columns = new GameObject[columnPoolSize];
       //Loop through the collection...
       for (int i = 0; i < columnPoolSize; i++)
       {
           //...and create the individual columns.
           for (int k = 0; k < columnPrefab.Length; k++)
           {
               columns[i] = (GameObject)Instantiate(columnPrefab[k], objectPoolPosition, Quaternion.identity);
           }
       
       }
   }


   //This spawns columns as long as the game is not over.
   void Update()
   {
       if (GameController.instance.score >= 50 && GameController.instance.score <= 149)
       {
           j = 1;
       }
       else if(GameController.instance.score >= 150)
       {
           j = 2;
       }
       else
       {
           j = 0;
       }
       timeSinceLastSpawned += Time.deltaTime;

       if (GameController.instance.gameOver == false && timeSinceLastSpawned >= spawnRate)
       {
           timeSinceLastSpawned = 0f;
       
           //Set a random y position for the column
           float spawnXPosition = Random.Range(columnMin, columnMax);

           //...then set the current column to that position.
           columns[currentColumn].transform.position = new Vector2(spawnXPosition, spawnYPosition);

           //Increase the value of currentColumn. If the new size is too big, set it back to zero
           currentColumn++;

           if (currentColumn >= columnPoolSize)
           {
               currentColumn = 0;
           }
       }
       columnPrefab[j].transform.position = new Vector3(transform.position.x, transform.position.y, -.2f);
   }
  Cevapla
#2
Benim anlamadığım şey neyi daraltmak ya da genişletmek istiyorsunuz ?  Spawnlanak obje genişliğimi
  Cevapla
#3
(08-10-2018, Saat: 07:57)abayir41 Nickli Kullanıcıdan Alıntı: Linkleri görüntüleyebilmek için Kayıt ol manız veya Giriş yapmanız gerekiyor.Anlayışınız için teşekkürler.!Benim anlamadığım şey neyi daraltmak ya da genişletmek istiyorsunuz ?  Spawnlanak obje genişliğimi

şimdi 3 tane obstacle var genişlikten darlığa kadar. 1. obstacle geniş 2. obstacle orta 3. obstacle ise dar. bunlar ben diziye attım ve skora göre değişmesini sağlamak istiyorum. bu 3 obstacle instantiate oluyor ama skora göre değişmiyor. skor 50'den küçük ise 1. obstacle yani geniş olan beliricek. 50'den yüksek ise 2. obstacle yani orta olan beliricek. 150'den yüksek ise 3. obstacle yani dar olan obje beliricek. böyle böyle pooling olacak bu kadar. bunu yapmaya kalktığımda ise çalışmadı
  Cevapla
#4
şimdi siz prefabdaki objenizin transformunu değiştirirken 

Kod:
columnPrefab[j].transform.position = new Vector3(transform.position.x, transform.position.y, -.2f);
 
bunu kullanıyorsunuz lakin siz hiç bu scripti attınğınız objenin yerinin değiştirmiyorsunuz ve bütün prefablarınız aynı yere götürülüyor siz yukarda column[currentcolumn]
yerini değiştiriyorsunuz  ve sizde buna eşitlemeniz gerekli diye düşünüyorum.

ö yüzden kodunuz şöle olmalı

Kod:
columnPrefab[j].transform.position = new Vector3(coloums[currentcoloumn].transform.position.x,coloums[currentcoloumn].transform.position.y, -.2f);

lakin siz orada currentcolomn sayısını arttırıyorsunuz bu yüzden bu kod istediğimiz gibi çalışmayac bu yüzden artırma işlemini sonra yaptıırın olması geriyor
  Cevapla
#5
(08-10-2018, Saat: 18:45)abayir41 Nickli Kullanıcıdan Alıntı: Linkleri görüntüleyebilmek için Kayıt ol manız veya Giriş yapmanız gerekiyor.Anlayışınız için teşekkürler.!şimdi siz prefabdaki objenizin transformunu değiştirirken 

Kod:
columnPrefab[j].transform.position = new Vector3(transform.position.x, transform.position.y, -.2f);
 
bunu kullanıyorsunuz lakin siz hiç bu scripti attınğınız objenin yerinin değiştirmiyorsunuz ve bütün prefablarınız aynı yere götürülüyor siz yukarda column[currentcolumn]
yerini değiştiriyorsunuz  ve sizde buna eşitlemeniz gerekli diye düşünüyorum.

ö yüzden kodunuz şöle olmalı

Kod:
columnPrefab[j].transform.position = new Vector3(coloums[currentcoloumn].transform.position.x,coloums[currentcoloumn].transform.position.y, -.2f);

lakin siz orada currentcolomn sayısını arttırıyorsunuz bu yüzden bu kod istediğimiz gibi çalışmayac bu yüzden artırma işlemini sonra yaptıırın olması geriyor

bu kodda çalışmadı maalesef. yine aynı problem
  Cevapla
#6
Siz currentcolumn sayısını değiştirmeden önce benim kodu yazmanız gerekli yoksa hata çıkabilir
  Cevapla
#7
(09-10-2018, Saat: 08:58)abayir41 Nickli Kullanıcıdan Alıntı: Linkleri görüntüleyebilmek için Kayıt ol manız veya Giriş yapmanız gerekiyor.Anlayışınız için teşekkürler.!Siz currentcolumn sayısını değiştirmeden önce benim kodu yazmanız gerekli yoksa hata çıkabilir

dediğinizi yaptım ztn yine aynı problem. arttırmadan önce koydum kodu ama sonuç değişmedi
  Cevapla
#8
GameController daki score un arttığına emin misiniz? Yani ona bağlı olarak j değişkeni değişiyorsa ve ColumnPrefab[] içeriği doğru referanslar eklendiyse çalışması gerek. Bunları kontrol etiniz mi?
  Cevapla
#9
(10-10-2018, Saat: 21:45)mtat0640 Nickli Kullanıcıdan Alıntı: Linkleri görüntüleyebilmek için Kayıt ol manız veya Giriş yapmanız gerekiyor.Anlayışınız için teşekkürler.!GameController daki score un arttığına emin misiniz? Yani ona bağlı olarak j değişkeni değişiyorsa ve ColumnPrefab[] içeriği doğru referanslar eklendiyse çalışması gerek. Bunları kontrol etiniz mi?

kesinlikle doğru skor çalışıyo her geçişte 1 artıyor ama bir şey değişmesini engelliyo ama hangisi çözemedim
  Cevapla
#10
başka bilen var mı?
  Cevapla


Hızlı Menü:


Konuyu Okuyanlar: 1 Ziyaretçi