Enemy AI targeting script

Hey I am having trouble with my enemy AI script. The enemy targets work well. The only thing I can’t figure out is how to make it so when the enemy gets so close to me he stops. The problem I am having now is he gets close and starts going around in circles. Here is the script if that helps!

var target : Transform;
var moveSpeed = 3;
var rotationSpeed = 3;
var attackThreshold = 3;
var chaseThreshold = 10;
var maxDistance = 3;
var giveUpThreshold = 20;
var attackRepeatTime = 1;

private var chasing = false;
private var attackTime = Time.time;

var myTransform : Transform;

function Awake()
{
myTransform = transform;
}

function Start()
{
target = GameObject.FindWithTag(“Player”).transform; //target the player
}

function Update () {

// check distance to target every frame:
var distance = (target.position - myTransform.position).magnitude;

if (chasing) {

    //rotate to look at the player
    myTransform.rotation = Quaternion.Slerp(myTransform.rotation,
    Quaternion.LookRotation(target.position - myTransform.position), rotationSpeed*Time.deltaTime);

    //move towards the player
    myTransform.position += myTransform.forward * moveSpeed * Time.deltaTime;

    // give up, if too far away from target:
    if (distance > giveUpThreshold) {
        chasing = false;
    }

    // attack, if close enough, and if time is OK:
    if (distance < attackThreshold && Time.time > attackTime) {
        // Attack! (call whatever attack function you like here)
        attackTime = Time.time + attackRepeatTime;
    }

} else {
    // not currently chasing.

    // start chasing if target comes close enough
    if (distance < chaseThreshold) {
        chasing = true;
    }
}

}

What you want to use for a easy method is just a

if (Vector3.Distance(other.position, transform.position) < tooClose){
moveSpeed = 0;
}

That way once the AI’s distance between the player and the AI is less than the tooClose variable you cut the move speed to 0, then just simply add another distance script asking if the distance between the player and the AI is greater than tooClose and make the moveSpeed variable = 3 (or whatever your movespeed was).

This is essentially what you are doing there but you are just not cutting of the moveSpeed variable to 0 and then once you are greater than you tooClose variable putting it back to normal.

Thank you so much! That worked perfectly :slight_smile: Sorry for the late reply, between work and college I’m swamped. But you were a great help!

Sorry but it’s actually not 100% working. The target stops following me like expected, but he doesn’t start following back. I thought I did a right if, else statement. But Im new to this. Did I put It in the wrong spot or is it not formatted right?

var target : Transform; //the enemy’s target

var moveSpeed = 3; //move speed

var rotationSpeed = 3; //speed of turning

var attackThreshold = 3; // distance within which to attack

var chaseThreshold = 10; // distance within which to start chasing

var maxDistance = 3;

var giveUpThreshold = 20; // distance beyond which AI gives up

var attackRepeatTime = 1; // delay between attacks when within range

var tooClose = 2;

private var chasing = false;
private var attackTime = Time.time;

var myTransform : Transform; //current transform data of this enemy

function Awake()
{
myTransform = transform; //cache transform data for easy access/preformance
}

function Start()
{
target = GameObject.FindWithTag(“Player”).transform; //target the player
}

function Update () {

// check distance to target every frame:
var distance = (target.position - myTransform.position).magnitude;

if (chasing) {

if (Vector3.Distance(target.position, transform.position) < tooClose){
	moveSpeed = 0;
	
	else(Vector3.Distance(target.position, transform.position) > tooClose) {
	moveSpeed = 3;
	}
}

    //rotate to look at the player
    myTransform.rotation = Quaternion.Slerp(myTransform.rotation,
    Quaternion.LookRotation(target.position - myTransform.position), rotationSpeed*Time.deltaTime);

    //move towards the player
    myTransform.position += myTransform.forward * moveSpeed * Time.deltaTime;

    // give up, if too far away from target:
    if (distance > giveUpThreshold) {
    
        chasing = false;
    }

    // attack, if close enough, and if time is OK:
    if (distance < attackThreshold && Time.time > attackTime) {
        // Attack! (call whatever attack function you like here)
        attackTime = Time.time + attackRepeatTime;
    }

} else {
    // not currently chasing.

    // start chasing if target comes close enough
    
    if (distance < chaseThreshold) {
        chasing = true;
       
    }
}

}