41 lines
1.2 KiB
C#
41 lines
1.2 KiB
C#
using System;
|
|
using RebootKit.Engine.Simulation.Sensors;
|
|
using UnityEngine;
|
|
|
|
namespace RebootReality.jelycho.Player {
|
|
[Serializable]
|
|
public struct SingleRaySensor : ISensor {
|
|
[SerializeField] Transform m_Origin;
|
|
[SerializeField] LayerMask m_LayerMask;
|
|
[SerializeField] float m_MaxDistance;
|
|
|
|
public GameObject Sense() {
|
|
Ray ray = new Ray(m_Origin.position, m_Origin.forward);
|
|
|
|
if (Physics.Raycast(ray, out RaycastHit hit, m_MaxDistance, m_LayerMask)) {
|
|
return hit.collider.gameObject;
|
|
}
|
|
|
|
return null;
|
|
}
|
|
}
|
|
|
|
[Serializable]
|
|
public class SingleRaySensor<T> : ISensor<T> where T : class {
|
|
[SerializeField] Transform m_Origin;
|
|
[SerializeField] LayerMask m_LayerMask;
|
|
[SerializeField] float m_MaxDistance;
|
|
|
|
public T Sense() {
|
|
Ray ray = new Ray(m_Origin.position, m_Origin.forward);
|
|
|
|
if (Physics.Raycast(ray, out RaycastHit hit, m_MaxDistance, m_LayerMask)) {
|
|
if (hit.collider.TryGetComponent(out T component)) {
|
|
return component;
|
|
}
|
|
}
|
|
|
|
return null;
|
|
}
|
|
}
|
|
} |