private Vector2 GetOverlapPositionForStriker(Striker striker, CollisionSide colSide, RaycastHit2D rayHit, Vector2 actualPos, float radius) { Vector2 startPos = actualPos; Vector2 newDirectionVector = new Vector2(); switch (colSide) { case CollisionSide.Bottom: newDirectionVector = striker.transform.up; break; case CollisionSide.Top: newDirectionVector = striker.transform.up * -1; break; case CollisionSide.Left: newDirectionVector = striker.transform.right; break; case CollisionSide.Right: newDirectionVector = striker.transform.right * -1; break; } BoxCollider2D boxCollider = rayHit.collider as BoxCollider2D; float fromCenterToBorderHorizontally = boxCollider.size.x * boxCollider.transform.localScale.x / 2; float fromCenterToBorderVertically = boxCollider.size.y * boxCollider.transform.localScale.y / 2; Vector2 a = (Vector2)boxCollider.bounds.center + fromCenterToBorderHorizontally * (Vector2)striker.transform.right * -1; Vector2 b = (Vector2)boxCollider.bounds.center + fromCenterToBorderHorizontally * (Vector2)striker.transform.right; Vector2 c = (Vector2)boxCollider.bounds.center + fromCenterToBorderVertically * (Vector2)striker.transform.up; Vector2 d = (Vector2)boxCollider.bounds.center + fromCenterToBorderVertically * (Vector2)striker.transform.up * -1; Vector2 e = new Vector2(); Vector2 f = new Vector2(); float distToMove = 0; switch (colSide) { case CollisionSide.Bottom: case CollisionSide.Top: e = actualPos + newDirectionVector * 10; f = actualPos - newDirectionVector * 10; actualPos = Math2D.GetIntersectionPointCoordinates(a, b, e, f); distToMove = radius + fromCenterToBorderVertically + distToMoveOnOverlap; break; case CollisionSide.Left: case CollisionSide.Right: e = actualPos + newDirectionVector * 10; f = actualPos - newDirectionVector * 10; actualPos = Math2D.GetIntersectionPointCoordinates(c, d, e, f); distToMove = radius + fromCenterToBorderHorizontally + distToMoveOnOverlap; break; } Vector2 newPos = actualPos + newDirectionVector * distToMove; Debug.DrawLine(startPos, newPos, Color.white, 4); return(newPos); }