trying to make an enemy shoot a projectile at the player when the player enters the enemys range

for some reason the projectile is fired but only when the enemy comes into contact with the player and very slowly for some reason. below is my code.

(there is a separate script on my projectile but that only deals with damage on the player)

public class flyingEnemy : MonoBehaviour {

public int maxHealth = 40;
Rigidbody2D rb2d;

public float speed;

public float attackRange;
private float lastAttackTime;
public float attackDelay;

public Transform target;
public float chaseRange;

public GameObject projectile;
public float bulletForce;
// Use this for initialization
void Start () {

}

// Update is called once per frame
void Update () {
    float distanceToTarget = Vector3.Distance(transform.position, target.position);
    if(distanceToTarget < chaseRange)
    {
        //start chasing player
        Vector3 targetDir = target.position - transform.position;
        float angle = Mathf.Atan2(targetDir.y, targetDir.x) * Mathf.Rad2Deg - 90f;
        Quaternion q = Quaternion.AngleAxis(angle, Vector3.forward);
        transform.rotation = Quaternion.RotateTowards(transform.rotation, q, 180);

        transform.Translate(Vector3.up * Time.deltaTime * speed);

    }
    if(distanceToTarget < attackRange)
    {

        //check to see if its time to attack again
        if (Time.time > lastAttackTime + attackDelay)
        {
            //do we have lineofsight?
            RaycastHit2D Hit = Physics2D.Raycast(transform.position, transform.up,attackRange);
            //what did the raycast hit?
            if (Hit.transform == target)
            {
                GameObject newBullet = Instantiate(projectile, transform.position, transform.rotation);
                newBullet.GetComponent<Rigidbody2D>().AddRelativeForce(new Vector2(0f, bulletForce));
                lastAttackTime = Time.time;
            }
        }
    }

}

Maybe you should look at this: SHOOTING/FOLLOW/RETREAT ENEMY AI WITH UNITY AND C# - EASY TUTORIAL - YouTube
It’s very well explained.:slight_smile:

You could use a trigger collider and write some code in the OnTriggerStay(). Or you could use something like if(transform.position - target.position).magnitude