Inheritance: MonoBehaviour
示例#1
0
    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;
    }
示例#2
0
    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);
    }
示例#3
0
    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);
    }
示例#4
0
    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;
    }