/// <summary>
        /// https://docs.unity3d.com/ScriptReference/Physics.OverlapCapsuleNonAlloc.html
        /// </summary>
        /// <param name="chd"></param>
        /// <param name="point0"></param>
        /// <param name="point1"></param>
        /// <param name="radius"></param>
        /// <returns>True, if cast hits something</returns>
        public static bool OverlapCapsule
            (ColliderHitData chd,
            Vector3 point0,
            Vector3 point1,
            float radius)
        {
            CheckCHDInit(chd);

            for (; ;)
            {
                chd.numHits = Physics.OverlapCapsuleNonAlloc
                                  (point0,
                                  point1,
                                  radius,
                                  chd.collResults,
                                  chd.layerMask,
                                  chd.triggerInteraction);

                if (CheckCastResultsCHD(chd))
                {
                    break;
                }
            }

            return(chd.numHits > 0);
        }
        /// <summary>
        /// https://docs.unity3d.com/ScriptReference/Physics.OverlapBoxNonAlloc.html
        /// </summary>
        /// <param name="chd"></param>
        /// <param name="center"></param>
        /// <param name="halfExtends"></param>
        /// <param name="orientation"></param>
        /// <returns>True, if cast hits something</returns>
        public static bool OverlapBox
            (ColliderHitData chd,
            Vector3 center,
            Vector3 halfExtends,
            Quaternion orientation)
        {
            CheckCHDInit(chd);

            for (; ;)
            {
                chd.numHits = Physics.OverlapBoxNonAlloc
                                  (center,
                                  halfExtends,
                                  chd.collResults,
                                  orientation,
                                  chd.layerMask,
                                  chd.triggerInteraction);

                if (CheckCastResultsCHD(chd))
                {
                    break;
                }
            }

            return(chd.numHits > 0);
        }
 /// <summary>
 /// Check data for basic initialization
 /// </summary>
 /// <param name="chd"></param>
 static void CheckCHDInit(ColliderHitData chd)
 {
     if (chd.collResults == null ||
         chd.collResults.Length == 0 ||
         chd.collResults[0] == null)
     {
         chd.Init(chd.sizeAtInit);
     }
 }
        /// <summary>
        /// Function will cannot be called with a null 'results'
        /// parameter to determine how many results are REALLY
        /// available. So, if the number of hits is exactly
        /// the length of the array I resize the array and
        /// call again to be sure.
        /// </summary>
        /// <param name="chd"></param>
        /// <returns>True if Cast needs to be called again</returns>
        static bool CheckCastResultsCHD(ColliderHitData chd)
        {
            if (chd.autoResize &&
                chd.numHits == chd.collResults.Length)
            {
                System.Array.Resize <Collider>(ref chd.collResults, chd.collResults.Length * 2);
                return(false);
            }

            return(true);
        }