using UnityEngine; public static class DebugUtilities { /// /// Draws a wire sphere using Debug.DrawLine for runtime visibility. /// public static void DrawWireSphere(Vector3 center, float radius, Color color, float duration, int quality = 3) { quality = Mathf.Clamp(quality, 1, 10); int segments = quality << 2; int subdivisions = quality << 3; int halfSegments = segments >> 1; float strideAngle = 360f / subdivisions; float segmentStride = 180f / segments; Vector3 first; Vector3 next; // Draw meridians (vertical circles) for (int i = 0; i < segments; i++) { first = (Vector3.forward * radius); first = Quaternion.AngleAxis(segmentStride * (i - halfSegments), Vector3.right) * first; for (int j = 0; j < subdivisions; j++) { next = Quaternion.AngleAxis(strideAngle, Vector3.up) * first; Debug.DrawLine(first + center, next + center, color, duration); first = next; } } // Draw parallels (horizontal circles) Vector3 axis; for (int i = 0; i < segments; i++) { first = (Vector3.forward * radius); first = Quaternion.AngleAxis(segmentStride * (i - halfSegments), Vector3.up) * first; axis = Quaternion.AngleAxis(90f, Vector3.up) * first; for (int j = 0; j < subdivisions; j++) { next = Quaternion.AngleAxis(strideAngle, axis) * first; Debug.DrawLine(first + center, next + center, color, duration); first = next; } } } }