/// <summary> /// 多次攻击 /// </summary> /// <param name="deployer"></param> /// <returns></returns> private IEnumerator RepeatDamage(SkillDeployer deployer) { float atkTime = 0; do { OnceDamage(); yield return(new WaitForSeconds(data.atkInterval)); atkTime += data.atkInterval; // 重新计算攻击目标 deployer.CalculateTargets(); } while (atkTime < data.durationTime); }
/// <summary> /// 生成技能 /// </summary> public void GenerateSkill(SkillData data) { Debug.Log($"生成技能:{data.name}持续时间:{data.durationTime}"); // GameObject skillGo = Instantiate (data.skillPrefab); // skillGo.transform.position = Vector3.forward ; // 采用对象池生成技能 GameObject skillGo = GameObejctPool.Instance.CreateObject(data.prefabName, data.skillPrefab, transform.position, transform.rotation); // 释放器 SkillDeployer deployer = skillGo.GetComponent <SkillDeployer> (); deployer.SkillData = data; deployer.DeploySkill(); // 销毁技能 // Destroy (skillGo, data.durationTime); // 回收技能 GameObejctPool.Instance.CollectObejct(skillGo, data.durationTime); // 开启技能冷却 StartCoroutine("CollTimeDown", data); }
public void Execute(SkillDeployer deployer) { data = deployer.SkillData; deployer.StartCoroutine(RepeatDamage(deployer)); }