- Home /
Help|MouseLook Y-Axis moving in the wrong direction
Problem really dumb, I know the answer is simple, I have a script of moving the camera(the simple "MouseLook" script), but somehow when i'am moving the Y axis (up and down) the camera moves right and left, When i'm moving the mouse on th X-axis it's moving right and left (like it's need to be) .... What's the problem of the Y-axis?
it's the defult script of $$anonymous$$ouseLook:
using UnityEngine;
using System.Collections;
/// $$anonymous$$ouseLook rotates the transform based on the mouse delta.
/// $$anonymous$$inimum and $$anonymous$$aximum values can be used to constrain the possible rotation
/// To make an FPS style character:
/// - Create a capsule.
/// - Add the $$anonymous$$ouseLook script to the capsule.
/// -> Set the mouse look to use LookX. (You want to only
turn character but not tilt it)
/// - Add FPSInputController script to the capsule
/// -> A Character$$anonymous$$otor and a CharacterController component will be automatically added.
/// - Create a camera. $$anonymous$$ake the camera a child of the capsule. Reset it's transform.
/// - Add a $$anonymous$$ouseLook script to the camera.
/// -> Set the mouse look to use LookY. (You want the camera to tilt up and down like a head. The character already turns.)
[AddComponent$$anonymous$$enu("Camera-Control/$$anonymous$$ouse Look")]
public class $$anonymous$$ouseLook : $$anonymous$$onoBehaviour {
public enum RotationAxes { $$anonymous$$ouseXAndY = 0, $$anonymous$$ouseX = 1, $$anonymous$$ouseY = 2 }
public RotationAxes axes = RotationAxes.$$anonymous$$ouseXAndY;
public float sensitivityX = 15F;
public float sensitivityY = 15F;
public float $$anonymous$$imumX = -360F;
public float maximumX = 360F;
public float $$anonymous$$imumY = -60F;
public float maximumY = 60F;
float rotationY = 0F;
void Update ()
{
if (axes == RotationAxes.$$anonymous$$ouseXAndY)
{
float rotationX = transform.localEulerAngles.y + Input.GetAxis("$$anonymous$$ouse X") * sensitivityX;
rotationY += Input.GetAxis("$$anonymous$$ouse Y") * sensitivityY;
rotationY = $$anonymous$$athf.Clamp (rotationY, $$anonymous$$imumY, maximumY);
transform.localEulerAngles = new Vector3(- rotationY, rotationX, 0);
}
else if (axes == RotationAxes.$$anonymous$$ouseX)
{
transform.Rotate(0, Input.GetAxis("$$anonymous$$ouse X") * sensitivityX, 0);
}
else
{
rotationY += Input.GetAxis("$$anonymous$$ouse Y") * sensitivityY;
rotationY = $$anonymous$$athf.Clamp (rotationY, $$anonymous$$imumY, maximumY);
transform.localEulerAngles = new Vector3(- rotationY, transform.localEulerAngles.y, 0);
}
}
void Start ()
{
// $$anonymous$$ake the rigid body not change rotation
if (rigidbody)
rigidbody.freezeRotation = true;
}
}
Answer by MC HALO · Aug 20, 2012 at 10:21 AM
I am sure that because you have a Plus on the y AXIS replace that with this
rotationY -= Input.GetAxis("Mouse Y") * sensitivityY;
That should work
Update ++++++++++++++++++++++++++++++++++++++
it should work regardless the - thing i said before i have tested the script in my unity with a C sharp script and it work fine. I noticed that one of your comment line was not commented on the top and it caused an error when i used the script. After removing the comments and testing it then the error when and it worked fine.
Your script
using UnityEngine;
using System.Collections;
[AddComponentMenu("Camera-Control/Mouse Look")]
public class MouseLookScript : MonoBehaviour {
public enum RotationAxes { MouseXAndY = 0, MouseX = 1, MouseY = 2 }
public RotationAxes axes = RotationAxes.MouseXAndY;
public float sensitivityX = 15F;
public float sensitivityY = 15F;
public float minimumX = -360F;
public float maximumX = 360F;
public float minimumY = -60F;
public float maximumY = 60F;
float rotationY = 0F;
void Update ()
{
if (axes == RotationAxes.MouseXAndY)
{
float rotationX = transform.localEulerAngles.y + Input.GetAxis("Mouse X") * sensitivityX;
rotationY += Input.GetAxis("Mouse Y") * sensitivityY;
rotationY = Mathf.Clamp (rotationY, minimumY, maximumY);
transform.localEulerAngles = new Vector3(- rotationY, rotationX, 0);
}
else if (axes == RotationAxes.MouseX)
{
transform.Rotate(0, Input.GetAxis("Mouse X") * sensitivityX, 0);
}
else
{
rotationY += Input.GetAxis("Mouse Y") * sensitivityY;
rotationY = Mathf.Clamp (rotationY, minimumY, maximumY);
transform.localEulerAngles = new Vector3(- rotationY, transform.localEulerAngles.y, 0);
}
}
void Start ()
{
// Make the rigid body not change rotation
if (rigidbody)
rigidbody.freezeRotation = true;
}
}
I just changed the script name if you notice in the public class i changed it to mouselookscript because i had a script named mouselook. But yea the scrip works fine. if not please let check your input and see if anything has changed from there if still no change please PM on my e-mail:
thanks MCHALO
no it's doesn't working. :\
using UnityEngine;
using System.Collections;
/// $$anonymous$$ouseLook rotates the transform based on the mouse delta.
/// $$anonymous$$inimum and $$anonymous$$aximum values can be used to constrain the possible rotation
/// To make an FPS style character:
/// - Create a capsule.
/// - Add the $$anonymous$$ouseLook script to the capsule.
/// -> Set the mouse look to use LookX. (You want to only
turn character but not tilt it)
/// - Add FPSInputController script to the capsule
/// -> A Character$$anonymous$$otor and a CharacterController component will be automatically added.
/// - Create a camera. $$anonymous$$ake the camera a child of the capsule. Reset it's transform.
/// - Add a $$anonymous$$ouseLook script to the camera.
/// -> Set the mouse look to use LookY. (You want the camera to tilt up and down like a head. The character already turns.)
[AddComponent$$anonymous$$enu("Camera-Control/$$anonymous$$ouse Look")]
public class $$anonymous$$ouseLook : $$anonymous$$onoBehaviour {
public enum RotationAxes { $$anonymous$$ouseXAndY = 0, $$anonymous$$ouseX = 1, $$anonymous$$ouseY = 2 }
public RotationAxes axes = RotationAxes.$$anonymous$$ouseXAndY;
public float sensitivityX = 15F;
public float sensitivityY = 15F;
public float $$anonymous$$imumX = -360F;
public float maximumX = 360F;
public float $$anonymous$$imumY = -60F;
public float maximumY = 60F;
float rotationY = 0F;
void Update ()
{
if (axes == RotationAxes.$$anonymous$$ouseXAndY)
{
float rotationX = transform.localEulerAngles.y + Input.GetAxis("$$anonymous$$ouse X") * sensitivityX;
rotationY += Input.GetAxis("$$anonymous$$ouse Y") * sensitivityY;
rotationY = $$anonymous$$athf.Clamp (rotationY, $$anonymous$$imumY, maximumY);
transform.localEulerAngles = new Vector3(- rotationY, rotationX, 0);
}
else if (axes == RotationAxes.$$anonymous$$ouseX)
{
transform.Rotate(0, Input.GetAxis("$$anonymous$$ouse X") * sensitivityX, 0);
}
else
{
rotationY += Input.GetAxis("$$anonymous$$ouse Y") * sensitivityY;
rotationY = $$anonymous$$athf.Clamp (rotationY, $$anonymous$$imumY, maximumY);
transform.localEulerAngles = new Vector3(- rotationY, transform.localEulerAngles.y, 0);
}
}
void Start ()
{
// $$anonymous$$ake the rigid body not change rotation
if (rigidbody)
rigidbody.freezeRotation = true;
}
}
i tried your hole script, and still-doesn't work. what Input should i show you?
it still does not work? do you have skype i will have to show you there? if so add me its Hummad.Nazir
Your answer
Follow this Question
Related Questions
Rotation of Camera = Transform on the y-axis? 2 Answers
How can I keep a player inside the camera box? [C#] 3 Answers
Help with movement cube 2 Answers
Camera Tracks player not in the middle 1 Answer
FPS controller mouse look 1 Answer