1
This commit is contained in:
48
Packages/Runtime/Sensor/TriggerSensor.cs
Normal file
48
Packages/Runtime/Sensor/TriggerSensor.cs
Normal file
@@ -0,0 +1,48 @@
|
||||
using System.Collections;
|
||||
using System.Collections.Generic;
|
||||
using UnityEngine;
|
||||
using UnityEngine.Events;
|
||||
namespace BITKit.Sensors
|
||||
{
|
||||
public class TriggerSensor : MonoBehaviour
|
||||
{
|
||||
[Header(Constant.Header.Events)]
|
||||
public UnityEvent<Collider> onDetected = new();
|
||||
public UnityEvent<Collider> onLost = new();
|
||||
[Header(Constant.Header.InternalVariables)]
|
||||
List<Collider> _detected = new();
|
||||
void OnTriggerEnter(Collider collider)
|
||||
{
|
||||
if (IsValid(collider))
|
||||
{
|
||||
_detected.Add(collider);
|
||||
onDetected.Invoke(collider);
|
||||
}
|
||||
}
|
||||
void OnTriggerExit(Collider collider)
|
||||
{
|
||||
if (_detected.TryRemove(collider))
|
||||
{
|
||||
onLost.Invoke(collider);
|
||||
};
|
||||
}
|
||||
void OnCollisionEnter(Collision collision)
|
||||
{
|
||||
var collider = collision.collider;
|
||||
if (IsValid(collider))
|
||||
{
|
||||
_detected.Add(collider);
|
||||
onDetected.Invoke(collider);
|
||||
}
|
||||
}
|
||||
void OnCollisionStay(Collision collision)
|
||||
{
|
||||
var collider = collision.collider;
|
||||
if (_detected.TryRemove(collider))
|
||||
{
|
||||
onLost.Invoke(collider);
|
||||
};
|
||||
}
|
||||
bool IsValid(Component self)=>true;
|
||||
}
|
||||
}
|
Reference in New Issue
Block a user