Skip to content

Instantly share code, notes, and snippets.

@PolarKC
Last active February 25, 2021 00:20
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save PolarKC/055b21b7312662ab4c9c117a8e7aed55 to your computer and use it in GitHub Desktop.
Save PolarKC/055b21b7312662ab4c9c117a8e7aed55 to your computer and use it in GitHub Desktop.
Camera Rotation Controller
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public class CameraRotationController : MonoBehaviour
{
public Transform cameraRigTransform;
public float rotateSpeed = 10.0f; //rotation speed
public float rotateDegrees = 90.0f; // degrees to rotate per hit
private Quaternion _targetRot;
private float targetAngle = 0.0f;
void Start()
{
cameraRigTransform = GetComponent<Transform>();
}
void Update()
{
if (Input.GetKeyDown(KeyCode.E))
{
targetAngle = checkBounds(targetAngle + rotateDegrees);
_targetRot = Quaternion.AngleAxis(targetAngle, cameraRigTransform.up);
}
if (Input.GetKeyDown(KeyCode.Q))
{
targetAngle = checkBounds(targetAngle - rotateDegrees);
_targetRot = Quaternion.AngleAxis(targetAngle, cameraRigTransform.up);
}
}
float checkBounds(float _angle)
{
if (_angle > 180.0f)
{
return -1f * rotateDegrees; // Example: -90.0f
}
else if (_angle < -180.0f)
{
return rotateDegrees; // Example: 90.0f
}
else
{
return _angle;
}
}
void LateUpdate()
{
cameraRigTransform.rotation = Quaternion.Slerp(cameraRigTransform.rotation, _targetRot, Time.deltaTime * rotateSpeed);
}
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment