Ты можешь использовать Physics.OverlapSphere. Дальность рейкаста будет дальностью видимости персонажа в твоем случае. После из всех полученных объектов найдешь тех которые попадают в поле видимости.
private bool IsVisibleTarget(Vector3 target)
{
directionToTarget = (target - myTransform.position).normalized;
return Vector3.Angle(entityTransform.forward, directionToTarget) < _viewAngle / 2;
}
_viewAngle угол обзора твоего персонажа.
Я думаю такой метод самый оптимальный.
Если говорить про твой метод то тебе через цикл нужно пускать лучи с определенным смещением. Минус твоего метода в том что чем дальше объект и больше обзор тем больше лучей придется выпустить с меньшим смещением.