using System; using System.Collections; using System.Collections.Generic; using System.Linq; using Cysharp.Threading.Tasks; using UnityEngine; namespace BITKit.Sensors { public class RaySensor : Sensor { [Header(Constant.Header.Settings)] public float distance; public override IEnumerable Get() => detected; private readonly RaycastHit[] raycasts = new RaycastHit[16]; public override UniTask Execute() { var _transform = transform; var ray = new Ray(_transform.position,_transform.forward); var size = Physics.RaycastNonAlloc(ray, raycasts, distance, detectLayer); detected = raycasts .Take(size) .Select(x => x.collider) .Where(IsValid) .Select(x=>x.transform) .ToArray(); return UniTask.CompletedTask; } public override bool IsValid(Collider _collider) => ignoreColliders.Contains(_collider) is false; public override float GetDistance() => distance; private void Update() { if (autoUpdate) { Execute().Forget(); } } } }