Hi, I’m trying to make a FPS where an enemy has a minigun and i want him to chase you but then stop and rotate towards the player to shoot, then run again. I got the chasing part down but not the stopping and shooting part. for all the enemies I’ve created, I’ve been using the navmesh agent set destination to move the enemy towards the player, and I want to see if I can do the same with the minigun enemy.
I did it in one of my games by turning off updatePosition while it rotated to the next waypoint, and then re-enabling updatePosition once the agent had rotated to face the new target.
Here is a working example, could probably be optimised a bit. Put this script on an object with a NavMeshAgent, and populate the targets array with your waypoints.
using UnityEngine;
using System.Collections;
public class NavMeshFollower : MonoBehaviour {
[SerializeField] Transform[] targets;
int index = 0;
NavMeshAgent agent;
// Use this for initialization
void Start () {
agent = GetComponent<NavMeshAgent>();
agent.SetDestination(targets[index].position);
}
// Update is called once per frame
void Update () {
if(agent.hasPath && agent.remainingDistance<0.5f) // Reached target?
{
agent.updatePosition = false;
StartCoroutine(GetNextTarget());
}
}
IEnumerator GetNextTarget()
{
index = (int)Mathf.Repeat(++index,targets.Length); // Get next target point from array
var targetPos = targets[index].position; //Cache new target point
var agentPos = agent.transform.position; // Cache agent position
agent.SetDestination(targets[index].position); // Tell the agent where to look
var VecToTarget = targetPos - agentPos; // Calculate a vector from current agent position to new target
//Debug.DrawRay(agentPos,VecToTarget,Color.red,2f);
while(Vector3.Dot(VecToTarget.normalized,agent.transform.forward.normalized)<0.99f) // Check if agent is pointing to new target, and wait while it isn't
{
yield return null;
}
agent.Warp(agentPos); // Reset agent position
agent.SetDestination(targetPos); // Reset agent target
agent.updatePosition = true; // Off we go!
}
}