This commit is contained in:
CortexCore
2023-07-17 10:23:47 +08:00
parent 3a61f6677b
commit 936a94c84b
17 changed files with 161 additions and 47 deletions

View File

@@ -1,3 +1,4 @@
using System;
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
@@ -13,6 +14,7 @@ namespace BITKit.Sensors
public float radius;
public int fov;
public bool requireSight;
public bool autoUpdate;
[Header(Constant.Header.Settings)]
public LayerMask blockLayer;
[Header(Constant.Header.InternalVariables)]
@@ -25,6 +27,14 @@ namespace BITKit.Sensors
Vector3 dir;
float maxDistance;
public override IEnumerable<Transform> Get() => detecteds;
private void Update()
{
if (autoUpdate)
{
Execute().Forget();
}
}
public override UniTask Execute()
{
if (frameUpdater)
@@ -120,4 +130,7 @@ namespace BITKit.Sensors
return Vector3.Distance(collider.transform.position, transform.position) <= radius;
}
}
#if UNITY_EDITOR
#endif
}

View File

@@ -28,25 +28,16 @@ namespace BITKit.Sensors
// ReSharper disable once FieldCanBeMadeReadOnly.Local
private List<Collider> detected = new();
private Queue<Collider> triggerEnterQueue=new();
private Queue<Collider> triggerExitQueue=new();
private readonly Queue<Collider> triggerEnterQueue=new();
private readonly Queue<Collider> triggerExitQueue=new();
private void OnTriggerEnter(Collider _collider)
{
triggerEnterQueue.Enqueue(_collider);
// if (IsValid(_collider) is false) return;
// if (detected.Contains(_collider)) return;
// detected.Add(_collider);
// onDetected.Invoke(_collider);
}
private void OnTriggerExit(Collider _collider)
{
triggerExitQueue.Enqueue(_collider);
// if (IsValid(_collider) is false) return;
// if (!detected.Remove(_collider)) return;
// onLost.Invoke(_collider);
}
private void OnCollisionEnter(Collision collision)
@@ -102,7 +93,36 @@ namespace BITKit.Sensors
}
}
#if UNITY_EDITOR
[CustomEditor(typeof(TriggerSensor))]
[CustomEditor(typeof(Sensor),true)]
public class SensorInspector:BITInspector<Sensor>
{
private VisualElement detectedContainer;
public override VisualElement CreateInspectorGUI()
{
FillDefaultInspector();
detectedContainer = root.Create<VisualElement>();
return root;
}
protected override void OnUpdate()
{
if (detectedContainer is null) return;
detectedContainer.Clear();
foreach (var x in agent.Get())
{
ObjectField objectField = new()
{
objectType = x.GetType(),
value = x,
};
objectField.SetEnabled(false);
detectedContainer.Add(objectField);
}
}
}
[CustomEditor(typeof(TriggerSensor),true)]
public class TriggerSensorInspector:BITInspector<TriggerSensor>
{
private VisualElement detectedContainer;