public override void Update() { if (target == null || target.IsAlive == false) { chaseState?.StopState(false); chaseState = null; StopState(); return; } var targetPosition = targetRadius == null ? target.transform.position : targetRadius.GetClosestPoint(target.transform.position); var distance = Vector3.Distance(unit.transform.position, targetPosition); if (distance > unit.CurrentJob.attackRange) { PushChaseState(); return; } if (attackTimer >= unit.CurrentJob.attackCooldown) { unit.ShootProjectile(target); attackTimer = 0; } attackTimer += Time.deltaTime; }
protected MoveState PushMoveState(Unit unit, Vector3 moveDestination, float stopDistance, ObjectRadius objectRadius = null) { if (objectRadius != null) { moveDestination = objectRadius.GetClosestPoint(moveDestination); } var moveState = new MoveState(unit, moveDestination, stopDistance); PushState(moveState); return(moveState); }
public override void Update() { var targetPosition = targetRadius == null ? target.transform.position : targetRadius.GetClosestPoint(target.transform.position); if (target.IsAlive && Vector3.Distance(agent.transform.position, targetPosition) <= stopDistance) { agent.ResetPath(); Finish(); return; } UpdatePath(targetPosition); }