- Home /
 
Ai continues to move after calling it to stop
i have tried calling the skeleton to stop when he is within 2f of the player(Capsule) but he just ploughs through me. here is my code any help?:
var object1 : GameObject; var object2 : GameObject;
var MaxHealth : int = 100; var CurrentHealth : int;
//Defines Which Audio Clip To Play // 
public var ZombieMoanAudio : AudioClip; //Defines Which Audio Clip To Play // 
public var ZombiePissedAudio : AudioClip; //Defines Which Audio Clip To Play // 
public var ZombieDeathAudio : AudioClip;
var speed : float = 1.4; var target : Transform; //the enemy's target var moveSpeed = 3; var Stop = 0; var stop : int = 0; //move speed var rotationSpeed = 5; //speed of turning var myTransform : Transform; //current transform data of this enemy
function Awake() { myTransform = transform; //cache transform data for easy access/preformance } function Start () {
CurrentHealth = MaxHealth; } function ApplyDamage ( Damage : float) {
 if(CurrentHealth < 0) {
 return;
 }
 
 CurrentHealth -= Damage;
 
 if(CurrentHealth > 50){
 GameObject.Find("Skeleton").animation.Play("gethit");
 PlayZombieMoanAudio();
 }
 if(CurrentHealth == 50){
 GameObject.Find("Skeleton").animation.Play("gethit");
 PlayZombiePissedAudio();
 }
 if(CurrentHealth == 40){
 GameObject.Find("Skeleton").animation.Play("gethit");
 PlayZombieMoanAudio();
 }
 if(CurrentHealth == 30){
 GameObject.Find("Skeleton").animation.Play("gethit");
 PlayZombieMoanAudio();
 }
 if(CurrentHealth == 20){
 GameObject.Find("Skeleton").animation.Play("gethit");
 PlayZombieMoanAudio();
 }
 if(CurrentHealth == 10){
 GameObject.Find("Skeleton").animation.Play("gethit");
 PlayZombieMoanAudio();
 }
 if(CurrentHealth == 0){
 GameObject.Find("Skeleton").animation.Play("die");
 PlayZombieDeathAudio();
 }
 
 
               } function PlayZombieMoanAudio(){ audio.PlayOneShot(ZombieMoanAudio); } function PlayZombiePissedAudio(){ audio.PlayOneShot(ZombiePissedAudio); } function PlayZombieDeathAudio(){ audio.PlayOneShot(ZombieDeathAudio); } function Update() {
 myTransform.rotation = Quaternion.Slerp(myTransform.rotation,
 Quaternion.LookRotation(target.position - myTransform.position), rotationSpeed*Time.deltaTime);
 var distance = Vector3.Distance(object1.transform.position, object2.transform.position);
 //move towards the player
 if( CurrentHealth > 0)
 {
 myTransform.position += myTransform.forward * moveSpeed * Time.deltaTime;
 GameObject.Find("Skeleton").animation.Play("run");
 }
 else
 {
   myTransform.position += myTransform.forward * Stop * Time.deltaTime; 
   rotationSpeed = 0;
   GameObject.Find("Skeleton").animation.Stop("run");
 }
     if(distance < 2f)
 {
     GameObject.Find("Skeleton").animation.Stop("run");    
     if( CurrentHealth <= 0){
     GameObject.Find("Skeleton").animation.Play("attack");
     }
     else
     {
     //Nothing!//
     }
 }
 
               }
`
Your distance checks object1.transform.position, object2.transform.position, what are they? You could simplify some parts using transform.LookAt(target); and target is the player. then you move your guy forward. then distance = Victor3(transform.position,target,position)
Answer by fafase · Apr 06, 2012 at 10:17 AM
Here you could try to add a Character Controller to your zombie. Then they would interact with the environment. This is simplified so you still need to tweak it all to your wishes.
 var target : Transform;  // Drag the player here
 var speed : float = 10;  // the speed
 
 function Update(){
       transform.LookAt(target);  // the NPC looks at the player
       if(Vector3.Distance(transform.position,target,position)> 2){
            enemy.GetComponent(CharacterController).SimpleMove(speed*forward);
            animation.Play("Walk"); 
        }
 }
 
              Your answer
 
             Follow this Question
Related Questions
Flying AI Planes 0 Answers
Enemy AI; Run away from player (x and y) 1 Answer
game won't work in build 0 Answers
Audio Clumping 1 Answer