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;
}
}
}