I’m making a 2D game in which your a small girl fighting of ghosts. I’m trying to get my character’s head to face to where the mouse is located. Currently I’m using this code:
//You can get the players position on the screen using Camera.WorldToScreenPoint(). Once you have this you can easily compare it to your mouse position, hope this helps:
//var MousePosition = Input.mousePosition;
//var PlayerPosition;
//function Update (){
//if(MousePosition.x < PlayerPosition.x)
//{
// transform.rotation = Quaternion.Euler(0,180,0);
//}
//else if(MousePosition.x > PlayerPosition.x)
//{
// transform.rotation = Quaternion.Euler(0,0,0);
//}
//}
// 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.
//Edit to show where error is located. (Line 31)
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);
// Move the object forward.
transform.position += transform.forward * speed * Time.deltaTime;
}
}
But I’m getting this error constantly:
NullReferenceException UnityEngine.Camera.ScreenPointToRay (Vector3 position) (at C:/BuildAgent/work/812c4f5049264fad/Runtime/ExportGenerated/Editor/UnityEngineCamera.cs:291) HeadRotation.Update () (at Assets/HeadRotation.js:31)
I’m not sure on what the error means, nor what I can do about it. Any help would be appreciated greatly.
Thanks in advance.