public static void Visualize(RaycastHit2D hit, Vector2 rayOrigin, RaycastHitColorAssigner rayColorAssigner = null, RaycastHitColorAssigner normalColorAssigner = null, float?visibilityDuration = null, params LineOptions[] options) { Vector2 p1 = rayOrigin; Vector2 p2; Color rayColor; Color normalColor = normalColorAssigner != null?normalColorAssigner(hit) : Color.yellow; float duration = visibilityDuration != null ? visibilityDuration.Value : 0f; if (hit.collider != null) { p2 = hit.point; rayColor = rayColorAssigner != null?rayColorAssigner(hit) : Color.red; Debug.DrawLine(hit.point, hit.point + hit.normal, normalColor, duration); } else { p2 = rayOrigin + hit.distance * hit.point; rayColor = rayColorAssigner != null?rayColorAssigner(hit) : Color.green; } if (ArrayOps.Contains(options, LineOptions.Dashed)) { DrawDashedLine(p1, p2, .1f, rayColor, duration); } else { DrawLine(p1, p2, rayColor, duration); } }
public static RaycastHit2D?NearestRaycastHit2D(Vector2 referencePoint, Ray2D ray, params Predicate <RaycastHit2D>[] conditions) { RaycastHit2D[] hits; hits = Physics2D.RaycastAll(ray.origin, ray.direction); hits = ArrayOps.KeepMatches(hits, conditions); return(Nearest(referencePoint, hits)); }
static void HandleDrawLine(Vector3 start, Vector3 end, Color?color = null, float?duration = null, params LineOptions[] options) { if (ArrayOps.Contains(options, LineOptions.Dashed)) { DrawDashedLine(start, end, .1f, color, duration); } else { DrawLine(start, end, color, duration); } }
public static T RandomKey <T, U>(Dictionary <T, U> dictionary) { return(ArrayOps.RandomElement(new List <T>(dictionary.Keys).ToArray())); }