using System.Collections; using System.Collections.Generic; using UnityEngine; /// /// 召唤伊斯兰事件,从伊斯兰隔间演出调用OnCall /// public class CallYiSiLan : Event { /// /// 召唤的伊斯兰的数量 /// [Header("召唤的伊斯兰的数量")] public int count; /// /// 伊斯兰预制体 /// [Header("伊斯兰预制体")] public GameObject yiSiLan; /// /// 伊斯兰的召唤x范围广度 /// [Header("伊斯兰的召唤x范围广度")] public float callRange; /// /// 召唤伊斯兰的位置 /// [Header("召唤伊斯兰的位置")] private Transform callYiSiLanPosition; [Header("最短召唤时间间隔")] public float yiSiLanMinTime; [Header("最长召唤时间间隔")] public float yiSiLanMaxTime; public List yiSiLans; [Header("结束演出")] public Stage endStage; private void Init(){ yiSiLans = new List(); callYiSiLanPosition = GameObject.Find("伊斯兰召唤点").transform; } void Update(){ if(yiSiLans.Count > 0){ for(int i = 0; i < yiSiLans.Count; i ++){ if(yiSiLans[i].state == Enemy.State.dead) yiSiLans.Remove(yiSiLans[i]); } } } [ContextMenu("OnCall")] public override void OnCall(){ Init(); StartCoroutine(CallThem()); } private IEnumerator CallThem(){ for(int i = 0; i < count; i++){ //实例化预制体 YiSiLan yi = Instantiate( yiSiLan, callYiSiLanPosition.position + new Vector3(Random.Range(-callRange,callRange),0,0), Quaternion.identity ).GetComponent(); yiSiLans.Add(yi); //等待范围内的随机时间 yield return new WaitForSeconds( Random.Range(yiSiLanMinTime,yiSiLanMaxTime) ); } //全部召唤完后,等待玩家打完 yield return new WaitUntil( () => { return ((yiSiLans.Count == 0) ? true : false); } ); //打完后等待一段反应时间 yield return new WaitForSeconds(2f); //触发结束演出 endStage.OnCall(); } }