using UnityEngine; public class AI_BossFMT : SampleAI { public AI_BossFMT(GA_NpcClientFightBoss owner, Vector3 bornPosition) : base(owner, bornPosition) { BornPos = bornPosition; m_SleepTime = 2f; } protected override void OnUpdate() { base.OnUpdate(); m_Owner.SelectTarget = PlayerDatas.Instance.hero; if (m_Owner.SelectTarget == null) { return; } // 攻击间隔中 if (Time.time - m_LastAttackTime < (1f / m_Owner.ActorInfo.atkSpeed) * .8f) { return; } Skill _skill = m_Owner.SkillMgr.CurCastSkill; // 判断主角当前是否有技能尚未释放完毕 if (_skill != null) { if (!_skill.SkillCompelete) { return; } if (m_Owner.SkillMgr.DoingPrepareSkill) { return; } } _skill = m_Owner.SkillMgr.Get(10016); // 判断技能范围, 不在可释放范围需要移动至目标 float _compareDist = .5f + m_Owner.NpcConfig.ModelRadius; float _compareDistSqrt = _compareDist * _compareDist; // 计算当前和目标的距离 float _currentDistSqrt = MathUtility.DistanceSqrtXZ(m_Owner.Pos, m_Owner.SelectTarget.Pos); // 比较距离 if (_currentDistSqrt >= _compareDistSqrt) { // 移动至目标 m_Owner.MoveToTarget(m_Owner.SelectTarget, _compareDist); return; } Vector3 _forward = MathUtility.ForwardXZ(m_Owner.SelectTarget.Pos, m_Owner.Pos); m_Owner.destForward = m_Owner.Forward = _forward; m_Owner.Play(GAStaticDefine.State_Attack1Hash); m_Owner.SkillMgr.CastSkill(m_Owner.ServerInstID, _skill.id); uint hurtValue = 0; byte attackType = 0; AttackHandler.CalculateDamage(m_Owner, m_Owner.SelectTarget as GActorFight, _skill, 0, ref hurtValue, ref attackType); AttackHandler.HurtObjs _hurtObject = new AttackHandler.HurtObjs { AttackType = attackType, clientInstID = m_Owner.SelectTarget.ClientInstID, CurHP = m_Owner.SelectTarget.ActorInfo.Hp, CurHPEx = m_Owner.SelectTarget.ActorInfo.HpEx, HurtHP = hurtValue, ObjID = m_Owner.SelectTarget.ServerInstID, ObjType = (byte)m_Owner.SelectTarget.ActorType }; _skill.hurtClientList.Add(_hurtObject); m_Owner.StartCantAtkedRotate(); m_LastAttackTime = Time.time; } }