void UpdateDefaultProxyRays()
        {
            // Set ray lengths based on renderer bounds
            foreach (var proxy in m_Proxies)
            {
                if (!proxy.active)
                {
                    continue;
                }

                foreach (var rayOrigin in proxy.rayOrigins.Values)
                {
                    var distance = kDefaultRayLength;

                    // Give UI priority over scene objects (e.g. For the TransformTool, handles are generally inside of the
                    // object, so visually show the ray terminating there instead of the object; UI is already given
                    // priority on the input side)
                    var uiEventData = m_InputModule.GetPointerEventData(rayOrigin);
                    if (uiEventData != null && uiEventData.pointerCurrentRaycast.isValid)
                    {
                        // Set ray length to distance to UI objects
                        distance = uiEventData.pointerCurrentRaycast.distance;
                    }
                    else
                    {
                        // If not hitting UI, then check standard raycast and approximate bounds to set distance
                        var go = GetFirstGameObject(rayOrigin);
                        if (go != null)
                        {
                            var ray     = new Ray(rayOrigin.position, rayOrigin.forward);
                            var newDist = distance;
                            foreach (var renderer in go.GetComponentsInChildren <Renderer>())
                            {
                                if (renderer.bounds.IntersectRay(ray, out newDist) && newDist > 0)
                                {
                                    distance = Mathf.Min(distance, newDist);
                                }
                            }
                        }
                    }
                    m_DefaultRays[rayOrigin].SetLength(distance);
                }
            }
        }