- Home /
Spawn Multiple Monsters
Should be simple, but it's not as simple as I though. I have monsters in an XML list for waves of enemies, and I need to spawn multiple enemies per wave. However, when I do so with my current code, both spawn, but only one will spawn correctly, and he other will not move, nor will it spawn correctly. I think I need to call upon each element in the array, but I don't know how.
public var spawnedMob:GameObject = null;
public var monsterData:MobData = null;
private var waveIndex:uint = 0;
public var monsterPrefab:GameObject;
private var wavesInfo:WavesData = null;
private var wavesArray:Array = null;
function Start () {
monsterData = gameObject.GetComponent( MobData );
wavesInfo = gameObject.GetComponent( WavesData );
}
function DataReady(){
wavesArray = wavesInfo.waves;
}
function Update () {
if ( wavesArray ){
if ( spawnedMob == null ){
if ( waveIndex < wavesArray.length ){
var currentWave:WaveInfo = wavesArray[waveIndex];
var monsterSpawnIndex:float = parseFloat( currentWave.indexString );
var monsterInfo:MobInfo = monsterData.mobInfoArray[monsterSpawnIndex];
var waveSplitter = currentWave.indexString.Split(","[0]);
for( var i:int = 0; i < waveSplitter.length; i++)
{
print(waveSplitter[i]);
spawnedMob = Instantiate( monsterPrefab, Vector3( 100, 10, 100 ), Quaternion.identity );
}
//Instantiate( monsterPrefab, Vector3( 80, 10, 80 ), Quaternion.identity );
var entityScript:MonsterCharacter = spawnedMob.GetComponent( MonsterCharacter );
entityScript.InitWithMobInfo( monsterInfo );
spawnedMob.SendMessage( "SetPlayer", null, SendMessageOptions.DontRequireReceiver );
waveIndex++;
}
}
}
}
You are right, that was the problem. I fixed it, and I was also not calling the array where needed. If anyone is wondering for the fix:
function Update ()
{ if ( wavesArray ) { if ( spawned$$anonymous$$ob == null ) { if ( waveIndex < wavesArray.length ) {
var currentWave:WaveInfo = wavesArray[waveIndex];
var monsterSpawnIndex:float = parseFloat( currentWave.indexString );
var waveSplitter = currentWave.indexString.Split(","[0]);
for( var i:int = 0; i < waveSplitter.length; i++)
{
print(waveSplitter[i]);
spawned$$anonymous$$ob = Instantiate( monsterPrefab, Vector3( 80*i, 10, 80 ), Quaternion.identity );
var monsterInfo:$$anonymous$$obInfo = monsterData.mobInfoArray[ parseInt( waveSplitter[i] ) ];
var entityScript:$$anonymous$$onsterCharacter = spawned$$anonymous$$ob.GetComponent( $$anonymous$$onsterCharacter );
entityScript.InitWith$$anonymous$$obInfo( monsterInfo );
spawned$$anonymous$$ob.Send$$anonymous$$essage( "SetPlayer", null, Send$$anonymous$$essageOptions.DontRequireReceiver );
}
waveIndex++;
}
}
}
}
Answer by fafase · Apr 30, 2012 at 07:18 PM
Have you tried to place all the codes you wrote after the for loop, inside the for loop, so that it is done right after instantiating. I would think the way it is done now, first round in the for loop, spawnemob points to a place in the memory then second round the same spawnmob points to a new location in memory then you fetch the component of that object pointed at but the firts one is lost in memory.
Your answer
![](https://koobas.hobune.stream/wayback/20220613070929im_/https://answers.unity.com/themes/thub/images/avi.jpg)
Follow this Question
Related Questions
Problem Spawning Enemys with Health. 2 Answers
JS to C# converting issues.. 1 Answer
An Array within array 2 Answers
How do I control where enemies spawn? 1 Answer
Spawning different random objects at the same position? 2 Answers