Question by
rich66 · Nov 21, 2017 at 11:15 AM ·
instantiatecoroutinewhile-loop
Insantiate Loop Issue
Hi. I've written a script that checks the number of Villagers against a Population int. If the Villager < Pop then it Instantiates a prefab of a Villager until they = Pop. The script works, but on run time it throws out an "Assertion failed" error. Code below;
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.UI;
public class Population : MonoBehaviour
{
public int Pop;
public int PopGrowth;
public Text PopText;
public Text PopGrowthText;
//Variables for spawning population
public GameObject Villager;
public GameObject[] Villagers;
public GameObject TownHallSpawn;
public int[] popArray;
void Start()
{
Pop = 10;
PopGrowth = 1;
StartCoroutine(StatUpdate());
}
IEnumerator StatUpdate()
{
Villagers = GameObject.FindGameObjectsWithTag("Villager");
int VillagerTotal = Villagers.Length;
if (VillagerTotal == Pop)
{
yield break;
}
else if (VillagerTotal < Pop)
{
while (VillagerTotal < Pop)
{
Instantiate(Villager, new Vector3(Random.Range(-2.0f, 2.0f), 0, Random.Range(-2.0f, 2.0f)), transform.rotation);
VillagerTotal++;
yield return new WaitForEndOfFrame();
}
}
else
{
Pop = Pop + PopGrowth;
Instantiate(Villager, new Vector3(Random.Range(-2.0f, 2.0f), 0, Random.Range(-2.0f, 2.0f)), transform.rotation);
yield return new WaitForSeconds(60);
}
StartCoroutine(StatUpdate());
}
void Update()
{
UpdatePop();
}
void UpdatePop()
{
PopText.text = "Pop: " + (int)Pop;
if (PopGrowth >= 0)
{
PopGrowthText.text = "+" + PopGrowth;
}
else if (PopGrowth < 0)
{
PopGrowthText.text = "" + PopGrowth;
}
}
}
Is this an issue with the code or Unity? Most likely the code ;)
Comment
Your answer
![](https://koobas.hobune.stream/wayback/20220612143110im_/https://answers.unity.com/themes/thub/images/avi.jpg)
Follow this Question
Related Questions
Unity Freezing after for loop 1 Answer
Error Instantiating Prefab in while look at end of row, Happens after a random amount of rows 0 Answers
Bullets with raycast and physics 2 Answers
Using a coroutine to spin an object after a delay 2 Answers
Multiple objects being instantiated instead of one 0 Answers