Exemplo n.º 1
0
    private Collision GetCollision(Vector2 closestPoint)
    {
        Collision collision;
        var       ballInsidePaddle = boxCollider.bounds.Contains(ballTransform.position);

        if (ballInsidePaddle)
        {
            collision = new Collision
            {
                BallPosition = previousBallPosition,
                Point        = previousClosestPoint,
                GameObject   = gameObject
            };
        }
        else
        {
            collision = new Collision
            {
                BallPosition = ballTransform.position,
                Point        = closestPoint,
                GameObject   = gameObject
            };
        }

        return(collision);
    }
Exemplo n.º 2
0
        private static Vector2 CalculateNormalVector(Collision collision, Vector2 moveDirection)
        {
            var normalVector = (collision.Point - collision.BallPosition).normalized;

            if (Vector2.Dot(normalVector, moveDirection) < 0)
            {
                normalVector *= -1;
            }
            Debug.DrawLine(collision.Point - normalVector, collision.Point, Color.blue);
            return(normalVector);
        }
Exemplo n.º 3
0
        public static Vector2 CalculateNewDirection(Collision collision, Vector2 moveDirection)
        {
            var normal = CalculateNormalVector(collision, moveDirection);
            var oppositeMoveDirection = -moveDirection;
            var cosine         = Vector2.Dot(normal, oppositeMoveDirection);
            var reducedNormal  = normal * cosine;
            var verticalVector = reducedNormal - oppositeMoveDirection;
            var impulse        = verticalVector * 2;

            return(oppositeMoveDirection + impulse);
        }