Here’s my enemy ai’s patrol state. I think his yield waitforseconds() delay is stopping his waitidle animation from playing while he’s waiting. the script works as it is supposed to, except when he is waiting at a waypoint like he’s supposed to he just stands in a froze first frame of his waitidle animation until it’s time is up then resumes as he should.
//=====PATROL==============
function patrolstate () {
var way1distance = (waypoint1.position - myTransform.position).magnitude;
var way2distance = (waypoint2.position - myTransform.position).magnitude;
var way3distance = (waypoint3.position - myTransform.position).magnitude;
var way4distance = (waypoint4.position - myTransform.position).magnitude;
if (attacking == false && chasing == false && patrol == true){
if(patrol == true && nextwaypoint1 == true && way1canwait == false && way1distance <= waypointThreshold){
patrolspeed = patrolspeedreset;
waiting = false;
nextwaypoint1 = false;
nextwaypoint2 = true;
nextwaypoint3 = false;
nextwaypoint4 = false;
}
else if(patrol == true && nextwaypoint2 == true && way2canwait == false && way2distance <= waypointThreshold){
patrolspeed = patrolspeedreset;
waiting = false;
nextwaypoint1 = false;
nextwaypoint2 = false;
nextwaypoint3 = true;
nextwaypoint4 = false;
}
else if(patrol == true && nextwaypoint3 == true && way3canwait == false && way3distance <= waypointThreshold){
patrolspeed = patrolspeedreset;
waiting = false;
nextwaypoint1 = false;
nextwaypoint2 = false;
nextwaypoint3 = false;
nextwaypoint4 = true;
}
else if(patrol == true && nextwaypoint4 == true && way4canwait == false && way4distance <= waypointThreshold){
patrolspeed = patrolspeedreset;
waiting = false;
nextwaypoint1 = true;
nextwaypoint2 = false;
nextwaypoint3 = false;
nextwaypoint4 = false;
}
if(patrol == true && nextwaypoint1 == true && way1canwait == true && way1distance <= waypointThreshold){
patrolspeed = 0;
animation.Stop(walk.name);
animation[waitidle.name].speed = 1;
animation.CrossFade(waitidle.name);
waiting = true;
yield WaitForSeconds(waypointDelayTime);
waiting = false;
patrolspeed = patrolspeedreset;
nextwaypoint1 = false;
nextwaypoint2 = true;
nextwaypoint3 = false;
nextwaypoint4 = false;
return;
}
else if(patrol == true && nextwaypoint2 == true && way2canwait == true && way2distance <= waypointThreshold){
patrolspeed = 0;
animation.Stop(walk.name);
animation[waitidle.name].speed = 1;
animation.CrossFade(waitidle.name);
waiting = true;
yield WaitForSeconds(waypointDelayTime);
waiting = false;
patrolspeed = patrolspeedreset;
nextwaypoint1 = false;
nextwaypoint2 = false;
nextwaypoint3 = true;
nextwaypoint4 = false;
return;
}
else if(patrol == true && nextwaypoint3 == true && way3canwait == true && way3distance <= waypointThreshold){
patrolspeed = 0;
animation.Stop(walk.name);
animation[waitidle.name].speed = 1;
animation.CrossFade(waitidle.name);
waiting = true;
yield WaitForSeconds(waypointDelayTime);
waiting = false;
patrolspeed = patrolspeedreset;
nextwaypoint1 = false;
nextwaypoint2 = false;
nextwaypoint3 = false;
nextwaypoint4 = true;
return;
}
else if(patrol == true && nextwaypoint4 == true && way4canwait == true && way4distance <= waypointThreshold){
patrolspeed = 0;
animation.Stop(walk.name);
animation[waitidle.name].speed = 1;
animation.CrossFade(waitidle.name);
waiting = true;
yield WaitForSeconds(waypointDelayTime);
waiting = false;
patrolspeed = patrolspeedreset;
nextwaypoint1 = true;
nextwaypoint2 = false;
nextwaypoint3 = false;
nextwaypoint4 = false;
return;
}
if (nextwaypoint1 == true && way1distance > waypointThreshold && waiting == false){
myTransform.LookAt(waypoint1.position);
myTransform.Translate(patrolspeed * Vector3.forward * Time.deltaTime);
animation[walk.name].speed = walk_anim_speed;
animation.Play(walk.name);
}
else if (nextwaypoint2 == true && way2distance > waypointThreshold && waiting == false){
myTransform.LookAt(waypoint2.position);
myTransform.Translate(patrolspeed * Vector3.forward * Time.deltaTime);
animation[walk.name].speed = walk_anim_speed;
animation.Play(walk.name);
}
else if (nextwaypoint3 == true && way3distance > waypointThreshold && waiting == false){
myTransform.LookAt(waypoint3.position);
myTransform.Translate(patrolspeed * Vector3.forward * Time.deltaTime);
animation[walk.name].speed = walk_anim_speed;
animation.Play(walk.name);
}
else if (nextwaypoint4 == true && way4distance > waypointThreshold && waiting == false){
myTransform.LookAt(waypoint4.position);
myTransform.Translate(patrolspeed * Vector3.forward * Time.deltaTime);
animation[walk.name].speed = walk_anim_speed;
animation.Play(walk.name);
}
}
}
thanks to any that assist.
I was wondering if using Time.time would allow the delay and still enable his animation to run.