public override RaycastResult IntersectByRay(Ray ray, float maxLength) { var results = new RaycastResult[6]; for (var i = 0; i != 6; i++) { results[i] = faces[i].IntersectByRay(ray, maxLength); } var intersections = results.Where(t => t != null); if (intersections.Count() == 0) { return(null); } var raycast = intersections.OrderBy(t => (t.Position - ray.Origin).Length).First(); raycast.Body = this; return(raycast); }