IEnumerator SpawnEnemiesInRounds(Round.RoundInfo[] SpawnRounds) { State = E_State.E_SPAWNING_ENEMIES; for (int i = 0; i < SpawnRounds.Length; i++) { Round.RoundInfo round = SpawnRounds[i]; float delay = round.SpawnDelay; while (delay > 0) { if (EnemiesAlive.Count == 0 || EnemiesAlive.Count <= round.MinEnemiesFomLastRound) { break; } yield return(new WaitForSeconds(0.5f)); delay -= 0.5f; } for (int ii = 0; ii < round.Spawns.Length; ii++) { Round.RoundInfo.SpawnInfo spawnInfo = round.Spawns[ii]; yield return(new WaitForSeconds(spawnInfo.SpawnDelay)); SpawnPointEnemy spawnpoint = GetAvailableSpawnPoint(spawnInfo.SpawnPoint == null || spawnInfo.SpawnPoint.Length == 0 ? SpawnPoints : spawnInfo.SpawnPoint); if (spawnInfo.RotateToPlayer) { Vector3 dir = Player.Instance.Agent.Position - spawnpoint.Transform.position; dir.Normalize(); spawnpoint.Transform.forward = dir; } GameObject enemy = Mission.Instance.GetHuman(spawnInfo.EnemyType, spawnpoint.Transform); while (enemy == null) { yield return(new WaitForSeconds(0.2f)); enemy = Mission.Instance.GetHuman(spawnInfo.EnemyType, spawnpoint.Transform); } CombatEffectsManager.Instance.PlaySpawnEffect(spawnpoint.Transform.position, spawnpoint.Transform.forward); Agent agent = enemy.GetComponent("Agent") as Agent; agent.PrepareForStart(); MyGameZone.AddEnemy(agent); EnemiesAlive.Add(agent); yield return(new WaitForSeconds(0.1f)); } } State = E_State.E_IN_PROGRESS; }
IEnumerator SpawnEnemy(SpawnPointEnemy spawnpoint) { CombatEffectsManager.Instance.PlaySpawnEffect(spawnpoint.Transform.position, spawnpoint.Transform.forward); yield return(new WaitForSeconds(0.1f)); // 根据怪物点,怪物的类型来实例化对应的怪物 Agent enemy = GenerateEnemyOnType(spawnpoint.EnemyType, spawnpoint.Transform); if (enemy == null) { yield break; } enemy.PrepareForStart(); enemy.SoundPlaySpawn(); if (RootEnemy != null) { enemy.transform.SetParent(RootEnemy.transform); } if (spawnpoint.SpawnAnimation != null) { enemy.GetComponent <Animation>().CrossFade(spawnpoint.SpawnAnimation.name, 0.02f); } EnemiesAlive.Add(enemy); }
IEnumerator SpawnEnemy(SpawnPointEnemy spawnpoint) { CombatEffectsManager.Instance.PlaySpawnEffect(spawnpoint.Transform.position, spawnpoint.Transform.forward); yield return(new WaitForSeconds(0.1f)); GameObject enemy = Mission.Instance.GetHuman(spawnpoint.EnemyType, spawnpoint.Transform); Agent agent = enemy.GetComponent("Agent") as Agent; agent.PrepareForStart(); EnemiesAlive.Add(agent); Mission.Instance.CurrentGameZone.AddEnemy(agent); }
IEnumerator SpawnEnemiesInRounds() { State = E_State.E_SPAWNING_ENEMIES; Agent ImportantAgent = null; for (int i = 0; i < SpawnRounds.Length; i++) { RoundInfo round = SpawnRounds[i]; float delay = round.SpawnDelay; while (delay > 0) { // 重要的boss杀死后,就直接结束产怪(一般是Boss) if (ImportantAgent != null && ImportantAgent.IsAlive == false) { State = E_State.E_IN_PROGRESS; yield break; } if (EnemiesAlive.Count == 0 || EnemiesAlive.Count <= round.MinEnemiesFomLastRound) { break; // dont wait, when enemies are killed or less then required } yield return(new WaitForSeconds(0.5f)); delay -= 0.5f; } for (int j = 0; j < round.Spawns.Length; j++) { RoundInfo.SpawnInfo spawnInfo = round.Spawns[j]; yield return(new WaitForSeconds(spawnInfo.SpawnDelay)); SpawnPointEnemy spawnpoint = GetAvailableSpawnPoint(spawnInfo.SpawnPoint == null || spawnInfo.SpawnPoint.Length == 0 ? SpawnPoints : spawnInfo.SpawnPoint); // 如果怪出生朝向玩家,就调整出生方位 if (spawnInfo.RotateToPlayer) { Vector3 dir = Player.Instance.transform.position - spawnpoint.Transform.position; dir.Normalize(); spawnpoint.Transform.forward = dir; } Agent enemy = GenerateEnemyOnType(spawnInfo.EnemyType, spawnpoint.Transform); while (enemy == null) { yield return(new WaitForSeconds(0.2f)); enemy = GenerateEnemyOnType(spawnInfo.EnemyType, spawnpoint.Transform); } CombatEffectsManager.Instance.PlaySpawnEffect(spawnpoint.Transform.position, spawnpoint.Transform.forward); enemy.PrepareForStart(); enemy.SoundPlaySpawn(); if (RootEnemy != null) { enemy.transform.SetParent(RootEnemy.transform); } EnemiesAlive.Add(enemy); if (spawnInfo.WhenKilledStopSpawn) { ImportantAgent = enemy; } yield return(new WaitForSeconds(0.1f)); } } State = E_State.E_IN_PROGRESS; }