How can I make a unproject method in Unity?

I’ve been working on this for days.
I want to make a intersection detected by calculating without using colliders due to the poor performance. And there is an unproject method in XNA, so I’d like to make one in Unity as well. This method can calculate the line implied by mouse position in world space with origin position and direction.

What I’ve written is as follows:

public void Unproject(VecXY point, out Vector3 origin, out Vector3 direction)
        var viewProjectionInv = UnityEngine.Matrix4x4.Inverse(Camera.main.worldToCameraMatrix * Camera.main.projectionMatrix);
        var normalizedPoint = new Vector2((float)(point.X - Camera.main.rect.x) / Camera.main.rect.width * 2 - 1, 1 + (float)(point.Y- Camera.main.rect.y) / Camera.main.rect.height * 2);
        var nearPoint = viewProjectionInv * new Vector4(normalizedPoint.x, normalizedPoint.y, 0f, 1f);
        var farPoint = viewProjectionInv * new Vector4(normalizedPoint.x, normalizedPoint.y, -1f, 1f);
        origin = nearPoint / nearPoint.w;
        direction = Vector3.Normalize((Vector3)farPoint / farPoint.w - origin);

But the results I’ve got for the origin and direction are quite strange. Neither of the origin and the direction is correct, therefore I think the problem might be the above lines. Can anyone help me about this? Any help would be welcomed. Thanks.

How about Camera.ScreenPointToRay()? Is there a reason you can’t use that?