Hi, I’ll try keep this as detailed as I can but short.
I’m trying to make a spawner that has max amount of enemies it can spawn say 10, I got it to the point were it will spawn 1 enemy and if he dies it spawns another but when it comes to spawning more than 1 thats were it gets annoying.
var enemy1 : Transform;
function Update () {
var enemyTarget = GameObject.FindWithTag("Enemy");
if( enemyTarget == null )
{
SpawnEnemy();
}
}
function SpawnEnemy()
{
Instantiate(enemy1, transform.position, transform.rotation);
}
This is the code I’ve got, I looked all over the internet and I tried Invoke and that didn’t work, I tried While(true) but that just failed and crashed Unity o_O. So I’m at a lost with this :(.
Right now you have an enemy instance stored in a variable, and when it is null you spawn another one. So, this code will only ever spawn one enemy at a time. There’s really any number of ways you can solve this problem because it’s just a programming problem, but here’s one way you can do it for the sake of example:
//This is a behaviour to stick in your enemy prefab
public class SpawnedObject : Monobehaviour {
public ObjectSpawner homeSpawn;
void OnDestroy() {
homeSpawn.spawnCount--;
}
}
//This is the spawner
public class ObjectSpawner : MonoBehaviour {
//object you want to spawn
SpawnedObject objectPrefab;
//maximum allowed number of objects - set in the editor
public int maxObjects = 1;
//number of objects currently spawned
public int spawnCount = 0;
void Update() {
if(maxObjects>spawnCount) {
SpawnEnemy();
}
}
void SpawnEnemy() {
SpawnedObject obj =
((GameObject)(Instantiate(objectPrefab,transform.position,transform.rotation)))
.GetComponent<SpawnedObject>();
obj.homeSpawn = this;
spawnCount++;
}
}
Take a look, I’m in a rush right now and can’t properly explain the code but try it and see what happens when you delete an object.
using UnityEngine;
using System.Collections;
using System.Collections.Generic;
public class SpawnTest : MonoBehaviour {
public List<GameObject> spawnList;
// Use this for initialization
void Start ()
{
spawnList = new List<GameObject>();
InvokeRepeating("CheckAlive", 1, 1);
//Populate for the first time
for (int i = 0; i < 10; i++)
{
spawnList.Add(new GameObject(Time.timeSinceLevelLoad.ToString()));
}
}
void CheckAlive()
{
for (int i = 0; i < spawnList.Count; i++)
{
if(!spawnList*)*