//boss被击中时回调改方法 void OnHit(float energy) { blood -= energy; if (blood < halfBlood && !underHalfBlood) { underHalfBlood = true; //半血时回调 bossController.OnBossHalfBlood(blood); } else if (blood < quarterBlood && !underQuarterBlood) { underQuarterBlood = true; // 四分之一血时回调 bossController.OnBossQuarterBlood(blood); } // 没血了销毁自身,弹出MissionCompleted提示 if (blood <= 0) { Destroy(gameObject); Instantiate(explosion, transform.position, Quaternion.identity); GameObject parent = GameObject.Find("EnemyController"); GeneratorHelper.GeneratorGameObject(new Vector3(0f, 3f, -5f), missionCompleted, parent); } }
private static IEnumerator GenerateEnemies(GameObject prefab, int count, Vector3 birthPosition, MovementArg arg, GameObject parent, float gapTime) { for (int i = 0; ;) { GameObject enemy = GeneratorHelper.GeneratorGameObject(birthPosition, prefab, parent); enemy.SendMessage("StartMove", arg); i++; if (i < count) { yield return(new WaitForSeconds(gapTime)); } else { break; } } }
//第一关的关卡流程 //关卡流程设计每个人负责大概30s长度,之后进行整合 private IEnumerator scenario() { /***************************************************************Part1*****************************************************/ //5s yield return(new WaitForSeconds(5)); GeneratorHelper.GeneratorGameObject(new Vector3(1.9f, 0.89f, -5), sprayMonsterPrefab, enemyParent); //从屏幕上方出现3个敌机 ShowLineMovementEnemies(enemyPrefab1, 3, new Vector3(0.5f, 1.5f, -5), new Vector3(0.5f, 0, -5)); //从屏幕下方出现3个敌机 ShowLineMovementEnemies(enemyPrefab1, 3, new Vector3(1.0f, -1.5f, -5), new Vector3(1.0f, 0f, -5)); //10s yield return(new WaitForSeconds(5)); //yield return new WaitForSeconds(2); //从屏幕右边直线进入3个敌机 // ShowLineMovementEnemies(enemyPrefab1, 1, new Vector3(2.5f, 0.3f, -5), new Vector3(0, 0.3f, -5)); // ShowLineMovementEnemies(enemyPrefab1, 1, new Vector3(2.5f, 0, -5), new Vector3(0, 0, -5)); // ShowLineMovementEnemies(enemyPrefab1, 1, new Vector3(2.5f, -0.3f, -5), new Vector3(0, -0.3f, -5)); ShowLineMovementEnemies(monsterPrefab, 1, new Vector3(2.5f, 0.3f, -5), new Vector3(0, 0.3f, -5)); ShowLineMovementEnemies(monsterPrefab, 1, new Vector3(2.5f, 0, -5), new Vector3(0, 0, -5)); ShowLineMovementEnemies(monsterPrefab, 1, new Vector3(2.5f, -0.3f, -5), new Vector3(0, -0.3f, -5)); //15s yield return(new WaitForSeconds(5)); //上方 下方V字型出现 ShowVeeMovementEnemies(enemyPrefab1, 3, new Vector3(2.5f, 2.5f, -5), new Vector3(0, 0, -5), 0.3f); ShowVeeMovementEnemies(enemyPrefab1, 3, new Vector3(2.5f, -2.5f, -5), new Vector3(0, 0, -5), 0.3f); //20s yield return(new WaitForSeconds(5)); //从右侧出现3个直线运动敌人 3个驻停敌人 ShowLineMovementEnemies(enemyPrefab2, 1, new Vector3(2.5f, 0.3f, -5), new Vector3(0, 0.3f, -5)); ShowLineMovementEnemies(enemyPrefab3, 1, new Vector3(2.5f, 0, -5), new Vector3(0, 0, -5)); ShowLineMovementEnemies(enemyPrefab2, 1, new Vector3(2.5f, -0.3f, -5), new Vector3(0, -0.3f, -5)); ShowEnterAnchorEnemies(enemyPrefab2, 1, new Vector3(2.5f, 0.3f, -5), new Vector3(0, 0.3f, -5)); ShowEnterAnchorEnemies(enemyPrefab2, 1, new Vector3(2.5f, 0, -5), new Vector3(0, 0, -5)); ShowEnterAnchorEnemies(enemyPrefab2, 1, new Vector3(2.5f, -0.3f, -5), new Vector3(0, -0.3f, -5)); //25s yield return(new WaitForSeconds(10)); //从屏幕上方顺序进入3个敌机,然后从下方出去 ShowLineMovementEnemies(enemyPrefab3, 5, new Vector3(2.5f, 0.2f, -5), new Vector3(0, 0.3f, -5)); ShowLineMovementEnemies(enemyPrefab1, 5, new Vector3(2.5f, -0.2f, -5), new Vector3(0, -0.3f, -5)); /***************************************************************Part2*****************************************************/ yield return(new WaitForSeconds(2)); ShowLineMovementEnemies(enemyPrefab1, 3, new Vector3(2.5f, 0, -5), new Vector3(Random.Range(0f, 1.4f), Random.Range(-0.5f, 0.5f), -5)); yield return(new WaitForSeconds(3)); //0-5s ShowLineMovementEnemies(enemyPrefab2, 3, new Vector3(2.5f, 0.3f, -5), new Vector3(Random.Range(0f, 1.4f), Random.Range(-0.5f, 0.5f), -5)); yield return(new WaitForSeconds(2)); ShowVeeMovementEnemies(enemyPrefab2, 3, new Vector3(Random.Range(0f, 1f), 1f, -5), new Vector3(0, 0, -5), 0.3f); ShowVeeMovementEnemies(enemyPrefab1, 3, new Vector3(Random.Range(0f, 1f), -1f, -5), new Vector3(0, 0, -5), 0.3f); yield return(new WaitForSeconds(3)); //5-10s ShowLineMovementEnemies(enemyPrefab1, 3, new Vector3(2.5f, 0, -5), new Vector3(Random.Range(0f, 1.4f), Random.Range(-0.5f, 0.5f), -5)); yield return(new WaitForSeconds(1)); ShowEnterAnchorEnemies(enemyPrefab1, 1, new Vector3(1f, 1f, -5), new Vector3(1, 0.6f, -5)); ShowEnterAnchorEnemies(enemyPrefab2, 1, new Vector3(1f, 1f, -5), new Vector3(1, 0.3f, -5)); ShowEnterAnchorEnemies(enemyPrefab1, 1, new Vector3(1f, 1f, -5), new Vector3(1, 0, -5)); //ShowEnterAnchorEnemies(enemyPrefab1, 1, new Vector3(1f, 1f, -5), new Vector3(1, -0.3f, -5)); //ShowEnterAnchorEnemies(enemyPrefab1, 1, new Vector3(0.7f, -1f, -5), new Vector3(0, 0.3f, -5)); ShowEnterAnchorEnemies(enemyPrefab2, 1, new Vector3(0.7f, -1f, -5), new Vector3(0, 0, -5)); ShowEnterAnchorEnemies(enemyPrefab3, 1, new Vector3(0.7f, -1f, -5), new Vector3(0, -0.3f, -5)); ShowEnterAnchorEnemies(enemyPrefab1, 1, new Vector3(0.7f, -1f, -5), new Vector3(0, -0.6f, -5)); //yield return new WaitForSeconds(4); //10-15s yield return(new WaitForSeconds(1)); ShowEnterAnchorEnemies(enemyPrefab1, 1, new Vector3(1.3f, 1f, -5), new Vector3(1.3f, 0.9f, -5)); ShowEnterAnchorEnemies(enemyPrefab1, 1, new Vector3(1.3f, 1f, -5), new Vector3(1.3f, 0.6f, -5)); //ShowEnterAnchorEnemies(enemyPrefab1, 1, new Vector3(1.3f, 1f, -5), new Vector3(1.3f, 0.3f, -5));; //ShowEnterAnchorEnemies(enemyPrefab1, 1, new Vector3(1.3f, -1f, -5), new Vector3(0, -0.3f, -5)); ShowEnterAnchorEnemies(enemyPrefab1, 1, new Vector3(1.3f, -1f, -5), new Vector3(0, -0.6f, -5)); ShowEnterAnchorEnemies(enemyPrefab1, 1, new Vector3(1.3f, -1f, -5), new Vector3(0, -0.9f, -5)); yield return(new WaitForSeconds(2)); ShowVeeMovementEnemies(enemyPrefab3, 2, new Vector3(0, 1f, -5), new Vector3(0, 0, -5), 0.3f); ShowVeeMovementEnemies(enemyPrefab1, 2, new Vector3(0, -1f, -5), new Vector3(0, 0, -5), 0.3f); yield return(new WaitForSeconds(2)); //15-20s yield return(new WaitForSeconds(3)); ShowLineMovementEnemies(enemyPrefab1, 3, new Vector3(2.5f, 0, -5), new Vector3(0, 0, -5)); yield return(new WaitForSeconds(2)); //20-25s ShowLineMovementEnemies(enemyPrefab3, 5, new Vector3(2.5f, 0, -5), new Vector3(Random.Range(0f, 1f), Random.Range(-1f, 1f), -5)); ShowVeeMovementEnemies(enemyPrefab1, 1, new Vector3(0.2f, 1f, -5), new Vector3(0, 0, -5), 0.3f); ShowVeeMovementEnemies(enemyPrefab1, 1, new Vector3(-0.2f, -1f, -5), new Vector3(0, 0, -5), 0.3f); /***************************************************************Part3*****************************************************/ //从屏幕右边直线进入3个敌机 ShowLineMovementEnemies(enemyPrefab1, 3, new Vector3(2.5f, 0.3f, -5), new Vector3(0, 0.3f, -5)); yield return(new WaitForSeconds(5)); //从屏幕右边直线进入3个敌机 ShowLineMovementEnemies(enemyPrefab2, 3, new Vector3(2.5f, 0.3f, -5), new Vector3(0, 0.3f, -5)); //从屏幕右上角斜线进入3个敌机,然后在屏幕中间点(0,9,-5)停驻0.3s,后从屏幕右下方飞出去 ShowVeeMovementEnemies(enemyPrefab1, 3, new Vector3(2.5f, 2.5f, -5), new Vector3(0, 0, -5), 0.3f); //移动方式同上一个,但是从右下方飞入,右上方飞出 ShowVeeMovementEnemies(enemyPrefab1, 3, new Vector3(2.5f, -2.5f, -5), new Vector3(0, 0, -5), 0.3f); yield return(new WaitForSeconds(3)); //从屏幕右边直线进入3个敌机 ShowLineMovementEnemies(enemyPrefab3, 3, new Vector3(2.5f, -0.3f, -5), new Vector3(0, 0.3f, -5)); //从屏幕右侧水平成排进入4个敌人,然后停在屏幕中某一点(0.3f,2f,-5) ShowEnterAnchorEnemies(enemyPrefab1, 4, new Vector3(2.5f, 0.5f, -5), new Vector3(0.3f, 0.5f, -5)); //移动方式同上一行,但是是对称的 ShowEnterAnchorEnemies(enemyPrefab2, 2, new Vector3(2.5f, -0.5f, -5), new Vector3(0.3f, -0.5f, -5)); yield return(new WaitForSeconds(1)); ShowEnterAnchorEnemies(enemyPrefab3, 2, new Vector3(2.5f, -0.5f, -5), new Vector3(0.3f, -0.5f, -5)); yield return(new WaitForSeconds(7)); //从屏幕上方顺序进入3个敌机,然后从下方出去 ShowLineMovementEnemies(enemyPrefab1, 3, new Vector3(1f, 2.5f, -5), new Vector3(1f, -2.5f, -5)); //移动轨迹类似上一行代码,但是从下方进入,上方出去 ShowLineMovementEnemies(enemyPrefab1, 3, new Vector3(0.5f, -2.5f, -5), new Vector3(0.5f, 2.5f, -5)); yield return(new WaitForSeconds(2)); //从屏幕右上方进入一个敌机,从屏幕左下方离开 ShowLineMovementEnemies(enemyPrefab1, 1, new Vector3(2f, 0.6f, -5), new Vector3(-0.5f, 0, -5)); //从屏幕右下方进入一个敌机,从屏幕左上方离开 ShowLineMovementEnemies(enemyPrefab2, 1, new Vector3(2f, -0.6f, -5), new Vector3(-0.5f, 0, -5)); //从屏幕右侧正中进入一个敌人,沿直线从左侧退出 ShowLineMovementEnemies(enemyPrefab3, 1, new Vector3(2f, 0, -5), new Vector3(0, 0, -5)); yield return(new WaitForSeconds(0.5f)); //从左上方顺序进入四辆敌机,在屏幕中间转向,后从屏幕左下方离开 ShowVeeMovementEnemies(enemyPrefab1, 4, new Vector3(0, 1f, -5), new Vector3(1, 0, -5), 0); //类似上一种敌机,但是移动轨迹对称 ShowVeeMovementEnemies(enemyPrefab1, 4, new Vector3(0, -1, -5), new Vector3(1, 0, -5), 0); yield return(new WaitForSeconds(5)); //下面四句,都是产生一个从屏幕右侧进入的敌机,直线水平运动,但是四个是同时进入的 ShowLineMovementEnemies(enemyPrefab1, 2, new Vector3(2f, 0.6f, -5), new Vector3(0, 0.6f, -5)); ShowLineMovementEnemies(enemyPrefab2, 2, new Vector3(2f, 0.3f, -5), new Vector3(0, 0.3f, -5)); ShowLineMovementEnemies(enemyPrefab2, 2, new Vector3(2f, -0.6f, -5), new Vector3(0, -0.6f, -5)); ShowLineMovementEnemies(enemyPrefab1, 2, new Vector3(2f, -0.3f, -5), new Vector3(0, -0.3f, -5)); yield return(new WaitForSeconds(0.5f)); //从屏幕上方依次进入四架敌机,沿垂直直线运动 ShowLineMovementEnemies(enemyPrefab1, 4, new Vector3(0, 1f, -5), new Vector3(0, -1f, -5)); //类似上一个,方向相反 ShowLineMovementEnemies(enemyPrefab1, 4, new Vector3(0.1f, -1f, -5), new Vector3(0.1f, 1f, -5)); /***************************************************************Part4*****************************************************/ //--3个一列横排定点出现 yield return(new WaitForSeconds(5)); ShowEnterAnchorEnemies(enemyPrefab2, 1, new Vector3(1.7f, 0.3f, -5), new Vector3(1.5f, 0.3f, -5)); ShowEnterAnchorEnemies(enemyPrefab3, 1, new Vector3(1.7f, 0f, -5), new Vector3(1.5f, 0f, -5)); ShowEnterAnchorEnemies(enemyPrefab1, 1, new Vector3(1.7f, -0.3f, -5), new Vector3(1.5f, -0.3f, -5)); //--3个一列横排定点出现和两侧出现 yield return(new WaitForSeconds(5)); //3个一列横排定点出现 ShowEnterAnchorEnemies(enemyPrefab1, 1, new Vector3(1.7f, 0.3f, -5), new Vector3(1.5f, 0.3f, -5)); ShowEnterAnchorEnemies(enemyPrefab1, 1, new Vector3(1.7f, 0f, -5), new Vector3(1.5f, 0f, -5)); ShowEnterAnchorEnemies(enemyPrefab1, 1, new Vector3(1.7f, -0.3f, -5), new Vector3(1.5f, -0.3f, -5)); //两侧出现 ShowVeeMovementEnemies(enemyPrefab1, 1, new Vector3(1.5f, 0.9f, -5), new Vector3(1.5f, 0.65f, -5), 3); ShowVeeMovementEnemies(enemyPrefab1, 1, new Vector3(1.2f, 0.9f, -5), new Vector3(1.2f, 0.65f, -5), 3); ShowVeeMovementEnemies(enemyPrefab1, 1, new Vector3(0.9f, 0.9f, -5), new Vector3(0.9f, 0.65f, -5), 3); ShowVeeMovementEnemies(enemyPrefab1, 1, new Vector3(1.5f, -0.9f, -5), new Vector3(1.5f, -0.65f, -5), 3); ShowVeeMovementEnemies(enemyPrefab1, 1, new Vector3(1.2f, -0.9f, -5), new Vector3(1.2f, -0.65f, -5), 3); ShowVeeMovementEnemies(enemyPrefab1, 1, new Vector3(0.9f, -0.9f, -5), new Vector3(0.9f, -0.65f, -5), 3); //--2行出现 yield return(new WaitForSeconds(5)); //4个一列横排出现 ShowLineMovementEnemies(enemyPrefab2, 4, new Vector3(1.7f, 0.35f, -5), new Vector3(1.5f, 0.35f, -5)); //4个一列横排出现 ShowLineMovementEnemies(enemyPrefab3, 4, new Vector3(1.7f, -0.35f, -5), new Vector3(1.5f, -0.35f, -5)); //--2列出现,一行从上之下,一行从下至上 yield return(new WaitForSeconds(5)); ShowEnterAnchorEnemies(enemyPrefab1, 1, new Vector3(1.1f, 1.4f, -5), new Vector3(1.1f, 0.3f, -5)); ShowEnterAnchorEnemies(enemyPrefab2, 1, new Vector3(1.1f, 1.1f, -5), new Vector3(1.1f, 0f, -5)); ShowEnterAnchorEnemies(enemyPrefab3, 1, new Vector3(1.1f, 0.8f, -5), new Vector3(1.1f, -0.3f, -5)); ShowEnterAnchorEnemies(enemyPrefab3, 1, new Vector3(1.5f, -1.4f, -5), new Vector3(1.5f, -0.3f, -5)); ShowEnterAnchorEnemies(enemyPrefab2, 1, new Vector3(1.5f, -1.1f, -5), new Vector3(1.5f, 0, -5)); ShowEnterAnchorEnemies(enemyPrefab1, 1, new Vector3(1.5f, -0.8f, -5), new Vector3(1.5f, -0.3f, -5)); //--3个一列横排定点出现 yield return(new WaitForSeconds(5)); ShowEnterAnchorEnemies(enemyPrefab1, 1, new Vector3(1.7f, 0.3f, -5), new Vector3(1.5f, 0.3f, -5)); ShowEnterAnchorEnemies(enemyPrefab1, 1, new Vector3(1.7f, 0f, -5), new Vector3(1.5f, 0f, -5)); ShowEnterAnchorEnemies(enemyPrefab1, 1, new Vector3(1.7f, -0.3f, -5), new Vector3(1.5f, -0.3f, -5)); //--两侧出现 ShowVeeMovementEnemies(enemyPrefab1, 1, new Vector3(1.5f, 0.9f, -5), new Vector3(1.5f, 0.65f, -5), 3); ShowVeeMovementEnemies(enemyPrefab1, 1, new Vector3(1.2f, 0.9f, -5), new Vector3(1.2f, 0.65f, -5), 3); ShowVeeMovementEnemies(enemyPrefab1, 1, new Vector3(0.9f, 0.9f, -5), new Vector3(0.9f, 0.65f, -5), 3); ShowVeeMovementEnemies(enemyPrefab1, 1, new Vector3(1.5f, -0.9f, -5), new Vector3(1.5f, -0.65f, -5), 3); ShowVeeMovementEnemies(enemyPrefab1, 1, new Vector3(1.2f, -0.9f, -5), new Vector3(1.2f, -0.65f, -5), 3); ShowVeeMovementEnemies(enemyPrefab1, 1, new Vector3(0.9f, -0.9f, -5), new Vector3(0.9f, -0.65f, -5), 3); }
GameObject GenerateWarning(Vector3 position) { return(GeneratorHelper.GeneratorGameObject(position, warning, gameObject.transform.parent.gameObject)); }
public static GameObject GenerateBullets(GameObject prefab, Vector3 position, GameObject parent) { return(GeneratorHelper.GeneratorGameObject(position, prefab, parent)); }