- Home /
Question by
gallant1357 · Oct 20, 2018 at 11:55 AM ·
raycastdetectionenemy ai
multiple enemy AI raycast
I have a cone shape with 3 raycasts, but the enemy only detect the player if the player is in either one of the 3 lines, i wanted to add more raycast to the enemy. I have ask around, some said to add more raycast with for loop, but im not familiar with raycasting, so i need help. the photo attachment below is what i have right now and what i want the ai raycast to be.
using System.Collections;![alt text][1]
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.AI;
public class enemyControl : MonoBehaviour
{
Ray enemyRay;
public Color rayColor;
RaycastHit rayHit;
bool follow;
public float sightDist;
private float timer = 0f;
public float heightMultiplier;
private Vector3 investigateSpot;
public float visionAngle;
private NavMeshAgent agent;
public GameObject him;
void Start()
{
agent = GetComponent<NavMeshAgent>();
him = GameObject.FindGameObjectWithTag("Player");
heightMultiplier = 1.36f;
}
void Update()
{
timer += Time.deltaTime;
enemyRay = new Ray(transform.position, transform.forward * sightDist);
Debug.DrawRay(transform.position + Vector3.up * heightMultiplier, transform.forward* sightDist, rayColor);
Debug.DrawRay(transform.position + Vector3.up * heightMultiplier, (transform.forward + transform.right).normalized * sightDist, rayColor);
Debug.DrawRay(transform.position + Vector3.up * heightMultiplier, (transform.forward - transform.right).normalized * sightDist, rayColor);
if (Physics.Raycast(transform.position + Vector3.up * heightMultiplier, transform.forward, out rayHit, sightDist))
{
if (rayHit.collider.gameObject.tag == "Player")
{
agent.SetDestination(him.transform.position);
him = rayHit.collider.gameObject;
}
}
if (Physics.Raycast(transform.position + Vector3.up* heightMultiplier, (transform.forward + transform.right).normalized, out rayHit, sightDist))
{
if (rayHit.collider.gameObject.tag == "Player")
{
agent.SetDestination(him.transform.position);
him = rayHit.collider.gameObject;
}
}
if (Physics.Raycast(transform.position + Vector3.up* heightMultiplier, (transform.forward - transform.right).normalized, out rayHit, sightDist))
{
if (rayHit.collider.gameObject.tag == "Player")
{
agent.SetDestination(him.transform.position);
him = rayHit.collider.gameObject;
}
}
}
void OnTriggerEnter(Collider coll)
{
if (coll.tag == "Player")
{
agent.SetDestination(him.transform.position);
him = coll.gameObject;
}
}
}
[1]: /storage/temp/126389-airaycast.png
airaycast.png
(16.9 kB)
Comment
Best Answer
Answer by mjdb3d · Oct 20, 2018 at 04:22 PM
![using UnityEngine;
using UnityEngine.AI;
public class enemyControl : MonoBehaviour
{
Ray enemyRay;
public Color rayColor;
RaycastHit rayHit;
bool follow;
public float sightDist;
private float timer = 0f;
public float heightMultiplier;
private Vector3 investigateSpot;
public float visionAngle = 45;
public int rayCount = 3;
private NavMeshAgent agent;
public GameObject him;
void Start()
{
agent = GetComponent<NavMeshAgent>();
him = GameObject.FindGameObjectWithTag("Player");
heightMultiplier = 1.36f;
}
void Update()
{
timer += Time.deltaTime;
enemyRay = new Ray(transform.position, transform.forward * sightDist);
//Debug.DrawRay(transform.position + Vector3.up * heightMultiplier, transform.forward * sightDist, rayColor);
//Debug.DrawRay(transform.position + Vector3.up * heightMultiplier, (transform.forward + transform.right).normalized * sightDist, rayColor);
//Debug.DrawRay(transform.position + Vector3.up * heightMultiplier, (transform.forward - transform.right).normalized * sightDist, rayColor);
for (int i = 0; i < rayCount; i++)
{
float angle = i * (visionAngle / (rayCount - 1));
Vector3 Direction = Quaternion.AngleAxis(angle + ( 180 - (visionAngle / 2)), transform.up) * new Vector3(0, 0, -360);
Debug.DrawRay(transform.position + Vector3.up * heightMultiplier, Direction * sightDist, rayColor);
if (Physics.Raycast(transform.position + Vector3.up * heightMultiplier, Direction, out rayHit, sightDist))
{
if (rayHit.collider.gameObject.tag == "Player")
{
agent.SetDestination(him.transform.position);
him = rayHit.collider.gameObject;
}
}
}
//if (Physics.Raycast(transform.position + Vector3.up * heightMultiplier, transform.forward, out rayHit, sightDist))
//{
// if (rayHit.collider.gameObject.tag == "Player")
// {
// agent.SetDestination(him.transform.position);
// him = rayHit.collider.gameObject;
// }
//}
//if (Physics.Raycast(transform.position + Vector3.up * heightMultiplier, (transform.forward + transform.right).normalized, out rayHit, sightDist))
//{
// if (rayHit.collider.gameObject.tag == "Player")
// {
// agent.SetDestination(him.transform.position);
// him = rayHit.collider.gameObject;
// }
//}
//if (Physics.Raycast(transform.position + Vector3.up * heightMultiplier, (transform.forward - transform.right).normalized, out rayHit, sightDist))
//{
// if (rayHit.collider.gameObject.tag == "Player")
// {
// agent.SetDestination(him.transform.position);
// him = rayHit.collider.gameObject;
// }
//}
}
void OnTriggerEnter(Collider coll)
{
if (coll.tag == "Player")
{
agent.SetDestination(him.transform.position);
him = coll.gameObject;
}
}
}][1]
[1]: /storage/temp/126409-capture1.png
capture1.png
(148.3 kB)
Your answer
![](https://koobas.hobune.stream/wayback/20220612180627im_/https://answers.unity.com/themes/thub/images/avi.jpg)
Follow this Question
Related Questions
enemy raycast to detect player 1 Answer
enemy Raycast cone detection 0 Answers
Raycast for audio detection in 'echos' general theory. 0 Answers
Checking detection of gameobject correction 2 Answers
Enemy Ai Field of View 0 Answers