- Home /
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;
}
}
Answer by Nido · May 02, 2016 at 02:03 PM
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;
}
}
Watch out. I changed the class name, so use yours ins$$anonymous$$d!
Answer by Yaw-Loon · May 19, 2016 at 02:18 PM
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.
Answer by DimitrisPtrs · Oct 24, 2021 at 03:14 PM
@ 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?!?!?
Your answer
Follow this Question
Related Questions
Limiting the rotation to 180 degrees 0 Answers
Moving Camera on player stop then move and rotate to separate point? 0 Answers
Rotating a camera that has MouseLook.cs attached 0 Answers
Camera Rotation Tips 1 Answer
How to make the camera rotate only when right click is held down on the mouse? 1 Answer