using System.Collections.Generic; using System.Linq; using UnityEngine; using UnityEngine.Events; /// /// 边缘检测函数//未完成//TODO: /// namespace ZXK.GYJQR { public class BoundTrigger : MonoBehaviour { [Range(0.0f, 0.5f)] [System.NonSerialized] public float edgeRadius = 0.1f;//边缘检测的半径 public UnityEvent onNearEdge;//当前处于碰撞检测的范围内 public UnityEvent onOutEdge;//当前处于碰撞检测的范围外 public void Start() { enabled = false; } /// /// 检测是否与边缘层交互 /// /// public bool OnNearEdge(string tagName) { Collider collider = null; var screenPos = Input.mousePosition; var worldPos = transform.position; // 摄像机的世界坐标 var camPos = Camera.main.transform.position; // 投射长度 var lineLen = 1000; RaycastHit[] hits = Physics.SphereCastAll(worldPos, edgeRadius, camPos - worldPos, lineLen); if (hits.Length > 0) { for (int i = 0; i < hits.Length; i++) { if (hits[i].collider.tag.Equals(tagName)) { collider = hits[i].collider; } } } return collider != null; } /// /// 获取到进入碰撞检测的碰撞体 /// /// public List GetNearEdgeCollider() { return Physics.OverlapSphere(transform.position, edgeRadius).ToList(); } #if UNITY_EDITOR private void OnDrawGizmos() { Gizmos.DrawWireSphere(transform.position, edgeRadius); } #endif } }