Unity StartCoroutine

Kcay12

Centipat
Katılım
2 Temmuz 2022
Mesajlar
25
Daha fazla  
Cinsiyet
Erkek
Kod:
public class NewBehaviourScript : MonoBehaviour

{

 public GameObject Cogaclackkup;

 // Start is called before the first frame update

 void Start()

 {

 StartCoroutine("Sayac");

 }

 void Update()

 {

 }

 IEnumerator Sayac()

 {

 while (true)

 {

 yield return new WaitForSeconds(4f);

 Instantiate(Cogaclackkup, new Vector3(Random.Range(3,5), Random.Range(3, 5), Random.Range(3, 5)), transform.rotation);

 }

 }

}

Bu kodu başlattığımızda genelde her 4 saniyede bir 1 tane obje oluşması gerek değil mi? Bende ise şöyle 4 saniye sonra 1 küp oluşuyor sonra 2 küp sonra 4 kip sonra 8 sonra 16 boyle bir döngüye giriyor, benim istediğim her dört saniyede bir sadece 1 küp oluşması ama bu kendini katlayarak gidiyor. Nedenini biri anlatırsa çok iyi olur.
 
Son düzenleyen: Moderatör:
Kodunuzda bir hata var. StartCoroutine("Sayac") ifadesi, her çerçeve başına bir kere çalışır ve bu nedenle her çerçeve başına bir adet küp oluşturur. Bu, zamanla adet sayısını katlayarak artırır.

Çözüm olarak, StartCoroutine yerine InvokeRepeating kullanabilirsiniz. İşte düzeltilmiş kod:
using UnityEngine;

public class CubeSpawner : MonoBehaviour
{
public GameObject Cogaclackkup;
public float spawnInterval = 1f; // Her saniye bir küp oluşturmak için

private void Start()
{
// Belirli aralıklarla fonksiyonu çağırır
InvokeRepeating("SpawnCube", 0f, spawnInterval);
}

private void SpawnCube()
{
Instantiate(Cogaclackkup, new Vector3(Random.Range(3, 5), Random.Range(3, 5), Random.Range(3, 5)), transform.rotation);
}
}

Bu şekilde SpawnCube fonksiyonu belirli aralıklarla çağrılacak ve her seferinde bir adet küp oluşturacaktır.
 

Geri
Yukarı