- Home /
C# Mouse Look (Input.GetAxis("MouseX&Y"))
Hello. I would like to know, how to replace "Input.GetAxis("MouseX")" and "Input.GetAxis("MouseY")" in C#. I do not want to use those Axises. I want to know how to detect mouse movement in X & Y directions. I tried "mousePosition", but it gives me not more, than the position of the mouse. I need movement(Up or Down, Right or Left). For excample: Input.GetAxis("Horisontal") can be changed to Input.GetKey(KeyCode.A) & Input.GetKey(KeyCode.D). Trying to make Mouse Look C# script, without "Input.GetAxis("MouseX")" and "Input.GetAxis("MouseY")". Simiular to this one:
using UnityEngine;
using System.Collections;
public class Cam2 : 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 rotationX = 0F;
float rotationY = 0F;
Quaternion originalRotation;
void Update ()
{
if (axes == RotationAxes.MouseXAndY)
{
// Read the mouse input axis
rotationX += Input.GetAxis("Mouse X") * sensitivityX;
rotationY += Input.GetAxis("Mouse Y") * sensitivityY;
rotationX = ClampAngle (rotationX, minimumX, maximumX);
rotationY = ClampAngle (rotationY, minimumY, maximumY);
Quaternion xQuaternion = Quaternion.AngleAxis (rotationX, Vector3.up);
Quaternion yQuaternion = Quaternion.AngleAxis (rotationY, -Vector3.right);
transform.localRotation = originalRotation * xQuaternion * yQuaternion;
}
else if (axes == RotationAxes.MouseX)
{
rotationX += Input.GetAxis("Mouse X") * sensitivityX;
rotationX = ClampAngle (rotationX, minimumX, maximumX);
Quaternion xQuaternion = Quaternion.AngleAxis (rotationX, Vector3.up);
transform.localRotation = originalRotation * xQuaternion;
}
else
{
rotationY += Input.GetAxis("Mouse Y") * sensitivityY;
rotationY = ClampAngle (rotationY, minimumY, maximumY);
Quaternion yQuaternion = Quaternion.AngleAxis (-rotationY, Vector3.right);
transform.localRotation = originalRotation * yQuaternion;
}
}
void Start ()
{
// Make the rigid body not change rotation
if (rigidbody)
rigidbody.freezeRotation = true;
originalRotation = transform.localRotation;
}
public static float ClampAngle (float angle, float min, float max)
{
if (angle < -360F)
angle += 360F;
if (angle > 360F)
angle -= 360F;
return Mathf.Clamp (angle, min, max);
}
}
If you want, you could track Input.mousePosition
from one frame to the next, and compare the results. That may have problems around the edge of the screen.
Really, though, checking the named axis is the recommended way of doing this. Is there some specific reason that's not working for you?
You can always check information regarding Input here http://docs.unity3d.com/$$anonymous$$anual/ConventionalGameInput.html
And why? Clarification on why might help us point you in the right direction.
It is working fine with the "GetAxis", I just hate it. I prefer to write everything in scripts, and not to use those Input.GetAxises.
Your answer
Follow this Question
Related Questions
Get GameObject That Was Last Clicked? 2 Answers
OnMouseEnter/Exit problem 2 Answers
Using Input.mouseposition to instantiate 1 Answer
Checking if the Mouse Has a Middle Button 1 Answer
C# inputString mouse Keys? 1 Answer