private int ShowEffect(EffectArise arise) { int childCount = 0; if (param == null || entity == null) { return(childCount); } if (entity.TryGetComponent(out EntityComponentModel model) == false) { return(childCount); } for (int i = 0; i < param.children.Count; ++i) { var child = param.children[i] as EntityParamEffect; if (child == null || string.IsNullOrEmpty(child.asset) || child.arise != arise) { continue; } childCount++; if (child.delay > 0) { DelayManager.Instance.AddDelayTask(child.delay, delegate() { EffectEntity effect = BattleManager.Instance.CreateEffect(child.effectType); if (effect != null && effect.Init(child, entity, mTarget, null)) { if (action != null) { effect.action = action; action.AddSubState(effect); } } else { BattleManager.Instance.RemoveEffect(effect); } }); } else { EffectEntity effect = BattleManager.Instance.CreateEffect(child.effectType); if (effect != null && effect.Init(child, entity, mTarget, null)) { if (action != null) { effect.action = action; action.AddSubState(effect); } } else { BattleManager.Instance.RemoveEffect(effect); } } } return(childCount); }
public static void BulletHit(Entity caster, Entity target, CSVSkill skillInfo) { if (target.IsDead || target.invincible) { return; } //受击动作 if (!string.IsNullOrEmpty(skillInfo.beattackAction)) { target.Anim.SyncAction(skillInfo.beattackAction); } //受击特效 if (!string.IsNullOrEmpty(skillInfo.beattackEffect)) { EffectEntity effect = EffectManager.Instance.GetEffect(skillInfo.beattackEffect); effect.Init(eDestroyType.Time, skillInfo.beattackActionDuration); effect.Pos = target.Pos; effect.Forward = target.Forward; } CalcBlood(caster, target, skillInfo); }
private void ShowEffect(float deltaTime) { if (mParamAnimationClip == null || agent.param == null) { return; } var param = agent.param.GetAnimation(mParamAnimationClip.animationClip); if (param == null) { return; } deltaTime = action.speed * deltaTime; for (int i = 0; i < param.children.Count; ++i) { var child = param.children[i] as EntityParamEffect; if (child == null || string.IsNullOrEmpty(child.asset)) { continue; } float time = action.time - mBeginTime; float previousTime = time - deltaTime; float delay = (child.delay - mParamAnimationClip.beginAt) / (mParamAnimationClip.speed > 0 ? mParamAnimationClip.speed : 1); if (delay < deltaTime) { delay = deltaTime; } if (previousTime < delay && time >= delay) { EffectEntity effect = BattleManager.Instance.CreateEffect(child.effectType); if (effect != null && effect.Init(child, agent, agent.target, null)) { effect.action = action; action.AddSubState(effect); } else { BattleManager.Instance.RemoveEffect(effect); } } } }
/// <summary> /// 显示子特效 /// </summary> /// <param name="effectType"></param> private void ShowEffect(EffectArise effectType) { if (param != null && param.effects != null) { for (int i = 0; i < param.effects.Count; ++i) { var effect = param.effects[i]; if (effect.effectArise == effectType) { EffectEntity entity = BattleManager.instance.CreateEffect(effect.type); entity.Init(action, param.effects[i], parentTarget); } } } }
//由时间控制的击中事件,一般是近战类攻击击中目标 public void SkillHit(uint skillID, List <Entity> targets = null) { if (targets == null) { Log.Info("技能id = " + skillID + " 没有目标"); return; } CSVSkill skillInfo = CSVManager.GetSkillCfg(skillID); //技能类型(1.普攻 2.物理 3.法术 4.保护 5.治疗 6.辅助 7.召唤 8.被动) if (skillInfo.type <= 3) { for (int i = 0; i < targets.Count; i++) { Entity target = targets[i]; if (target.IsDead || target.invincible) { continue; } //受击动作 if (!string.IsNullOrEmpty(skillInfo.beattackAction)) { target.Anim.SyncAction(skillInfo.beattackAction); } //受击特效 if (!string.IsNullOrEmpty(skillInfo.beattackEffect)) { EffectEntity effect = EffectManager.Instance.GetEffect(skillInfo.beattackEffect); effect.Init(eDestroyType.Time, skillInfo.beattackActionDuration); effect.Pos = target.Pos; effect.Forward = target.Forward; } SkillProcesser.CalcBlood(m_entity, target, skillInfo); } } else if (skillInfo.type <= 6) { //添加增益buff for (int i = 0; i < targets.Count; i++) { } } }
public void Init(Entity caster, CSVSkill skillInfo, BulletHitCallback notify = null, Entity target = null) { m_effect = EffectManager.Instance.GetEffect(skillInfo.BulletEffect); if (m_effect == null) { Log.Error("不存在特效 " + skillInfo.BulletEffect); return; } m_caster = caster; m_target = target; if (target == null) { bulletType = eBulletType.Dir; m_dir = m_caster.Forward; } else { bulletType = eBulletType.Target; m_dir = (m_target.Pos - m_caster.Pos).normalized; } m_skillInfo = skillInfo; m_hitNotify = notify; //子弹存在的时间 = 子弹的攻击距离 / 子弹的飞行速度 小学物理知识 呵呵哒 duration = m_skillInfo.attackDistance / m_skillInfo.flySpeed; m_effect.Init(eDestroyType.Time, duration); m_fSpeed = m_skillInfo.flySpeed; if (!string.IsNullOrEmpty(m_skillInfo.BulletBindBone)) { m_effect.Pos = GetBonePos(m_caster, m_skillInfo.BulletBindBone); } else { m_effect.Pos = new Vector3(m_caster.Pos.x, m_caster.Pos.y + 0.5f, m_caster.Pos.z); } IsUsing = true; }
void PlayEffect(uint skillID, List <Entity> targets = null) { CSVSkill skillInfo = CSVManager.GetSkillCfg(skillID); if (string.IsNullOrEmpty(skillInfo.castEffect)) { return; } EffectEntity effect = EffectManager.Instance.GetEffect(skillInfo.castEffect); effect.Init(eDestroyType.Time, skillInfo.castEffectDuration); //特效绑定的骨骼 if (!string.IsNullOrEmpty(skillInfo.castEffectBindBone)) { Transform bone = null; if (skillInfo.castEffectBindBone.CompareTo("self") == 0) { bone = m_object.transform; } else { bone = m_entity.GetBone(skillInfo.castEffectBindBone); } if (bone != null) { effect.Bind(bone); } } //如果特效没有绑定位置,则默认位置为释放者的位置 else { effect.Pos = m_entity.Pos; effect.Forward = m_entity.Forward; } }
private void ShowEffect(EffectArise effectType) { if (param != null && param.effects != null && entity.isPool == false) { for (int i = 0; i < param.effects.Count; ++i) { if (param.effects[i].effectArise == effectType) { var target = BattleManager.instance.GetEntity(entity.data.target); if (target != null && target.isPool) { return; } EffectEntity effect = BattleManager.instance.CreateEffect(param.effects[i].type); effect.Init(this, param.effects[i], target); } } } }