My AI Script is not working fully.
Hello, i have been creating a script for a advancedAI, but can't get it to work fully, so i want the AI to detect when i for example hit it and start chasing me, but it does not seem to be able to detect me when i hit it.
Script here.
using UnityEngine; using System.Collections;
public class AdvancedEnemyAI : MonoBehaviour{
public int health = 100;
public float viewRange = 25f;
public float attackRange = 5f;
public bool isChasing = false;
public Transform playerTransform;
private NavMeshAgent agent;
private void Start()
{
agent = GetComponent<NavMeshAgent>(); // Find the Component "NavMeshAgent"
}
private void Update()
{
Ray ray = new Ray(transform.position, Vector3.forward);
RaycastHit hitInfo;
CheckHealth();
if(Physics.Raycast(ray, out hitInfo, viewRange))
{
if(hitInfo.collider.tag == "Player")
{
if (isChasing == false)
{
isChasing = true;
if(playerTransform == null)
{
playerTransform = hitInfo.collider.GetComponent<Transform>();
}
}
}
}
if (Physics.Raycast(ray, out hitInfo, attackRange))
{
}
Debug.DrawRay(ray.origin, ray.direction * viewRange, Color.red);
if (isChasing == true)
{
agent.SetDestination(playerTransform.position);
}
}
public void TakeDamage(int damage)
{
health -= damage;
Debug.Log("Enemy took damage and now has " + health + "health!");
}
private void CheckHealth()
{
if(health <= 0)
{
Destroy(gameObject);
}
}
}
And the Detecting Script here
using UnityEngine; using System.Collections;
public class PlayerDetector : MonoBehaviour {
private Transform playerDetectoTransform;
private AdvancedEnemyAI advancedEnemyAI;
private void Start()
{
advancedEnemyAI = GetComponentInParent<AdvancedEnemyAI>();
}
private void OnTriggerEneter(Collider target)
{
if (target.tag == "Player")
{
playerDetectoTransform = target.GetComponent<Transform>();
if(advancedEnemyAI.playerTransform == null)
{
advancedEnemyAI.playerTransform = playerDetectoTransform;
}
}
}
}
Answer by PrisVas · Jul 08, 2016 at 04:58 PM
First: I would change something in your script. Its sees be a lot of unecessary stuff. Don't you get a compilation error? OnTriggerEneter is written wrong. It´s OnTriggerEnter.
Check if your player has a rigidybody and a cillider. Check if your enemy has a it too. Verify the "Is Trigger" option in both objects. Read more about both below https://docs.unity3d.com/ScriptReference/Collider-isTrigger.html
https://docs.unity3d.com/ScriptReference/Collision.html
Here´s what I would do: Uncheck the "Is Trigger" on both objects. Rigidbody on both objects. And this script in your enemy:
using UnityEngine; using System.Collections;
public class AdvancedEnemyAI : MonoBehaviour{
public int health = 100;
public float viewRange = 25f;
public float attackRange = 5f;
public bool isChasing = false;
public Transform playerTransform;
private NavMeshAgent agent;
private void Start()
{
agent = GetComponent<NavMeshAgent>(); // Find the Component "NavMeshAgent"
}
private void Update()
{
Ray ray = new Ray(transform.position, Vector3.forward);
RaycastHit hitInfo;
//CheckHealth();
//if(Physics.Raycast(ray, out hitInfo, viewRange))
//{
//if(hitInfo.collider.tag == "Player")
//{
//if (isChasing == false)
//{
//isChasing = true;
//if(playerTransform == null)
//{
//playerTransform = hitInfo.collider.GetComponent<Transform>();
//}
//}
//}
//}
if (Physics.Raycast(ray, out hitInfo, attackRange))
{
}
Debug.DrawRay(ray.origin, ray.direction * viewRange, Color.red);
if (isChasing == true)
{
agent.SetDestination(playerTransform.position);
}
}
void OnCollisionEnter(Collision target)
{
if (target.tag == "Player")
{
playerDetectoTransform = target.GetComponent<Transform>();
if(advancedEnemyAI.playerTransform == null)
{
advancedEnemyAI.playerTransform = playerDetectoTransform;
}
}
}
//public void TakeDamage(int damage)
//{
//health -= damage;
//Debug.Log("Enemy took damage and now has " + health + "health!");
//}
// Call you where you used to call TakeDamage
public void CheckHealth(int damage)
{
if(health <= 0)
{
Destroy(gameObject);
}
else
{
health -= damage;
Debug.Log("Enemy took damage and now has " + health + "health!");
}
}
So i have been working a bit on the script since i posted it here, and made the AI do damage to me and make him wander around automatically. And thanks to you, my problem that i had with him not detecting me got half fixed. But not everything, he now detects me when i hit him but stops chasing me after hitting me once. If you could take a look i would appreciate it.
Script here: http://pastebin.com/XXb24n8Q
Your answer
Follow this Question
Related Questions
My enemy attacks backwards, and i'm not sure why it does this 0 Answers
AI targeting player in complete wrong direction 1 Answer
How To Stop Enemy Movement During Its Attack Animation 1 Answer
How do I get my enemy to flip to face the direction he is moving? 3 Answers
Fix for Enemy AI script 0 Answers