- Home /
Make an enemy only rotate with navmesh agent
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.
Answer by Munchy2007 · Jan 12, 2016 at 11:42 AM
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!
}
}
Your answer
Follow this Question
Related Questions
Enemy Will not die 1 Answer
Modify NavMeshPath for Tactical FPS (slicing the pie/sweeping maneuver) 0 Answers
How do you make a enemy AI hear approaching footsteps? 2 Answers
Need some help with Navmesh agents backing off from player / circling player please. 0 Answers
How do I make an enemy lead his shots? 2 Answers