- Home /
How to Update the WaitForSeconds timer after a condition is met?
So im trying to update the timer when a condition is met, in my case here is when the camera follows the player, here is the code:
public class SpawnManager : MonoBehaviour
{
public GameObject[] toSpawn;
public GameObject[] spawnEnemies;
public GameObject[] spawnEnv;
public GameObject[] powerUps;
private PlayerController playerCS;
public float envTimer = 5;
// Start is called before the first frame update
void Start()
{
playerCS = GameObject.Find("Player").GetComponent<PlayerController>();
StartCoroutine(EnvStartWaiter());
}
IEnumerator EnvStartWaiter()
{
while (true && !playerCS.gameOver)
{
// Spawn Bridge Columns
Vector3 columnPos = new Vector3(transform.position.x, -3, 30);
Instantiate(spawnEnv[0], columnPos, spawnEnv[0].transform.rotation);
// Spawn Trees
int randomLeftTree = Random.Range(1, 3);
Vector3 treesLeftPos = new Vector3(-4, -3, 40);
int randomRightTree = Random.Range(1, 3);
Vector3 treesRightPos = new Vector3(4, -3, 40);
Instantiate(spawnEnv[randomLeftTree], treesLeftPos, spawnEnv[randomLeftTree].transform.rotation);
Instantiate(spawnEnv[randomRightTree], treesRightPos, spawnEnv[randomRightTree].transform.rotation);
// Spawn Light Columns
Vector3 lightColumnPosleft = new Vector3(-4, -3, 50);
Vector3 lightColumnPosRight = new Vector3(4, -3, 50);
Instantiate(spawnEnv[5], lightColumnPosRight, spawnEnv[5].transform.rotation);
Instantiate(spawnEnv[4], lightColumnPosleft, spawnEnv[4].transform.rotation);
yield return new WaitForSeconds(envTimer);
}
}
Answer by Quickz · Apr 13, 2020 at 02:15 PM
If you want to wait until a condition is met inside a coroutine you can yield return a WaitUntil instance.
Here's a reference: https://docs.unity3d.com/ScriptReference/WaitUntil.html
Thanks, i actually wanted to update the timer after its being started when a condition met, so its started with the game and later updated with a trigger.
In that case I can offer two options:
1. Add a boolean field that tells you whether the timer has started and check in the Update method whether that boolean is true and whether your condition is matched.
2. $$anonymous$$ake a Coroutine that waits until your condition is true and then updates the timer. This coroutine starts once the timer is started and stopped once the timer is no longer running.
Thank you, i ended up adding adding a boolean inside the first function and i used WaitUntil in the second function, problem solved thank.