I think jeg can do somthing better for you:
this script below find the target… attakt it … and kill it … if it cant find og lost a target…it go to den nearste wayponit…and start look for it with this setup there is 5 waypoint and one target
var wayPoint1 : Transform;
var wayPoint2 : Transform;
var wayPoint3 : Transform;
var wayPoint4 : Transform;
var wayPoint5 : Transform;
var victim : Transform;
var speed : float;
var lastWaypoint=0;
var rotationSpeed : float;
var damage : int;
var dice : int = 1;
var baseDamage : int = 1;
private var myTransform : Transform;
//set monster states to a number for easy checking easy to add more states
private var idle : int = 0;
private var returnToSpawn : int = 1;
private var chasePlayer : int = 2;
private var attackPlayer : int = 3;
private var dead :int = 4;
private var status = returnToSpawn;
private var monsterStats : String;
private var seconds : int;
private var savedTime : int;
function Awake()
{
myTransform = transform;
}
function OnGUI()
{
GUI.Box(Rect(220,10,200,100), monsterStats);
}
function Update()
{
var target : Transform;
var dist1 = Vector3.Distance(wayPoint1.position, myTransform.position);
var dist2 = Vector3.Distance(wayPoint2.position, myTransform.position);
var dist3 = Vector3.Distance(wayPoint3.position, myTransform.position);
var dist4 = Vector3.Distance(wayPoint4.position, myTransform.position);
var dist5 = Vector3.Distance(wayPoint5.position, myTransform.position);
var aggro = Vector3.Distance(victim.position, myTransform.position);
var statusString :String;
seconds = Time.time;
if(aggro > 20)
status = returnToSpawn;
else if(aggro == 20 || aggro < 20 && aggro > 2)
status = chasePlayer;
else if(aggro < 2)
status = attackPlayer;
/*
if (dist > 50 ||(aggro > 20 && dist > 3))
status = returnToSpawn;
else if(dist <30 && (aggro < 20 && aggro > 2))
status = chasePlayer;
else if(aggro < 2)
status = attackPlayer;
*/
switch(status)
{
case returnToSpawn:
//Find næsten waypoint hvis du er mere end 4 meter fra det og du har miste spiller eller aldrig har set ham
if(dist1 < dist2 && dist1 < dist3 && dist1 < dist4 && dist1 < dist5 && dist1 > 4 && lastWaypoint == 0){
target = wayPoint1;
lastWaypoint = 1;
myTransform.rotation = Quaternion.Slerp(myTransform.rotation,Quaternion.LookRotation(target.position - myTransform.position),rotationSpeed * Time.deltaTime);
myTransform.position += transform.forward * (speed/2) * Time.deltaTime;
statusString = "wayPoint1";
Debug.Log("miste spiller gå til ");
break;
}
if(dist2 < dist3 && dist2 < dist4 && dist2 < dist5 && dist2 < dist1 && dist2 > 4 && lastWaypoint == 0){
target = wayPoint2;
lastWaypoint = 2;
myTransform.rotation = Quaternion.Slerp(myTransform.rotation,Quaternion.LookRotation(target.position - myTransform.position),rotationSpeed * Time.deltaTime);
myTransform.position += transform.forward * (speed/2) * Time.deltaTime;
statusString = "wayPoint1";
Debug.Log("1");
break;
}
else if(dist3 < dist4 && dist3 < dist5 && dist3 < dist1 && dist3 < dist2 && dist3 > 4 && lastWaypoint == 0){
target = wayPoint3;
lastWaypoint = 3;
myTransform.rotation = Quaternion.Slerp(myTransform.rotation,Quaternion.LookRotation(target.position - myTransform.position),rotationSpeed * Time.deltaTime);
myTransform.position += transform.forward * (speed/2) * Time.deltaTime;
statusString = "wayPoint3";
Debug.Log("1");
break;
}
else if(dist4 < dist5 && dist4 < dist1 && dist4 < dist2 && dist4 < dist3 && dist4 > 4 && lastWaypoint == 0){
target = wayPoint4;
lastWaypoint = 4;
myTransform.rotation = Quaternion.Slerp(myTransform.rotation,Quaternion.LookRotation(target.position - myTransform.position),rotationSpeed * Time.deltaTime);
myTransform.position += transform.forward * (speed/2) * Time.deltaTime;
statusString = "wayPoint4";
Debug.Log("1");
break;
}
else if(dist5 < dist1 && dist5 < dist2 && dist5 < dist3 && dist5 < dist4 && dist5 > 4 && lastWaypoint == 0){
target = wayPoint5;
lastWaypoint = 5;
myTransform.rotation = Quaternion.Slerp(myTransform.rotation,Quaternion.LookRotation(target.position - myTransform.position),rotationSpeed * Time.deltaTime);
myTransform.position += transform.forward * (speed/2) * Time.deltaTime;
statusString = "wayPoint5";
Debug.Log("1");
break;
}
//Find næsten waypoint hvis du er mindre eller ligmed 4 meter fra det og du har miste spiller eller aldrig har set ham
if(dist1 < dist2 && dist1 < dist3 && dist1 < dist4 && dist1 < dist5 && dist1 <= 4 && lastWaypoint == 0){
target = wayPoint2;
lastWaypoint = 2;
myTransform.rotation = Quaternion.Slerp(myTransform.rotation,Quaternion.LookRotation(target.position - myTransform.position),rotationSpeed * Time.deltaTime);
myTransform.position += transform.forward * (speed/2) * Time.deltaTime;
statusString = "wayPoint2";
Debug.Log("1");
break;
}
if(dist2 < dist3 && dist2 < dist4 && dist2 < dist5 && dist2 < dist1 && dist1 <= 4 && lastWaypoint == 0){
target = wayPoint3;
lastWaypoint = 3;
myTransform.rotation = Quaternion.Slerp(myTransform.rotation,Quaternion.LookRotation(target.position - myTransform.position),rotationSpeed * Time.deltaTime);
myTransform.position += transform.forward * (speed/2) * Time.deltaTime;
statusString = "wayPoint1";
Debug.Log("1");
break;
}
else if(dist3 < dist4 && dist3 < dist5 && dist3 < dist1 && dist3 < dist2 && dist3 <= 4 && lastWaypoint == 0){
target = wayPoint4;
lastWaypoint = 4;
myTransform.rotation = Quaternion.Slerp(myTransform.rotation,Quaternion.LookRotation(target.position - myTransform.position),rotationSpeed * Time.deltaTime);
myTransform.position += transform.forward * (speed/2) * Time.deltaTime;
statusString = "wayPoint4";
Debug.Log("1");
break;
}
else if(dist4 < dist5 && dist4 < dist1 && dist4 < dist2 && dist4 < dist3 && dist4 <= 4 && lastWaypoint == 0){
target = wayPoint5;
lastWaypoint = 5;
myTransform.rotation = Quaternion.Slerp(myTransform.rotation,Quaternion.LookRotation(target.position - myTransform.position),rotationSpeed * Time.deltaTime);
myTransform.position += transform.forward * (speed/2) * Time.deltaTime;
statusString = "wayPoint4";
Debug.Log("1");
break;
}
else if(dist5 < dist1 && dist5 < dist2 && dist5 < dist3 && dist5 < dist4 && dist5 <= 4 && lastWaypoint == 0){
target = wayPoint1;
lastWaypoint = 1;
myTransform.rotation = Quaternion.Slerp(myTransform.rotation,Quaternion.LookRotation(target.position - myTransform.position),rotationSpeed * Time.deltaTime);
myTransform.position += transform.forward * (speed/2) * Time.deltaTime;
statusString = "wayPoint1";
Debug.Log("1");
break;
}
//Gå hen til dit waypoint
if(dist1 < dist2 && dist1 < dist3 && dist1 < dist4 && dist1 < dist5 && dist1 > 4 && lastWaypoint == 1){
target = wayPoint1;
lastWaypoint = 1;
myTransform.rotation = Quaternion.Slerp(myTransform.rotation,Quaternion.LookRotation(target.position - myTransform.position),rotationSpeed * Time.deltaTime);
myTransform.position += transform.forward * (speed/2) * Time.deltaTime;
statusString = "wayPoint1";
Debug.Log("Gå til waypoint 1");
break;
}
if(dist2 < dist3 && dist2 < dist4 && dist2 < dist5 && dist2 < dist1 && dist2 > 4 && lastWaypoint == 2){
target = wayPoint2;
lastWaypoint = 2;
myTransform.rotation = Quaternion.Slerp(myTransform.rotation,Quaternion.LookRotation(target.position - myTransform.position),rotationSpeed * Time.deltaTime);
myTransform.position += transform.forward * (speed/2) * Time.deltaTime;
statusString = "wayPoint1";
Debug.Log("1");
break;
}
else if(dist3 < dist4 && dist3 < dist5 && dist3 < dist1 && dist3 < dist2 && dist3 > 4 && lastWaypoint == 3){
target = wayPoint3;
lastWaypoint = 3;
myTransform.rotation = Quaternion.Slerp(myTransform.rotation,Quaternion.LookRotation(target.position - myTransform.position),rotationSpeed * Time.deltaTime);
myTransform.position += transform.forward * (speed/2) * Time.deltaTime;
statusString = "wayPoint3";
Debug.Log("1");
break;
}
else if(dist4 < dist5 && dist4 < dist1 && dist4 < dist2 && dist4 < dist3 && dist4 > 4 && lastWaypoint == 4){
target = wayPoint4;
lastWaypoint = 4;
myTransform.rotation = Quaternion.Slerp(myTransform.rotation,Quaternion.LookRotation(target.position - myTransform.position),rotationSpeed * Time.deltaTime);
myTransform.position += transform.forward * (speed/2) * Time.deltaTime;
statusString = "wayPoint4";
Debug.Log("1");
break;
}
else if(dist5 < dist1 && dist5 < dist2 && dist5 < dist3 && dist5 < dist4 && dist5 > 4 && lastWaypoint == 5){
target = wayPoint5;
lastWaypoint = 5;
myTransform.rotation = Quaternion.Slerp(myTransform.rotation,Quaternion.LookRotation(target.position - myTransform.position),rotationSpeed * Time.deltaTime);
myTransform.position += transform.forward * (speed/2) * Time.deltaTime;
statusString = "wayPoint5";
Debug.Log("1");
break;
}
//Gå hen til næste til næste waypoint
if(dist1 < dist2 && dist1 < dist3 && dist1 < dist4 && dist1 < dist5 && dist1 <= 4 && lastWaypoint == 1){
target = wayPoint2;
lastWaypoint = 2;
myTransform.rotation = Quaternion.Slerp(myTransform.rotation,Quaternion.LookRotation(target.position - myTransform.position),rotationSpeed * Time.deltaTime);
myTransform.position += transform.forward * (speed/2) * Time.deltaTime;
statusString = "wayPoint2";
Debug.Log("gå til waypoint 2");
break;
}
if(dist2 < dist3 && dist2 < dist4 && dist2 < dist5 && dist2 < dist1 && dist2 <= 4 && lastWaypoint == 2){
target = wayPoint3;
lastWaypoint = 3;
myTransform.rotation = Quaternion.Slerp(myTransform.rotation,Quaternion.LookRotation(target.position - myTransform.position),rotationSpeed * Time.deltaTime);
myTransform.position += transform.forward * (speed/2) * Time.deltaTime;
statusString = "wayPoint3";
Debug.Log("1");
break;
}
else if(dist3 < dist4 && dist3 < dist5 && dist3 < dist1 && dist3 < dist2 && dist3 <= 4 && lastWaypoint == 3){
target = wayPoint4;
lastWaypoint = 4;
myTransform.rotation = Quaternion.Slerp(myTransform.rotation,Quaternion.LookRotation(target.position - myTransform.position),rotationSpeed * Time.deltaTime);
myTransform.position += transform.forward * (speed/2) * Time.deltaTime;
statusString = "wayPoint4";
Debug.Log("1");
break;
}
else if(dist4 < dist5 && dist4 < dist1 && dist4 < dist2 && dist4 < dist3 && dist4 <= 4 && lastWaypoint == 4){
target = wayPoint5;
lastWaypoint = 5;
myTransform.rotation = Quaternion.Slerp(myTransform.rotation,Quaternion.LookRotation(target.position - myTransform.position),rotationSpeed * Time.deltaTime);
myTransform.position += transform.forward * (speed/2) * Time.deltaTime;
statusString = "wayPoint4";
Debug.Log("1");
break;
}
else if(dist5 < dist1 && dist5 < dist2 && dist5 < dist3 && dist5 < dist4 && dist5 <= 4 && lastWaypoint == 5){
target = wayPoint1;
lastWaypoint = 1;
myTransform.rotation = Quaternion.Slerp(myTransform.rotation,Quaternion.LookRotation(target.position - myTransform.position),rotationSpeed * Time.deltaTime);
myTransform.position += transform.forward * (speed/2) * Time.deltaTime;
statusString = "wayPoint1";
Debug.Log("1");
break;
}
//Gå til et waypoint selvom du er tættere på et andet
if(dist1 < dist2 && dist1 < dist3 && dist1 < dist4 && dist1 < dist5 && dist2 > 4 && lastWaypoint == 2){
target = wayPoint2;
lastWaypoint = 2;
myTransform.rotation = Quaternion.Slerp(myTransform.rotation,Quaternion.LookRotation(target.position - myTransform.position),rotationSpeed * Time.deltaTime);
myTransform.position += transform.forward * (speed/2) * Time.deltaTime;
statusString = "wayPoint2";
Debug.Log("Gå til waypoint 2");
break;
}
if(dist2 < dist3 && dist2 < dist4 && dist2 < dist5 && dist2 < dist1 && dist3 > 4 && lastWaypoint == 3){
target = wayPoint3;
lastWaypoint = 3;
myTransform.rotation = Quaternion.Slerp(myTransform.rotation,Quaternion.LookRotation(target.position - myTransform.position),rotationSpeed * Time.deltaTime);
myTransform.position += transform.forward * (speed/2) * Time.deltaTime;
statusString = "wayPoint3";
Debug.Log("1");
break;
}
else if(dist3 < dist4 && dist3 < dist5 && dist3 < dist1 && dist3 < dist2 && dist4 > 4 && lastWaypoint == 4){
target = wayPoint4;
lastWaypoint = 4;
myTransform.rotation = Quaternion.Slerp(myTransform.rotation,Quaternion.LookRotation(target.position - myTransform.position),rotationSpeed * Time.deltaTime);
myTransform.position += transform.forward * (speed/2) * Time.deltaTime;
statusString = "wayPoint4";
Debug.Log("1");
break;
}
else if(dist4 < dist5 && dist4 < dist1 && dist4 < dist2 && dist4 < dist3 && dist5 > 4 && lastWaypoint == 5){
target = wayPoint5;
lastWaypoint = 5;
myTransform.rotation = Quaternion.Slerp(myTransform.rotation,Quaternion.LookRotation(target.position - myTransform.position),rotationSpeed * Time.deltaTime);
myTransform.position += transform.forward * (speed/2) * Time.deltaTime;
statusString = "wayPoint5";
Debug.Log("1");
break;
}
else if(dist5 < dist1 && dist5 < dist2 && dist5 < dist3 && dist5 < dist4 && dist1 > 4 && lastWaypoint == 1){
target = wayPoint1;
lastWaypoint = 1;
myTransform.rotation = Quaternion.Slerp(myTransform.rotation,Quaternion.LookRotation(target.position - myTransform.position),rotationSpeed * Time.deltaTime);
myTransform.position += transform.forward * (speed/2) * Time.deltaTime;
statusString = "wayPoint1";
Debug.Log("1");
break;
}
case chasePlayer:
target = victim;
lastWaypoint = 0;
myTransform.rotation = Quaternion.Slerp(myTransform.rotation,Quaternion.LookRotation(target.position - myTransform.position),rotationSpeed * Time.deltaTime);
myTransform.position += transform.forward * (speed/1) * Time.deltaTime;
statusString = "Chase";
break;
case attackPlayer:
target = victim;
lastWaypoint = 0;
myTransform.rotation = Quaternion.Slerp(myTransform.rotation,Quaternion.LookRotation(target.position - myTransform.position),rotationSpeed *Time.deltaTime);
statusString = "Attack";
if ( aggro > 1 )
status = chasePlayer;
if(seconds != savedTime)
{
damage =(((Random.Range(1,baseDamage)) * (Random.Range(1, dice)))* seconds);
Spillerliv.playLives = -damage;
savedTime = seconds;
}
}
myTransform.eulerAngles = new Vector3(0,myTransform.eulerAngles.y, 0);
monsterStats = "Spawn Distance: " + dist1 + "
Victim Distance: " + aggro + "
Status: " + statusString + "
Damage: " + damage + "
seconds: " + seconds + "
savedTime: " + savedTime;
}
the next scrip you need to put on your player…for him to have life and lost life
static var playLives: int;
function OnGUI(){
GUI.Label(Rect(10,30,200,50),"Heath: " + (playLives+100) + "% ");
if(playLives <= -100)
Destroy(gameObject);
}
I am working on finding a way to make this must bettere put it that best I got so far.
I am the teamleader of a gamedevelloping team… we are all close to newbee in the this …but we hope to make a good game and start firm to sell og develpoiing more games… we are at this time… 6 in our team now… sinds we are both working on a zombie like game …why not try to work together and share good info about making AI and maybe other things in the game … find me on facebook my email is borget@hotmail.com use it to find me… I do not read my email most of the time soo you facebook