void Update() { for (int i = lstStates.Count - 1; i >= 0; i--) { SkillState state = lstStates[i]; if (state.actor.IsAlive() == false) { lstStates.RemoveAt(i); continue; } Skill skill = state.skill; AnimatorStateInfo cur = state.actor.Animator.GetCurrentAnimatorStateInfo(0); if (cur.IsName(skill.AnimationName)) // 播放中 { float time = cur.normalizedTime; // check all effects for (int j = 0; j < skill.HitPoints.Length; j++) { float t = skill.HitPoints[j] * 0.01f; if (t <= time && t > state.time) { for (int k = 0; k < skill.skilleffects.Length; k++) { SkillEffect effect = skill.skilleffects[k]; if (effect.CheckTrigger(SkillEffectTrigger.SKILL_EFFECT_TRIGGER_HITPOINT)) { effect.DoEffect(state.actor); } } } } state.time = time; } else // 播放结束 { if (state.time > 0.5f) { for (int j = 0; j < skill.skilleffects.Length; j++) { SkillEffect effect = skill.skilleffects[j]; if (effect.CheckTrigger(SkillEffectTrigger.SKILL_EFFECT_TRIGGER_END)) { effect.DoEffect(state.actor); } } lstStates.RemoveAt(i); } } } }
public void AddSkillState(Character actor, Skill skill) { SkillState state = new SkillState(); state.actor = actor; state.skill = skill; // check start for (int i = 0; i < skill.skilleffects.Length; i++) { SkillEffect effect = skill.skilleffects[i]; if (effect.CheckTrigger(SkillEffectTrigger.SKILL_EFFECT_TRIGGER_START)) { effect.DoEffect(actor); } } lstStates.Add(state); }
// 攻击 void OnAttack(Character actor) { if (actor.LastSummonID == ID) { return; } actor.LastSummonID = ID; actor.ActHit(); if (actor is Enemy) { BattleManager.GetInstance().EnemyHit(actor.ID, owner.ID); } else { BattleManager.GetInstance().PlayerHit(actor.ID, owner.ID); } actor.AttackEffect(cfg.hiteffect, 1, new Vector3(0, 0.5f, 0)); for (int i = 0; i < skilleffects.Length; i++) { SkillEffect effect = skilleffects[i]; if (effect.CheckTrigger(SkillEffectTrigger.SKILL_EFFECT_TRIGGER_HIT)) { effect.DoEffect(owner, actor); } } hitcount++; // limit attack count if (cfg.hitmax != 0 && hitcount >= cfg.hitmax) { End(); } }