Hey everyone, first time posting so sorry if I’m in the wrong spot. I’m trying to make a part of a game that involves moving a hand over a table in a 3D environment with the mouse similar to how Surgeon Simulator’s controls operate. (Minus the finger movements). I’m pretty new to working in 3D and I’ve tried a few different ways I thought would make this work but I’m completely lost. If anyone could help point me in the right direction, I would really appreciate it,
Thanks!
You need to:

Find the camera position

Find the mouse click direction

Find unknown variable t in the formula: camPos + t*dir = intersectionPoint
If you define your table to be in the XYplane, you will know the zvalue of the intersectionPoint. If the table is positioned at z=0, you get: camPos.z = t*dir.z = 0, which makes the caluclation easy.
Code, with comments:
using UnityEngine;
using System.Collections;
public class MouseMovement : MonoBehaviour {
// Use this for initialization
void Start () {
}
// Update is called once per frame
void Update () {
// We set our "table" to be at the XYplane.
float tableZ = 0.0f; // Our "table" is positoned at Z = 0. You may change this.
// https://docs.unity3d.com/ScriptReference/InputmousePosition.html
Ray ray = Camera.main.ScreenPointToRay(Input.mousePosition);
Vector3 camPos = ray.origin;
Vector3 mouseDir = ray.direction; // direction from camera centre towards mouse position.
// .. along this vector, every point is visibly hidden behind the mouse.
// We have origin "camPos" and direction "mouseDir". We want to find the point where this ray intersects the XYplane at Z = tableZ
// camPos + t*mouseDir = intersPos, where t and intersPos are unknown
// We know that intersPos.z = tableZ
// => camPos.z + t*mouseDir.z = tableZ
// => t = (tableZ  camPos.z) / mouseDir.z
float t = (tableZ  camPos.z) / mouseDir.z;
Vector3 intersPos = camPos + t*mouseDir; // original formula: camPos + t*mouseDir = intersPos
transform.position = intersPos;
}
}
Here is a link to my test project: http://s000.tinyupload.com/index.php?file_id=87544764756686637826
I made it using Unity version 5.3.3
Note: You may change the value of tableZ, depending on where your table is positioned.
Also, if your table is not positioned at the XYplane, you only change the formula slightly, by using the xvalue or yvalue instead.