// 적을 생성합니다. private void SpawnEnemy(StageWaveInfo stageInfo, List <EnemyCharacter> spawnedEnemies) { // 원 가장자리 위치를 반환합니다. Vector3 GetRandomSpawnPosition() => new Vector3(Random.Range(-1.0f, 1.0f), 0.0f, Random.Range(-1.0f, 1.0f)).normalized *_StageRadius; // 적을 특정한 위치에 생성합니다. EnemyCharacter SpawnEnemy(EnemyType enemyType) { var newEnemyCharacter = Instantiate(_EnemyPrefabs[enemyType]); newEnemyCharacter.transform.position = GetRandomSpawnPosition(); spawnedEnemies.Add(newEnemyCharacter); newEnemyCharacter.onEnemyCharacterDie += () => spawnedEnemies.Remove(newEnemyCharacter); return(newEnemyCharacter); } for (int i = 0; i < stageInfo.enemyType1; ++i) { SpawnEnemy(EnemyType.Enemy1); } for (int i = 0; i < stageInfo.enemyType2; ++i) { SpawnEnemy(EnemyType.Enemy2); } for (int i = 0; i < stageInfo.enemyType3; ++i) { SpawnEnemy(EnemyType.Enemy3); } }
public override void Modify(ref StageClassInfo info) { int index = UnityEngine.Random.Range(0, info.waveList.Count); StageWaveInfo reinforce = info.waveList[index]; info.waveList.Insert(index, Harmony_Patch.CopyXml(reinforce)); }
public static StageWaveInfo CopyXml(StageWaveInfo info) { StageWaveInfo output = new StageWaveInfo { enemyUnitIdList = new List <int>(), formationId = info.formationId, formationType = info.formationType, availableNumber = info.availableNumber, aggroScript = info.aggroScript, managerScript = info.managerScript }; output.enemyUnitIdList.AddRange(info.enemyUnitIdList); return(output); }