38 lines
1.2 KiB
C#
38 lines
1.2 KiB
C#
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<Transform> 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();
|
|
}
|
|
}
|
|
}
|
|
} |