- 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