89 lines
2.4 KiB
C#
89 lines
2.4 KiB
C#
![]() |
using System.Collections;
|
||
|
using System.Collections.Generic;
|
||
|
using UnityEngine;
|
||
|
|
||
|
/// <summary>
|
||
|
/// 召唤伊斯兰事件,从伊斯兰隔间演出调用OnCall
|
||
|
/// </summary>
|
||
|
public class CallYiSiLan : Event
|
||
|
{
|
||
|
/// <summary>
|
||
|
/// 召唤的伊斯兰的数量
|
||
|
/// </summary>
|
||
|
[Header("召唤的伊斯兰的数量")]
|
||
|
public int count;
|
||
|
|
||
|
/// <summary>
|
||
|
/// 伊斯兰预制体
|
||
|
/// </summary>
|
||
|
[Header("伊斯兰预制体")]
|
||
|
public GameObject yiSiLan;
|
||
|
/// <summary>
|
||
|
/// 伊斯兰的召唤x范围广度
|
||
|
/// </summary>
|
||
|
[Header("伊斯兰的召唤x范围广度")]
|
||
|
public float callRange;
|
||
|
|
||
|
/// <summary>
|
||
|
/// 召唤伊斯兰的位置
|
||
|
/// </summary>
|
||
|
[Header("召唤伊斯兰的位置")]
|
||
|
private Transform callYiSiLanPosition;
|
||
|
|
||
|
[Header("最短召唤时间间隔")]
|
||
|
public float yiSiLanMinTime;
|
||
|
[Header("最长召唤时间间隔")]
|
||
|
public float yiSiLanMaxTime;
|
||
|
public List<YiSiLan> yiSiLans;
|
||
|
[Header("结束演出")]
|
||
|
public Stage endStage;
|
||
|
|
||
|
private void Init(){
|
||
|
yiSiLans = new List<YiSiLan>();
|
||
|
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<YiSiLan>();
|
||
|
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();
|
||
|
}
|
||
|
|
||
|
}
|