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)
}
}