Answers for "Why isn't my space ship rotating down with my mouse?"
http://answers.unity.com/questions/1538342/why-isnt-my-space-ship-rotating-down-with-my-mouse.html
The latest answers for the question "Why isn't my space ship rotating down with my mouse?"Answer by no00ob
http://answers.unity.com/answers/1538584/view.html
Fixed it. I realized that I was only looking at the horizontal rotation, by making the plane under my object, now I have made an option to make it in front of the object wich makes the object able to look also vertically towards my mouse cursor, hope I explained this well enough for someone to understand ;D Script:
using UnityEngine;
using System.Collections;
public class LookAtMouse : MonoBehaviour
{
// speed is the rate at which the object will rotate
public float speed;
// wich mode? horizontal < | > or vertical? V | /\ changes the behavior completely.
public bool horizontal;
public bool vertical;
void FixedUpdate()
{
if (horizontal)
{
Horizontally();
}
if (vertical)
{
Vertically();
}
}
private void Horizontally()
{
// Generate a plane that intersects the transform's position with an upwards normal.
Plane playerPlane = new Plane(Vector3.up, transform.position);
// Generate a ray from the cursor position
Ray ray = Camera.main.ScreenPointToRay(Input.mousePosition);
// 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);
}
}
private void Vertically()
{
// Generate a plane that intersects the transform's position with an normal facing the object that is being rotated.
Plane playerPlane = new Plane(Vector3.right, new Vector3(transform.position.x + 1, transform.position.y, transform.position.z));
// Generate a ray from the cursor position
Ray ray = Camera.main.ScreenPointToRay(Input.mousePosition);
// 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);
}
}
}Sun, 05 Aug 2018 17:33:08 GMTno00ob