- Home /
enemy not spotting player?
hi!can anyone help me? i am having issues with the enemy ai. whilst it does raise its gun at the player or patrol, for some reason not seem to chase the player. can anyone help me? thanks
using UnityEngine;
using System.Collections;
public class EnemyAI : MonoBehaviour
{
public float patrolSpeed = 2f;
public float chaseSpeed = 5f;
public float chaseWaitTime = 5f;
public float patrolWaitTime = 1f;
public Transform[] patrolWayPoints;
private EnemySight enemySight;
private NavMeshAgent nav;
private Transform player;
private PlayerHealth playerHealth;
private LastPlayerSighting lastPlayerSighting;
private float chaseTimer;
private float patrolTimer;
private int wayPointIndex;
void Awake ()
{
enemySight = GetComponent<EnemySight> ();
nav = GetComponent<NavMeshAgent> ();
player = GameObject.FindGameObjectWithTag(Tags.player).transform;
playerHealth = player.GetComponent<PlayerHealth> ();
lastPlayerSighting = GameObject.FindGameObjectWithTag (Tags.gameController).GetComponent<LastPlayerSighting> ();
}
void Update()
{
if (enemySight.playerInSight && playerHealth.health > 0f)
Shooting ();
else if (enemySight.personalLastSighting != lastPlayerSighting.resetPosition && playerHealth.health > 0f)
Chasing ();
else
Patrolling ();
}
void Shooting()
{
nav.Stop ();
}
void Chasing()
{
Vector3 sightingDeltaPos = enemySight.personalLastSighting - transform.position;
if (sightingDeltaPos.sqrMagnitude > 4f)
nav.destination = enemySight.personalLastSighting;
nav.speed = chaseSpeed;
if (nav.remainingDistance < nav.stoppingDistance) {
chaseTimer += Time.deltaTime;
if (chaseTimer > chaseWaitTime) {
lastPlayerSighting.position = lastPlayerSighting.resetPosition;
enemySight.personalLastSighting = lastPlayerSighting.resetPosition;
chaseTimer = 0f;
}
} else
chaseTimer = 0f;
}
void Patrolling()
{
nav.speed = patrolSpeed;
if(nav.destination == lastPlayerSighting.resetPosition || nav.remainingDistance < nav.stoppingDistance) {
patrolTimer += Time.deltaTime;
if (patrolTimer >= patrolWaitTime)
{
if (wayPointIndex == patrolWayPoints.Length - 1)
wayPointIndex = 0;
else
wayPointIndex++;
patrolTimer = 0f;
}
}
else
patrolTimer = 0f;
nav.destination = patrolWayPoints [wayPointIndex].position;
}
}
Answer by ericbegue · May 29, 2016 at 02:49 PM
Hi,
Have a look at Behaviour Tree, it's a great tool to make such AI, in a simpler way.
I'm the author of Panda BT (http://www.pandabehaviour.com), which is a script-based Behaviour Tree engine.
The package contains an examples of the patrol-chase-shoot behaviour among others AIs.
You are welcome on this thread if you have any question.
Your answer
Follow this Question
Related Questions
Multiple Cars not working 1 Answer
Distribute terrain in zones 3 Answers
MissingRefrenceException help for enemyai 1 Answer
Illuminating a 3D object's edges OnMouseOver (script in c#)? 1 Answer
GrenadeScript.cs Troubles 1 Answer