using System.Collections.Generic; using UnityEngine; public static class RaycastExtensions { public static RaycastHit[] ConeCastAll(Vector3 origin, Vector3 direction, float coneAngle, float maxRadius, float maxDistance = Mathf.Infinity, int layerMask = Physics.DefaultRaycastLayers){ var sphereCastHits = Physics.SphereCastAll(origin - new Vector3(0,0,maxRadius), maxRadius, direction, maxDistance); if(sphereCastHits.Length > 0){ var coneCastHitList = new List(); for(int i = 0; i < sphereCastHits.Length; ++i){ var hitPoint = sphereCastHits[i].point; var directionToHit = hitPoint - origin; var angleToHit = Vector3.Angle(direction, directionToHit); if(angleToHit < coneAngle){ coneCastHitList.Add(sphereCastHits[i]); } } return coneCastHitList.ToArray(); }else{ return new RaycastHit[0]; } } }