I have a beaver game and I want to make beavers appear on the screen by one each second. But during 1 second apeear all beavers. Can’t understand, why.
public GameObject[] beavers;
int currentBeaver;
void Update()
{
StartCoroutine ("HitBeaver");
}
IEnumerator HitBeaver()
{
currentBeaver = Random.Range (0, 14);
beavers [currentBeaver].SetActive (true);
yield return new WaitForSeconds (1);
beavers [currentBeaver].SetActive (false);
}
You start coroutine each frame in your function Update(). For example, if frame rate is 60 FPS, then you call 60 time function HitBeaver(). Maybe, you need one more variable:
public GameObject[] beavers;
int currentBeaver;
private bool myVis = true; //variable for start coroutine
void Update() {
if (myVis) {
StartCoroutine ("HitBeaver");
}
}
IEnumerator HitBeaver() {
myVis = false; //change status
currentBeaver = Random.Range (0, 14);
beavers [currentBeaver].SetActive (true);
yield return new WaitForSeconds (1.0f); //better write float value
beavers [currentBeaver].SetActive (false);
myVis = true; //change status
}
I hope that it will help you.