public var target : Transform;
public var moveSpeed : float = 3.0;
public var attackRange : float = 10.0;
public var stopRange : float = 2.0;
function Start(){
var LastSeen = transform.position;
var wander = Vector3(LastSeen.x,transform.position.y,LastSeen.x) + Vector3(0,Random.Range(1,15),Random.Range(1,15));
while(true){
if( AttackRangeCheck() ){ // target object is within range
if( !StopRangeCheck() ){
LastSeen = target.position;
transform.LookAt(target);
transform.Translate(Vector3.forward*Time.deltaTime*moveSpeed);
}else{ Debug.Log("ATTACK!");
yield WaitForSeconds(1);}
}else{
if((Vector3.Distance(transform.position,LastSeen) < 15) || (Vector3.Distance(transform.position,wander) < 2)){
transform.LookAt(LastSeen);
transform.Translate(Vector3.forward*Time.deltaTime*moveSpeed);
}else{
if ((Vector3.Distance(transform.position,wander) < 3)) {
wander = Vector3(LastSeen.x,transform.position.y,LastSeen.x) + Vector3(0,Random.Range(1,15),Random.Range(1,15));}
transform.LookAt(wander);
transform.Translate(Vector3.forward*Time.deltaTime*(moveSpeed/2));
}}
yield;
}
}
function AttackRangeCheck() : boolean{
var distanceToTarget = Vector3.Distance(transform.position, target.position);
if(distanceToTarget <= attackRange)
return true;
else
return false;
}
function StopRangeCheck() : boolean{
var distanceToTarget = Vector3.Distance(transform.position, target.position);
if(distanceToTarget <= stopRange)
return true;
else
return false;
}
For some reason when you get to the wandering part after it loses the player it doesn’t wander it just kinda flips around and spins. Just put the script in a capsule with a rigidbody and you’ll see what I mean.