/// <summary> /// 获取技能目标 /// </summary> /// <param name="skillActionProperty"></param> /// <returns></returns> List <IObject> GetTargets(SkillActionProperty skillActionProperty) { float width = 0.0f; if (skillActionProperty.mSkillRangParametr.Count > 1) { width = skillActionProperty.mSkillRangParametr[1]; } if (skillActionProperty.mSkillRangeType == SkillRangeType.SkillRangeType_SelfLine && skillActionProperty.mSkillRangParametr.Count > 2) { if (skillActionProperty.mSkillRangParametr[2] == -1 && skillActionProperty.mSkillRangParametr[0] >= 0) { skillActionProperty.mSkillRangParametr[0] = skillActionProperty.mSkillRangParametr[0] * skillActionProperty.mSkillRangParametr[2]; } } return(RangeTools.GetEnemyByAOI(mObj, skillActionProperty.mSkillRangeType, skillActionProperty.mSkillRangParametr[0], width)); }
/// <summary> /// 释放技能 /// </summary> public void DoSkill(int skillId) { if (!mSkillDic.ContainsKey(skillId)) { return; } Skill skill = mSkillDic[skillId]; // 检测技能释放条件 if (!skill.Do()) { return; } // 目标超过视野范围,设置目标为空,重新寻找新的目标 if (mTarget != null && UtilTools.Vec2Distance(mTarget, mObj) > skill.mSkillRange) { mTarget = null; } if (mTarget == null) { List <IObject> objList = RangeTools.GetEnemyByAOI(mObj, SkillRangeType.SkillRangeType_SelfRound, mDirectionRange, 0.0f); int objCount = objList.Count; float distance = float.MaxValue; IObject minDistanceObj = null; // 检测距离最近的攻击目标,调整朝向 for (int i = 0; i < objCount; ++i) { IObject enemy = objList[i]; if (enemy == null) { continue; } float tempDistance = UtilTools.Vec2Distance(mObj, enemy); if (tempDistance < distance) { distance = tempDistance; minDistanceObj = enemy; } } mTarget = minDistanceObj; } if (mTarget != null) { Vector3 dir = UtilTools.Vec3Direction(mTarget, mObj); mAnimatorManager.SetRotation(dir); } int type = skill.mSkillProperty.mAnimatorSkillProperty.mySkillAction; if (type == 0) { DoAttack(); } else { mAnimatorManager.SkillCtrl(skillId, type); } }