DrawCircle() public static method

Draws a Circle using Debug.Draw functions
public static DrawCircle ( Vector2 center, float radius, Color color, float numSegments = 40, float duration = 0.01f ) : void
center UnityEngine.Vector2 Center point.
radius float Radius of the circle.
color UnityEngine.Color Color for Debug.Draw.
numSegments float Number of segments for the circle, used for precision of the draw.
duration float Duration to show the circle.
return void
        private static void DrawCircleAndOverlaps(Collider2D[] overlappingColliders, Vector2 center, float radius)
        {
            bool  overlapsExist = overlappingColliders != null && overlappingColliders.Length > 0;
            Color drawColor     = overlapsExist ? HitCastColor : CastColor;

            DebugUtility.DrawCircle(center, radius, drawColor);

            DebugDrawColliders(overlappingColliders, HitColliderColor);
        }
Example #2
0
        /// <summary>
        /// Draws the CircleCollider2D using DebugDraw
        /// </summary>
        /// <param name="circleCollider">Circle collider instance.</param>
        /// <param name="color">Color for DebugDraw.</param>
        public static void DebugDraw(this CircleCollider2D circleCollider, Color color)
        {
            Vector3 scale = circleCollider.transform.localScale;

            // Radius scaling mimics how Unity scales the collider
            float scaledRadius = Mathf.Max(Mathf.Abs(scale.x), Mathf.Abs(scale.y)) * circleCollider.radius;

            // Apply Transform to Offset
            Vector2 transformedOffset = circleCollider.transform.TransformVector(circleCollider.offset);

            DebugUtility.DrawCircle((Vector2)circleCollider.transform.position + transformedOffset, scaledRadius, color);
        }
        private static void DrawHitsForCirclecast(RaycastHit2D[] hits, float radius)
        {
            if (hits != null && hits.Length > 0)
            {
                for (int i = 0; i < hits.Length; i++)
                {
                    // Draw a ray hit at each hit location
                    DrawRaycastHit2D(hits[i], radius * 0.1f);

                    // Draw centroid
                    DebugUtility.DrawCircle(hits[i].centroid, radius, HitNormalsColor);
                }
            }
        }
        private static void DrawRaycastHit2D(RaycastHit2D hit, float size = 1.0f)
        {
            // Draw the hit collider
            if (hit.collider != null)
            {
                hit.collider.DebugDraw(HitColliderColor);
            }

            // Draw the normal at the hit location, or a circle for hits from rays originating inside collider
            bool isRayOriginatingFromInside = Mathf.Approximately(hit.fraction, 0.0f) && hit.collider != null;

            if (isRayOriginatingFromInside)
            {
                DebugUtility.DrawCircle(hit.point, size, HitNormalsColor, 20);
            }
            else
            {
                Debug.DrawRay(hit.point, hit.normal * size, HitNormalsColor, 0.01f);
            }
        }
        private static void DrawCircleCastAndHits(
            RaycastHit2D[] hits,
            Vector2 origin,
            float radius,
            Vector2 direction,
            float distance = Mathf.Infinity)
        {
            // Nothing to draw with a 0 radius or 0 distance
            if (Mathf.Approximately(radius, 0.0f) || Mathf.Approximately(distance, 0.0f))
            {
                return;
            }

            // Just in case direction isn't normalized, do it now
            if (!Mathf.Approximately(direction.sqrMagnitude, 1.0f))
            {
                direction.Normalize();
            }

            DrawHitsForCirclecast(hits, radius);

            Color drawColor = RaycastHitsContainHit(hits) ? HitCastColor : CastColor;

            // Draw origin and end circles
            DebugUtility.DrawCircle(origin, radius, drawColor);
            Vector2 endCirclePosition = origin + (direction * distance);

            DebugUtility.DrawCircle(endCirclePosition, radius, drawColor);

            // Draw edges
            Vector2 radiusSegment    = direction * radius;
            Vector2 orthoganalRadius = new Vector2(radiusSegment.y, -radiusSegment.x);

            DebugUtility.DrawArrow(origin + orthoganalRadius, endCirclePosition + orthoganalRadius, drawColor);
            DebugUtility.DrawArrow(origin - orthoganalRadius, endCirclePosition - orthoganalRadius, drawColor);
        }