Note, I have looked many unity answers on this site and more, but have found no solution to this problem

I have looked almost everywhere, I can’t find a single one that works. I tried to make one but it also doesn’t work. Does anyone know how to make a simple one?

Code:

using UnityEngine;
using System.Collections;

public class FollowMouse : MonoBehaviour {
 	Camera cam;
	
	void Update () {
		Vector2 MS = Camera.main.ScreenToWorldPoint(Input.mousePosition);
		float Compare = Vector3.Angle(transform.position, MS);
		transform.LookAt(new Vector3(MS.x, 0, MS.y));

		Vector3 mousePos = Input.mousePosition;
		Vector3 worldPos = Camera.main.WorldToScreenPoint (mousePos);

		transform.LookAt(worldPos);
	}
}

Hi Epicman,

In hopes of not being rude to Mr. Lukasik, but still give you a simple solution, I made a test project for you. [28714-unitytesta.zip|28714]

And, here’s the code anyway:

using UnityEngine;
using System.Collections;

public class Test : MonoBehaviour {

// Use this for initialization
void Start () {

}

// Update is called once per frame
void Update () {

	Vector3 mousePos = Input.mousePosition;
	mousePos.z = Camera.main.nearClipPlane;
	Vector3 MS = Camera.main.ScreenToWorldPoint(mousePos);
	MS.y = transform.position.y;
	transform.LookAt(MS);
}
}

Informed by this method: http://answers.unity3d.com/questions/269760/ray-finding-out-x-and-z-coordinates-where-it-inter.html# (which removes need of raycasts against world geometry)

You can write it like this

public Transform rotatedTransform;
private Ray ray;
private Plane yZeroPlane;
private float rayDistanceToHit;
Vector3 pointToLookAt;

void Awake () {
	if (!rotatedTransform) rotatedTransform = transform;
	yZeroPlane = new Plane(Vector3.up, Vector3.zero);
}

void Update () {
	ray = Camera.main.ScreenPointToRay(Input.mousePosition);
	if (yZeroPlane.Raycast(ray,out rayDistanceToHit)){
		pointToLookAt = ray.GetPoint(rayDistanceToHit);
		pointToLookAt.y = rotatedTransform.position.y;
		rotatedTransform.LookAt( pointToLookAt );//<< use this line for instant rotations
		//rotatedTransform.rotation = Quaternion.Slerp( rotatedTransform.rotation , Quaternion.LookRotation(pointToLookAt-rotatedTransform.position) , 2*Time.deltaTime );//<< use this line for smooth rotations (choose only one line from those two)
	}
}