Zombie AI Help

Hey Unity Community! Just have one quick question. When my zombie script gets to the player it just stops moving and sits there and won’t move. How do i fix this so even if it reaches the player, and if the player runs away it will still go after the player instead of just sitting there? Thanks!

Here’s the Script

#pragma strict

var target : Transform; //the enemy’s target
var moveSpeed = 3; //move speed
var rotationSpeed = 3; //speed of turning
var attackThreshold = 1.5; // distance within which to attack
var chaseThreshold = 10; // distance within which to start chasing
var giveUpThreshold = 20; // distance beyond which AI gives up
var attackRepeatTime = 1; // delay between attacks when within range
var Damage : float = 0.001;
private var chasing = false;
public var attackTime : float = 10;
var myTransform : Transform; //current transform data of this enemy

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

function Start(){
if (target == null GameObject.FindWithTag(“Player”))
target = GameObject.FindWithTag(“Player”).transform;
}

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 > attackRepeatTime) {
target.SendMessageUpwards(“ApplyDamage” , Damage , SendMessageOptions.DontRequireReceiver);
// Attack! (call whatever attack function you like here)
}
if (distance < attackThreshold) {
moveSpeed=0;
//stop when close enough
}
attackTime = Time.time+ attackRepeatTime;
}
else {
// not currently chasing.
// start chasing if target comes close enough
if (distance < chaseThreshold) {
chasing = true;
}
}
}

Put your stuff in code brackets next time :wink:

The problem you are having is that you are always setting move speed to 0 when attacking however, you are not setting chasing to false. Therefore it will never get to :

	else 
		{			
			if (distance < chaseThreshold) 
			{chasing = true;}
		}

So try this by adding chasing = false.

	if (distance < attackThreshold) 
		{
		moveSpeed=0;
	        chasing = false;
		}

But you are also never resetting moveSpeed, therefore once in attacking range, it will never go above 0. Therefore if you take the last else bit, you need to add moveSpeed = whatever.

	else 
		{			
			if (distance < chaseThreshold) 
			{
                        chasing = true;
                        moveSpeed = //Whatever
                        }
		}

Try that and get back to me.

Myhi

I would just like to say Thanks for taking time and reading the script. I implemented what you have suggested and it worked. THANK YOU!