I’m trying to create a modified LookAtMouse script that makes a Gameobject with a rigidbody attached move and rotate towards the mouse cursor. However when I try to run rigidbody.MovePosition(targetPoint); the gameobject’s rotation resets upon moving the mouse. But as far as I know I’m only moving the rigidbody’s position. Any idea how I can fix this so the rotation doesn’t reset?
using UnityEngine;
using System.Collections;
public class LookAtMouse : MonoBehaviour
{
// speed is the rate at which the object will rotate
public float speed;
void FixedUpdate ()
{
// Generate a plane that intersects the transform's position with an upwards normal.
Plane playerPlane = new Plane(Vector3.forward, transform.position);
Vector3 pos = Input.mousePosition;
pos.y = Input.mousePosition.y-50;
// Generate a ray from the cursor position
Ray ray = Camera.main.ScreenPointToRay (pos);
// Determine the point where the cursor ray intersects the plane.
// This will be the point that the object must look towards to be looking at the mouse.
// Raycasting to a Plane object only gives us a distance, so we'll have to take the distance,
// then find the point along that ray that meets that distance. This will be the point
// to look at.
float hitdist = 0.0f;
// If the ray is parallel to the plane, Raycast will return false.
if (playerPlane.Raycast (ray, out hitdist))
{
// Get the point along the ray that hits the calculated distance.
Vector3 targetPoint = ray.GetPoint(hitdist);
// Determine the target rotation. This is the rotation if the transform looks at the target point.
Quaternion targetRotation = Quaternion.LookRotation(targetPoint - transform.position);
// Smoothly rotate towards the target point.
transform.rotation = Quaternion.Slerp(transform.rotation, targetRotation, speed * Time.deltaTime);
rigidbody.MovePosition(targetPoint);
}
}
}