Question by
FoxxCommand · Dec 23, 2017 at 02:30 PM ·
camerarotationmouse movement
Rotating X, Y seems to rotate Z as well?
So I'm trying to rotate an object based on the x,y of the mouse and then translate that to the camera, but for some reason the Z axis keeps changing as well and I'm not sure why
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public class CameraController : MonoBehaviour
{
public Transform target;
public Vector3 offset;
public bool useOffsetValues;
public bool invertMouse = true;
public float rotateSpeed = 10;
public float maxViewAngle = 60;
public float minViewAngle = -60;
public Transform pivot;
// Use this for initialization
void Start()
{
if (!useOffsetValues)
{
offset = target.position - transform.position;
}
pivot.transform.position = target.transform.position;
pivot.transform.parent = null;
Cursor.lockState = CursorLockMode.Locked;
}
// Update is called once per frame
void LateUpdate()
{
pivot.transform.position = target.transform.position;
//Get X position of mouse and rotate the target
float horizontal = Input.GetAxis("Mouse X") * rotateSpeed;
pivot.Rotate(0, horizontal, 0);
//Get the Y position of mouse and rotate the target
float vertical = Input.GetAxis("Mouse Y") * rotateSpeed;
if (invertMouse)
{
pivot.Rotate(-vertical, 0, 0);
}
else
{
pivot.Rotate(vertical, 0, 0);
}
//Limit horizontal camera rotation
if (pivot.rotation.eulerAngles.x > maxViewAngle && pivot.rotation.eulerAngles.x < 180f)
{
pivot.rotation = Quaternion.Euler(maxViewAngle, 0, 0);
}
if (pivot.rotation.eulerAngles.x > 180 && pivot.rotation.eulerAngles.x < 360f + minViewAngle)
{
pivot.rotation = Quaternion.Euler(360f + minViewAngle, 0, 0);
}
//Move the camera based on the current rotation of the target and the original offset
float desiredYAngle = pivot.eulerAngles.y;
float desiredXAngle = pivot.eulerAngles.x;
Quaternion rotation = Quaternion.Euler(desiredXAngle, desiredYAngle, 0);
transform.position = target.position - (rotation * offset);
if (transform.position.y < target.position.y)
{
transform.position = new Vector3(transform.position.x, target.position.y - .5f, transform.position.z);
}
transform.LookAt(target);
if(Input.GetButtonDown("Submit"))
{
pivot.rotation = Quaternion.Euler(0, 0, 0);
}
}
}
Comment
Your answer
Follow this Question
Related Questions
Roll a ball, treating where the camera is rotating as forward? 0 Answers
Camera Script remove a part. 0 Answers
How can I use Mathf.Clamp? 1 Answer