Agent setDestination problems in an Animator Behaviour
Hi guys.
I'm creating an App that uses an State of an Animator where I create multiple points (waypoints) that set a route for an Agent. The first time I get into the state, everything works perfect. But then, when I change that state and return to the original, the agent doesn't move at all.
The Code I present you corresponde to the Behaviour of that State.
At the beginning I thought that maybe the waypoints was empty, but it's not. Then I checked that destination was set and I did. Finally I confirmed to unstopped the agent if it was stopped.
Nothing was worked. I really appreciate any suggestions. Don't know what else to do. Here is my code:
public class Patrol : NPCBaseFSM {
GameObject[] waypoints;
int currentWP;
private GameObject tempWayPoint;
bool destinationPatrolSetted = false;
void Awake()
{
waypoints = GameObject.FindGameObjectsWithTag ("wp");
ShuffleWPs ();
}
// OnStateEnter is called when a transition starts and the state machine starts to evaluate this state
override public void OnStateEnter(Animator animator, AnimatorStateInfo stateInfo, int layerIndex)
{
base.OnStateEnter (animator, stateInfo, layerIndex);
destinationPatrolSetted = false;
currentWP = 0;
}
// OnStateUpdate is called on each Update frame between OnStateEnter and OnStateExit callbacks
override public void OnStateUpdate(Animator animator, AnimatorStateInfo stateInfo, int layerIndex)
{
if (waypoints.Length == 0)
return;
if (Vector3.Distance(
waypoints[currentWP].transform.position,
NPC.transform.position) < accuracy)
{
currentWP++;
destinationPatrolSetted = false;
if (currentWP >= waypoints.Length)
{
currentWP = 0;
}
}
if (!destinationPatrolSetted)
{
agent.SetDestination (waypoints [currentWP].transform.position);
destinationPatrolSetted = true;
}
// If the agent is not moving, enable it to do it
if (agent.isStopped) {
agent.isStopped = false;
}
// Rotate towards target
var direction = waypoints[currentWP].transform.position - NPC.transform.position;
NPC.transform.rotation = Quaternion.Slerp (
NPC.transform.rotation,
Quaternion.LookRotation(direction),
rotSpeed * Time.deltaTime);
}
// OnStateExit is called when a transition ends and the state machine finishes evaluating this state
override public void OnStateExit(Animator animator, AnimatorStateInfo stateInfo, int layerIndex)
{
destinationPatrolSetted = false;
}
private void ShuffleWPs()
{
for (int i = 0; i < waypoints.Length; i++)
{
int rnd = Random.Range (0, waypoints.Length);
tempWayPoint = waypoints [rnd];
waypoints [rnd] = waypoints [i];
waypoints [i] = tempWayPoint;
}
}
Your answer
Follow this Question
Related Questions
How to prevent stationary ai agents from being pushed by moving agents? 1 Answer
NavMeshAgent nextPosition is not updating 1 Answer
How do i fix the blocks Clipping through eachoter? 0 Answers
Agent rotates when destination is set, causing it to get stuck and not move. 0 Answers
Problem with Navmesh on "Sidewalk" 0 Answers