Question by
DerEyve · Nov 19, 2020 at 09:54 PM ·
camera rotatecamera-look
Camera glance view (free look) localRotation lock
Hello, I'm trying to add a glance view for my fps game. I currently have this code, but when im activating the glance mode (Left- or RightAlt) it'll lock and won't rotate. Im using two cameras; fpvCamera for the normal player view and the glanceCamera for the glance view which localRotation get updated on every x and y mouse movement.
float t_input = Input.GetAxis("Mouse X") * xSensitivity * Time.deltaTime;
Quaternion t_adj = Quaternion.AngleAxis(t_input, Vector3.up);
bool glancing = Input.GetKey(KeyCode.LeftAlt) || Input.GetKey(KeyCode.RightAlt);
bool isGlancing = glancing;
if (isGlancing)
{
Quaternion t_delta = glanceCamera.localRotation * t_adj;
fpvCamera.gameObject.SetActive(false);
glanceCamera.gameObject.SetActive(true);
glanceCamera.localRotation = t_delta;
}
else
{
Quaternion t_delta = player.localRotation * t_adj;
fpvCamera.gameObject.SetActive(true);
glanceCamera.gameObject.SetActive(false);
player.localRotation = glanceCamera.localRotation = t_delta;
}
If it helps here is the whole file code:
using UnityEngine;
namespace Player
{
public class PlayerLook : MonoBehaviour
{
public static bool isCursorLocked;
public Transform player;
public Transform fpvCamera;
public Transform glanceCamera;
public float xSensitivity;
public float ySensitivity;
public float maxAngle;
private Quaternion camCenter;
private void Start()
{
fpvCamera.gameObject.SetActive(true);
glanceCamera.gameObject.SetActive(true);
camCenter = fpvCamera.localRotation;
}
private void Update()
{
SetY();
SetX();
UpdateCursorLock();
}
private void SetY()
{
float t_input = Input.GetAxis("Mouse Y") * ySensitivity * Time.deltaTime;
Quaternion t_adj = Quaternion.AngleAxis(t_input, -Vector3.right);
Quaternion t_delta = fpvCamera.localRotation * t_adj;
if (Quaternion.Angle(camCenter, t_delta) < maxAngle)
{
fpvCamera.localRotation = glanceCamera.localRotation = t_delta;
}
}
private void SetX()
{
float t_input = Input.GetAxis("Mouse X") * xSensitivity * Time.deltaTime;
Quaternion t_adj = Quaternion.AngleAxis(t_input, Vector3.up);
bool glancing = Input.GetKey(KeyCode.LeftAlt) || Input.GetKey(KeyCode.RightAlt);
bool isGlancing = glancing;
if (isGlancing)
{
Quaternion t_delta = glanceCamera.localRotation * t_adj;
fpvCamera.gameObject.SetActive(false);
glanceCamera.gameObject.SetActive(true);
glanceCamera.localRotation = t_delta;
}
else
{
Quaternion t_delta = player.localRotation * t_adj;
fpvCamera.gameObject.SetActive(true);
glanceCamera.gameObject.SetActive(false);
player.localRotation = glanceCamera.localRotation = t_delta;
}
}
private void UpdateCursorLock()
{
if (isCursorLocked)
{
Cursor.lockState = CursorLockMode.Locked;
Cursor.visible = false;
if (Input.GetKeyDown(KeyCode.Escape))
{
isCursorLocked = false;
}
}
else
{
Cursor.lockState = CursorLockMode.None;
Cursor.visible = true;
}
}
}
}
Thanks.
Comment
Your answer
Follow this Question
Related Questions
Third person look around camera, jagged results 0 Answers
(NEED HELP!) Camera controlled by mouse Y, player controlled by mouse X 2 Answers
viewing on the Mouse Y axis not working. 0 Answers
How to set viewpoint regardless of tilt of device when use gyroscope 0 Answers
getting Jittery movement on camera when player rotating and moving in same time 0 Answers