# LookAtMouse

m (→JavaScript - LookAtMouse.js: Fixed comments-to-bullets malarky) |
(Added C# implementation of LookAtMouse script) |
||

Line 49: | Line 49: | ||

} | } | ||

</javascript> | </javascript> | ||

+ | |||

+ | == C# - LookAtMouse.cs == | ||

+ | This is a direct copy of the Javascript function implemented in c# | ||

+ | <csharp> | ||

+ | |||

+ | 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.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.time); | ||

+ | } | ||

+ | } | ||

+ | } | ||

+ | </csharp> |

## Revision as of 21:05, 22 December 2011

Author: capnbishop

## Contents |

## Description

This script will cause an object to rotate towards the mouse cursor along it's y axis.

This action could be good for third person games where objects need to point to the cursor but remain parallel with the ground. For instance, a sentry gun located in the center of the screen that rotates toward the mouse to target oncoming enemies.

## Usage

Drop this script onto a GameObject to have it look toward the cursor. Change the speed value to alter how quickly the object rotates.

## JavaScript - LookAtMouse.js

<javascript> // LookAtMouse will cause an object to rotate toward the cursor, along the y axis. // // To use, drop on an object that should always look toward the mouse cursor. // Change the speed value to alter how quickly the object rotates toward the mouse.

// speed is the rate at which the object will rotate var speed = 4.0;

function Update () {

// Generate a plane that intersects the transform's position with an upwards normal. var playerPlane = new Plane(Vector3.up, transform.position); // Generate a ray from the cursor position var 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. var hitdist = 0.0; // If the ray is parallel to the plane, Raycast will return false. if (playerPlane.Raycast (ray, hitdist)) { // Get the point along the ray that hits the calculated distance. var targetPoint = ray.GetPoint(hitdist); // Determine the target rotation. This is the rotation if the transform looks at the target point. var targetRotation = Quaternion.LookRotation(targetPoint - transform.position); // Smoothly rotate towards the target point. transform.rotation = Quaternion.Slerp(transform.rotation, targetRotation, speed * Time.deltaTime); }

} </javascript>

## C# - LookAtMouse.cs

This is a direct copy of the Javascript function implemented in c# <csharp>

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.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.time);

}

}

} </csharp>