- Home /
Enemy spawning problem...
So I am building a wave spawner using Brackeys' code. However for some reason his script is not being detected. The error message is
The associated script cannot be loaded. Please fix any compile errors and assign a valid script.
Yet there aren't any compile errors. Help?
Attached to the camera:
using UnityEngine;
using System.Collections;
public class WaveSpawner : MonoBehaviour {
//Adapted From Brackys Code
//Linke to his youtube channel --> https://www.youtube.com/user/Brackeys
//=================================================================================
//=================================== Variables ===================================
//=================================================================================
public enum SpawnState { SPAWNING, WAITING, COUNTING };
[System.Serializable]
public class Wave
{
public string name;
public Transform enemy;
public int count;
public float rate;
}
public Wave[] waves;
private int nextWave = 0;
public int NextWave
{
get { return nextWave + 1; }
}
public Transform[] spawnPoints;
public float timeBetweenWaves = 5f;
private float waveCountdown;
public float WaveCountdown
{
get { return waveCountdown; }
}
private float searchCountdown = 1f;
private SpawnState state = SpawnState.COUNTING;
public SpawnState State
{
get { return state; }
}
//=================================================================================
//=================================== Functions ===================================
//=================================================================================
void Start()
{
if (spawnPoints.Length == 0)
{
Debug.LogError("No spawn points referenced.");
}
waveCountdown = timeBetweenWaves;
}
//======================
void Update()
{
if (state == SpawnState.WAITING)
{
if (!EnemyIsAlive())
{
WaveCompleted();
}
else
{
return;
}
}
if (waveCountdown <= 0)
{
if (state != SpawnState.SPAWNING)
{
StartCoroutine( SpawnWave ( waves[nextWave] ) );
}
}
else
{
waveCountdown -= Time.deltaTime;
}
}
//======================
void WaveCompleted()
{
Debug.Log("Wave Completed!");
state = SpawnState.COUNTING;
waveCountdown = timeBetweenWaves;
if (nextWave + 1 > waves.Length - 1)
{
nextWave = 0;
Debug.Log("ALL WAVES COMPLETE! Looping...");
}
else
{
nextWave++;
}
}
//======================
bool EnemyIsAlive()
{
searchCountdown -= Time.deltaTime;
if (searchCountdown <= 0f)
{
searchCountdown = 1f;
if (GameObject.FindGameObjectWithTag("Spinning-Blade") == null)
{
return false;
}
}
return true;
}
//======================
IEnumerator SpawnWave(Wave _wave)
{
Debug.Log("Spawning Wave: " + _wave.name);
state = SpawnState.SPAWNING;
for (int i = 0; i < _wave.count; i++)
{
SpawnEnemy(_wave.enemy);
yield return new WaitForSeconds( 1f/_wave.rate );
}
state = SpawnState.WAITING;
yield break;
}
//======================
void SpawnEnemy(Transform _enemy)
{
Debug.Log("Spawning Enemy: " + _enemy.name);
Transform _sp = spawnPoints[ Random.Range (0, spawnPoints.Length) ];
Instantiate(_enemy, _sp.position, _sp.rotation);
}
}
Did you attached everything in game to script. And be sure to saved every script one by one.
Is this script file named "WaveSpawner".cs ? This is important, class name (if $$anonymous$$onoBehaviour) must much file name.
Thank. I was able to do it because of this. Noob mistakes I guess.
Your answer
Follow this Question
Related Questions
creating animation made my each prefab spawn at same position 1 Answer
Unity how to make different enemy spawn one at a time 1 Answer
Wave Spawner not working |Does not detect if an object is destroyed 1 Answer
creating animation made my each prefab spawn at same position 1 Answer
2d game for my first unity project. 1 Answer