- Home /
Question by
Rebnerod · Sep 07, 2013 at 08:07 PM ·
spawnrespawnspawnpointrewriting
Can't set timer
I built a code watching Burgzerger Arcade but the problem is I just can't set the spawn time in 2 seconds. Can you check the code please.
using UnityEngine;
using System.Collections;
using System.Collections.Generic;
public class MobGenerator : MonoBehaviour
{
public enum State
{
Idle,
Initialize,
Setup,
SpawnMob
}
public GameObject[] mobPrefabs;
public GameObject[] spawnPoints;
public State state;
private bool check = true;
void Awake()
{
state = MobGenerator.State.Initialize;
}
IEnumerator Start ()
{
while (true)
{
switch(state)
{
case State.Initialize:
Initialize();
break;
case State.Setup:
Setup();
break;
case State.SpawnMob:
SpawnMob();
break;
case State.Idle:
Idle();
break;
}
yield return 0;
}
}
private void Initialize()
{
if (!CheckMobPrefabs())
return;
if (!CheckSpawnPoints())
return;
state = MobGenerator.State.Setup;
}
private void Setup()
{
state = MobGenerator.State.SpawnMob;
}
private void SpawnMob()
{
GameObject[] gos = AvailableSpawnPoints();
for (int cnt = 0; cnt < gos.Length; cnt++)
{
GameObject go = Instantiate(mobPrefabs[Random.Range(0, mobPrefabs.Length)],
gos[cnt].transform.position,
Quaternion.identity
) as GameObject;
go.transform.parent = gos[cnt].transform;
}
state = MobGenerator.State.Idle;
}
private void Idle()
{
Debug.Log("hi" + Time.time);
if(check)
StartCoroutine("Wait");
Debug.Log("what" + Time.time);
}
private bool CheckMobPrefabs()
{
if (mobPrefabs.Length > 0)
return true;
else
return false;
}
private bool CheckSpawnPoints()
{
if (spawnPoints.Length > 0)
return true;
else
return false;
}
private GameObject[] AvailableSpawnPoints()
{
List<GameObject> gos = new List<GameObject>();
for (int cnt = 0; cnt < spawnPoints.Length; cnt++)
{
if (spawnPoints[cnt].transform.childCount == 0)
{
Debug.Log("*** Spawn Points Available ***");
gos.Add(spawnPoints[cnt]);
}
}
return gos.ToArray();
}
IEnumerator Wait()
{
Debug.Log("hop");
check = false;
yield return new WaitForSeconds(2);
check = true;
state = MobGenerator.State.SpawnMob;
Debug.Log("ono");
}
}
Comment
Answer by DDP · Sep 07, 2013 at 08:29 PM
I'm not sure if that's what you're looking for, but let's try this:
IEnumerator Wait()
{
Debug.Log("hop");
check = false;
yield return new WaitForSeconds(spawnDelay); //Using "spawnDelay" instead of "2"
check = true;
state = MobGenerator.State.SpawnMob;
Debug.Log("ono");
}
And then modify the top of your file:
public GameObject[] mobPrefabs;
public GameObject[] spawnPoints;
public State state;
public float spawnDelay = 2f; //Add this line
Well setting variable or number won't matter the problem is i can't respawn. In code I'm not able to spawn again.
Your answer
Follow this Question
Related Questions
Multiple Cars not working 1 Answer
Character respawns invisable? 1 Answer
Multiple spawn points (C#) 2 Answers
Creating A Prefab Loses Hiearchy Connections 2 Answers
Enemy Spawning Place 0 Answers