private List <Vector3> GetRayCastPositionsOnCharacterBoundByVelocity(FRay[] insideCastRays, BoundBase characterBound, Vector3 boundMax, Vector3 boundMin, Vector3 boundOrigin)
        {
            List <Vector3> rayCastPositions = new List <Vector3>();

            for (Int32 i = 0; i < insideCastRays.Length; i++)
            {
                FRay  ray = insideCastRays[i];
                float localIntersectionDistance = -1.0f;
                BoundBase.BoundType boundType   = characterBound.GetBoundType();
                if ((boundType & BoundBase.BoundType.AABB) == BoundBase.BoundType.AABB)
                {
                    localIntersectionDistance = GeometryMath.Intersection_RayAABBExt(ray, boundMax, boundMin);
                }
                else if ((boundType & BoundBase.BoundType.OBB) == BoundBase.BoundType.OBB)
                {
                    localIntersectionDistance = GeometryMath.Intersection_RayOBBExt(ray, (characterBound as OBB).GetTangetX(), (characterBound as OBB).GetTangetY(),
                                                                                    (characterBound as OBB).GetTangetZ(), boundOrigin, (characterBound as OBB).GetExtent());
                }

                if (localIntersectionDistance > -1.0f)
                {
                    Vector3 intersectionPosition = ray.GetPositionInTime(localIntersectionDistance);
                    rayCastPositions.Add(new Vector3(intersectionPosition));
                }
            }
            return(rayCastPositions);
        }