1
This commit is contained in:
@@ -6,6 +6,8 @@ using System.Linq;
|
||||
using Cysharp.Threading.Tasks;
|
||||
using UnityEngine.Jobs;
|
||||
using UnityEngine.Pool;
|
||||
using UnityEngine.Profiling;
|
||||
|
||||
namespace BITKit.Sensors
|
||||
{
|
||||
public class RangeSensor : Sensor
|
||||
@@ -21,11 +23,20 @@ namespace BITKit.Sensors
|
||||
private FrameUpdate frameUpdater;
|
||||
private readonly Collider[] colliders = new Collider[32];
|
||||
private RaycastHit[] hits;
|
||||
public override IEnumerable<Transform> Get() => detected;
|
||||
|
||||
public override IEnumerable<Transform> Get()
|
||||
{
|
||||
if (!_detectedDoubleBuffer.TryGetRelease(out var newRelease)) return _detectedBuffer;
|
||||
Profiler.BeginSample("Release Detected Buffer");
|
||||
_detectedBuffer = newRelease;
|
||||
Profiler.EndSample();
|
||||
return _detectedBuffer;
|
||||
}
|
||||
private readonly DoubleBuffer<IEnumerable<Transform>> _detectedDoubleBuffer=new();
|
||||
private IEnumerable<Transform> _detectedBuffer;
|
||||
private void Update()
|
||||
{
|
||||
if (autoUpdate)
|
||||
if (autoUpdate && SensorGlobalSettings.Enabled)
|
||||
{
|
||||
Execute().Forget();
|
||||
}
|
||||
@@ -35,14 +46,11 @@ namespace BITKit.Sensors
|
||||
if (frameUpdater.Allow is false) return UniTask.CompletedTask;
|
||||
var location = new Location(transform);
|
||||
var length = Physics.OverlapSphereNonAlloc(location, radius, colliders, detectLayer);
|
||||
var list = new List<Transform>();
|
||||
list.AddRange(from x in colliders.Take(length) where IsValid(x) select x.transform);
|
||||
detected = list.ToArray();
|
||||
list.Clear();
|
||||
// detected = colliders
|
||||
// .Take(length)
|
||||
// .Select(x => x.transform)
|
||||
// .ToArray();
|
||||
Profiler.BeginSample("Filter Detected Colliders");
|
||||
var _newDetected = from x in colliders.Take(length) where IsValid(x) select x.transform;
|
||||
Profiler.EndSample();
|
||||
//detected = _newDetected.ToArray();
|
||||
_detectedDoubleBuffer.Release(_newDetected);
|
||||
return UniTask.CompletedTask;
|
||||
}
|
||||
|
||||
@@ -81,15 +89,24 @@ namespace BITKit.Sensors
|
||||
Vector3.Distance(location, position),
|
||||
blockLayer
|
||||
);
|
||||
if (length > 0)
|
||||
switch (length)
|
||||
{
|
||||
if (hits[0].collider == _collider)
|
||||
{
|
||||
case 0:
|
||||
return true;
|
||||
}
|
||||
case 1:
|
||||
if (hits[0].collider == _collider)
|
||||
{
|
||||
return true;
|
||||
}
|
||||
break;
|
||||
default:
|
||||
if (hits.Take(length).Any(x => ignoreColliders.Contains(x.collider) is false))
|
||||
{
|
||||
return false;
|
||||
}
|
||||
break;
|
||||
}
|
||||
else return true;
|
||||
return false;
|
||||
return true;
|
||||
}
|
||||
}
|
||||
}
|
Reference in New Issue
Block a user