Files
JJBB/Assets/Project/Script/Common/Utilities/RaycastDisplayer.cs
2024-08-23 15:49:34 +08:00

74 lines
2.2 KiB
C#
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

using UnityEngine;
public class RaycastDisplayer : MonoBehaviour
{
public static void DebugPhysicsRaycast(Ray ray, float distance, int layerMask)
{
#if UNITY_EDITOR
distance = Mathf.Max(distance, 1000f);
GetDisplayer().PhysicsRaycast(ray.origin, ray.direction.normalized * distance, layerMask);
#else
Module.Log.LogModule.ErrorLog("不允许在发布游戏中使用射线Debug用的RaycastDisplayer");
#endif
}
public static void DebugNavMeshRaycast(Ray ray, float distance, int areaMask)
{
#if UNITY_EDITOR
distance = Mathf.Max(distance, 1000f);
GetDisplayer().NavMeshRaycast(ray.origin, ray.direction.normalized * distance, areaMask);
#else
Module.Log.LogModule.ErrorLog("不允许在发布游戏中使用射线Debug用的RaycastDisplayer");
#endif
}
#if UNITY_EDITOR
private static RaycastDisplayer _displayer;
private Vector3 _start;
private Vector3 _end;
private Vector3? _hitPoint;
private static RaycastDisplayer GetDisplayer()
{
if (_displayer == null)
{
var displayObj = new GameObject("RaycastDisplayer");
_displayer = displayObj.EnsureComponent<RaycastDisplayer>();
}
return _displayer;
}
private void PhysicsRaycast(Vector3 start, Vector3 end, int layerMask)
{
_start = start;
_end = end;
RaycastHit hit;
if (Physics.Raycast(start, end - start, out hit, Vector3.Distance(start, end), layerMask))
_hitPoint = hit.point;
else
_hitPoint = null;
}
private void NavMeshRaycast(Vector3 start, Vector3 end, int areaMask)
{
_start = start;
_end = end;
UnityEngine.AI.NavMeshHit hit;
if (UnityEngine.AI.NavMesh.Raycast(start, end, out hit, areaMask))
_hitPoint = hit.position;
else
_hitPoint = null;
}
private void OnDrawGizmos()
{
Gizmos.color = Color.blue;
Gizmos.DrawLine(_start, _end);
if (_hitPoint != null)
{
Gizmos.color = Color.red;
Gizmos.DrawSphere(_hitPoint.Value, 0.1f);
}
}
#endif
}