public static int CastAll(IPhysicsObject geom, Vector3 dir, ICollection <RaycastHit> results, QueryTriggerInteraction query = QueryTriggerInteraction.UseGlobal)
        {
            if (geom == null)
            {
                throw new System.ArgumentNullException("geom");
            }

            return(geom.CastAll(dir, results, float.PositiveInfinity, Physics.AllLayers, query));
        }
        public static int CastAll(IPhysicsObject geom, Vector3 dir, ICollection <RaycastHit> results, float dist, int layerMask, QueryTriggerInteraction query = QueryTriggerInteraction.UseGlobal)
        {
            if (geom == null)
            {
                throw new System.ArgumentNullException("geom");
            }

            return(geom.CastAll(dir, results, dist, layerMask, query));
        }
        public static RaycastHit[] CastAll(IPhysicsObject geom, Vector3 dir, float dist, int layerMask, QueryTriggerInteraction query = QueryTriggerInteraction.UseGlobal)
        {
            if (geom == null)
            {
                throw new System.ArgumentNullException("geom");
            }

            //return geom.CastAll(dir, dist, layerMask, query).ToArray();

            using (var lst = TempCollection.GetList <RaycastHit>())
            {
                geom.CastAll(dir, lst, dist, layerMask, query);
                return(lst.ToArray());
            }
        }
        public static bool RadialCast(IPhysicsObject geom, ICollection <RaycastHit> results, float dist, int detail, int layerMask, Vector3 initialAxis, Vector3 rotationalAxis, QueryTriggerInteraction query = QueryTriggerInteraction.UseGlobal)
        {
            if (VectorUtil.NearZeroVector(initialAxis))
            {
                initialAxis = Vector2.right;
            }
            else
            {
                initialAxis.Normalize();
            }
            var a = 360f / (float)detail;

            int cnt = results.Count;

            for (int i = 0; i < detail; i++)
            {
                var v = VectorUtil.RotateAroundAxis(initialAxis, a * i, rotationalAxis);
                geom.CastAll(v, results, dist, layerMask, query);
            }
            return(results.Count - cnt > 0);
        }