/// <summary> /// 检查某个点是否靠近 Bounds 的指定边缘 /// </summary> /// <param name="point"></param> /// <param name="bounds"></param> /// <param name="edgeDirection">edgeDirection == "XAxis" || edgeDirection == "YAxis" || edgeDirection == "ZAxis"</param> /// <param name="distanceThreshold">边缘容差</param> /// <returns></returns> public static bool IsPointNearEdge(Vector3 point, Bounds bounds, string edgeDirection, float distanceThreshold = 0.1f) { // 获取边界框的最小和最大位置 float minX = Mathf.Min(bounds.min.x, bounds.max.x); float maxX = Mathf.Max(bounds.min.x, bounds.max.x); float minY = Mathf.Min(bounds.min.y, bounds.max.y); float maxY = Mathf.Max(bounds.min.y, bounds.max.y); float minZ = Mathf.Min(bounds.min.z, bounds.max.z); float maxZ = Mathf.Max(bounds.min.z, bounds.max.z); // 判断指定方向是否为有效的边缘方向 //bool isValidEdgeDirection = edgeDirection == EdgeDirection.XAxis || edgeDirection == EdgeDirection.YAxis || edgeDirection == EdgeDirection.ZAxis; bool isValidEdgeDirection = edgeDirection == "XAxis" || edgeDirection == "YAxis" || edgeDirection == "ZAxis"; // 判断指定点是否在边缘附近指定的距离范围内 if (!isValidEdgeDirection) { Debug.LogError("超出范围"); return false; } Debug.Log(edgeDirection); // 判断指定点是否在指定方向上靠近了另外两个方向的边缘 switch (edgeDirection) { case "XAxis": return (Mathf.Abs(point.x - minX) <= distanceThreshold || Mathf.Abs(point.x - maxX) <= distanceThreshold) && (point.y >= minY && point.y <= maxY) && (point.z >= minZ && point.z <= maxZ); case "YAxis": return (Mathf.Abs(point.y - minY) <= distanceThreshold || Mathf.Abs(point.y - maxY) <= distanceThreshold) && (point.x >= minX && point.x <= maxX) && (point.z >= minZ && point.z <= maxZ); case "ZAxis": return (Mathf.Abs(point.z - minZ) <= distanceThreshold || Mathf.Abs(point.z - maxZ) <= distanceThreshold) && (point.x >= minX && point.x <= maxX) && (point.y >= minY && point.y <= maxY); default: return false; } }
标签:min,Mathf,point,float,Bounds,靠近,edgeDirection,bounds,某个 From: https://www.cnblogs.com/Roz-001/p/18000271