public void Tick(float delta_time) { if (pursue_target != null) { if (pursue_target.IsAlive()) { if (my_unit.IsCanAttack(pursue_target)) { //my_unit.Idle(); if (end_callback != null) { end_callback.Invoke(pursue_target); } } else { if (my_unit.IsCanSeeUnit(pursue_target)) { DoPursueTarget(delta_time); } else { //my_unit.SetPursueTarget(null); } } } else { //my_unit.SetPursueTarget(null); } } }
virtual public void AttackImplementTick() { if (my_unit.is_move_attack || (!my_unit.IsMoveState())) { if (target_unit == null) { target_unit = AttackAI.FindCanAttackTarget(my_unit); if (target_unit != null) { DoAttack(target_unit); } } else { if (target_unit.IsAlive()) { if (my_unit.IsCanAttack(target_unit)) { DoAttack(target_unit); } else { // 打不到,清空目标 target_unit = null; } } else { target_unit = null; } } } }
static public BLUnitBase FindCanAttackTarget(BLUnitHero hero_unit) { // 找到视野范围内,第一个能攻击到的目标 var enemys = BattleVisionControl.Instance().GetEnemys(hero_unit.team_id); if (enemys != null) { var enumerator = enemys.GetEnumerator(); while (enumerator.MoveNext()) { BLUnitBase enemy_unit = enumerator.Current; if (hero_unit.IsCanAttack(enemy_unit)) { return(enemy_unit); } } } return(null); }