BITKit/Packages/Runtime~/Unity/Scripts/Sensor/RaySensor.cs

38 lines
1.2 KiB
C#
Raw Normal View History

2023-08-11 23:57:37 +08:00
using System;
2023-06-05 19:57:17 +08:00
using System.Collections;
using System.Collections.Generic;
2023-08-11 23:57:37 +08:00
using System.Linq;
2023-06-05 19:57:17 +08:00
using Cysharp.Threading.Tasks;
using UnityEngine;
namespace BITKit.Sensors
{
public class RaySensor : Sensor
{
[Header(Constant.Header.Settings)]
public float distance;
2023-08-11 23:57:37 +08:00
public override IEnumerable<Transform> Get() => detected;
private readonly RaycastHit[] raycasts = new RaycastHit[16];
2023-06-29 14:57:11 +08:00
public override UniTask Execute()
2023-06-05 19:57:17 +08:00
{
2023-08-11 23:57:37 +08:00
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();
2023-06-05 19:57:17 +08:00
return UniTask.CompletedTask;
}
2023-08-11 23:57:37 +08:00
public override bool IsValid(Collider _collider) => ignoreColliders.Contains(_collider) is false;
2023-06-05 19:57:17 +08:00
public override float GetDistance() => distance;
2023-08-11 23:57:37 +08:00
private void Update()
{
if (autoUpdate)
{
Execute().Forget();
}
}
2023-06-05 19:57:17 +08:00
}
}