- Home /
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;
}
}
}
}
Answer by triis4924 · Dec 30, 2018 at 11:32 PM
Maybe you should look at this: https://www.youtube.com/watch?v=_Z1t7MNk0c4&t It's very well explained.:)
Answer by ray2yar · Dec 31, 2018 at 02:33 PM
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
Your answer
Follow this Question
Related Questions
Multiple Cars not working 1 Answer
Distribute terrain in zones 3 Answers
Number rain background 2 Answers
2D Platformer Bug 0 Answers
I have a problem with coins 1 Answer