예제 #1
0
        static CollisionData ShapeProjectionOverlapWithPoint(IShapeVertices shape, Vector3 point, Vector3 projectionTo)
        {
            projectionTo = projectionTo.normalized;
            shape.MinMaxVertexProjection(projectionTo, out float min, out float max);

            float pointProjection = Vector3.Dot(point, projectionTo);

            return(new CollisionData(pointProjection > min && pointProjection < max, pointProjection - min, projectionTo));
        }
예제 #2
0
        //Projection
        static CollisionData ShapesProjectionOverlap(IShapeVertices shapeA, IShapeVertices shapeB, Vector3 projectionTo)
        {
            shapeA.MinMaxVertexProjection(projectionTo, out float minA, out float maxA);
            shapeB.MinMaxVertexProjection(projectionTo, out float minB, out float maxB);

            bool shapeOrder = shapeA.ShapePositionProjection(projectionTo) > shapeB.ShapePositionProjection(projectionTo);

            if (shapeOrder)
            {
                return(new CollisionData(maxB > minA, maxB - minA, projectionTo));
            }
            else
            {
                return(new CollisionData(maxA > minB, maxA - minB, -projectionTo));
            }
        }