# How to rotate my camera?

I copy the FPS scripts in standard asset example and it’s truely work,but I can’t understand how it work.
I think this script is too complex,but when I want to make a simple version,it’s never work.it’s my code for camera rotate.it just can shake my camera.

``````    using UnityEngine;
using System.Collections;
public class MyFPML : MonoBehaviour {

private float x;
private float y;
private Vector3 targetRotation;
private Vector3 rotateValue;
private Quaternion rotation;

void Start ()
{
rotation = transform.rotation;
}

void Update ()
{
x = Input.GetAxis("Mouse X");
y = Input.GetAxis("Mouse Y");
Debug.Log(x + ":" + y);
rotateValue = new Vector3(x, y, 0);
targetRotation = transform.position + rotateValue;
rotation = Quaternion.Euler(x, y, 0);
transform.rotation = rotation;
}
}
``````

Tested and working:

``````using UnityEngine;
using System.Collections;

public class CamRotation : MonoBehaviour
{
private float x;
private float y;
private Vector3 rotateValue;

void Update()
{
y = Input.GetAxis("Mouse X");
x = Input.GetAxis("Mouse Y");
Debug.Log(x + ":" + y);
rotateValue = new Vector3(x, y * -1, 0);
transform.eulerAngles = transform.eulerAngles - rotateValue;
}
}
``````

using UnityEngine;
using System.Collections;
public class FPSRotate : MonoBehaviour
{
public Camera cam; //Main camera for rotate in y-axis
void Update() //Updated every frame;
{
this.LookRotation(transform, cam.transform); //Call LookRotation() to change the x-rotation of the gameobject and the y-rotation of camera
}
public void LookRotation(Transform character, Transform camera) //Change the x-rotation of the gameobject and the y-rotation of camera
{
float yRot = Input.GetAxis(“Mouse X”) * 2f; //get x and y of mouse in screen
float xRot = Input.GetAxis(“Mouse Y”) * 2f;
character.localRotation *= Quaternion.Euler(0f, yRot, 0f); //To change character’s rotation around y-axis
camera.localRotation *= Quaternion.Euler(-xRot, 0f, 0f); //To change camera’s rotation around x-axis
camera.localRotation = ClampRotationAroundXAxis(camera.localRotation); //Clamp camera’s rotation
} //The key point is use localRotation,not rotation or Quaternion.Rotate.
Quaternion ClampRotationAroundXAxis(Quaternion q) //The method of clamp rotation,I can’t understand it;use it carefully.
{
q.x /= q.w;
q.y /= q.w;
q.z /= q.w;
q.w = 1.0f;
float angleX = 2.0f * Mathf.Rad2Deg * Mathf.Atan(q.x);
angleX = Mathf.Clamp(angleX, -90f, 90f);
q.x = Mathf.Tan(0.5f * Mathf.Deg2Rad * angleX);
return q;
}
}

//I use these code now,but your code also awsome.

@ Yaw-Loon I found a simplified way with less commands!!!Here it is:

``````using System.Collections;
using System.Collections.Generic;
using UnityEngine;

public class CamRotation : MonoBehaviour
{
public float camSpeed = -0.5f;

private float x;
private float y;
private Vector3 rotateValue;

void Update()
{
x = Input.GetAxis("Mouse X");
y = Input.GetAxis("Mouse Y");
Debug.Log(x + ":" + y);
rotateValue = new Vector3(y, x * -1, 0);
transform.eulerAngles = transform.eulerAngles - rotateValue;
transform.eulerAngles +=  rotateValue * camSpeed;
}
}
``````

But be aware!!! You have to change the name of the public class, and the cam speed has to be a negative number.

Also, this way you can change the rotation speed as well!!! Cool, right???