- 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
 
 
             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
 koobas.hobune.stream
koobas.hobune.stream 
                       
                
                       
			     
			 
                