- Home /
Slerping screenshake
Hey there
I have a mouselook script. I pass a quaternion to it, representing an amount to shake the camera by.
I can make the camera shake jaggedly, and this works perfectly, but that's no fun. I want it to slerp towards the offset so it's smoother and not as jarring.
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public class MouseLook : MonoBehaviour {
Vector2 mouseLook;
Vector2 smoothV;
public float sensitivity = 5;
public float smoothing = 2;
public float minView = -90;
public float maxView = 90;
GameObject character;
// Use this for initialization
void Start () {
character = this.transform.parent.gameObject;
}
// Update is called once per frame
void Update () {
if (Input.GetButtonDown("Submit"))
{
if (Cursor.lockState == CursorLockMode.None)
{
Cursor.lockState = CursorLockMode.Locked;
Cursor.visible = false;
}
else
{
Cursor.lockState = CursorLockMode.None;
Cursor.visible = true;
}
}
if (Input.GetButton("Cancel"))
Application.Quit();
}
public void RotateCam (Quaternion ctargetRotation)
{
var md = new Vector2(Input.GetAxisRaw("Mouse X"), Input.GetAxisRaw("Mouse Y"));
md = Vector2.Scale(md, new Vector2(sensitivity * smoothing, sensitivity * smoothing));
smoothV.x = Mathf.Lerp(smoothV.x, md.x, 1f / smoothing);
smoothV.y = Mathf.Lerp(smoothV.y, md.y, 1f / smoothing);
mouseLook += smoothV;
mouseLook.y = Mathf.Clamp(mouseLook.y, minView, maxView);
transform.localRotation = Quaternion.Slerp(Quaternion.AngleAxis(-mouseLook.y, Vector3.right), ctargetRotation, 0.5f);
character.transform.rotation = Quaternion.AngleAxis(mouseLook.x, character.transform.up);
}
}
As you can see, first the function rotates up/down, then it rotates the parent (which the camera is parented to) left/right. You can ignore the smoothing variable, it is set to 1.
The above script is almost there, but up/down movement is slowed down and has strange rotation locks at about +/- 60 degrees. I need help. Any better ways to do this?
Your answer
Follow this Question
Related Questions
Quaternion.Lerp and Vector3.MoveTowards arent smoothing 1 Answer
Using quaternion for mouse movement? 3 Answers
MouseLook script 90 degrees off 2 Answers