private void CheckInitialization()
        {
            if (pointer == null)
            {
                pointer = GetComponent <SpherePointer>();
            }
            if (pointer == null)
            {
                Debug.LogError($"No SpherePointer found on {gameObject.name}.");
            }

            CheckAsset(visualsRoot, "Visuals Root");
            CheckAsset(tetherEndPoint, "Tether End Point");
            CheckAsset(tetherLine, "Tether Line");
        }
        /// <summary>
        /// Gets if the associated sphere pointer on this controller is near any grabbable objects.
        /// </summary>
        /// <returns>True if associated sphere pointer is near any grabbable objects, else false.</returns>
        /// <param name="dist">Out parameter gets the distance to the grabbable.</param>
        protected virtual bool IsNearGrabbableObject()
        {
            if (cachedSpherePointer == null || cachedSpherePointer.Controller != Pointer.Controller)
            {
                IMixedRealityFocusProvider focusProvider = CoreServices.InputSystem?.FocusProvider;
                if (focusProvider.IsNotNull())
                {
                    var spherePointers = focusProvider.GetPointers <SpherePointer>();
                    foreach (var spherePointer in spherePointers)
                    {
                        if (spherePointer.Controller == Pointer.Controller)
                        {
                            cachedSpherePointer = spherePointer;
                            break;
                        }
                    }
                }
            }

            return(cachedSpherePointer != null && cachedSpherePointer.IsNearObject);
        }