Camera is rotating on Y but not on X;
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public class CameraHandler : MonoBehaviour
{
public Transform camTrans;
public Transform pivot;
public Transform character;
public Transform mTransform;
public CharacterStatus characterStatus;
public CameraConfig cameraConfig;
public bool leftPivot;
public float delta;
public float mouseX;
public float mouseY;
public float smoothX;
public float smoothY;
public float smoothXVelocity;
public float smoothYVelocity;
public float lookAngle;
public float tiltAngle;
private void FixedUpdate()
{
FixedTick();
}
void FixedTick()
{
delta = Time.deltaTime;
HandlePosition();
HandleRotation();
Vector3 targetPosition = Vector3.Lerp(mTransform.position, character.position, 1);
mTransform.position = targetPosition;
}
void HandlePosition()
{
float targetX = cameraConfig.normalX;
float targetY = cameraConfig.normalY;
float targetZ = cameraConfig.normalZ;
if (characterStatus.isAiming)
{
targetX = cameraConfig.aimX;
targetZ = cameraConfig.aimZ;
}
if (leftPivot)
{
targetX = -targetX;
}
Vector3 newPivotPosition = pivot.localPosition;
newPivotPosition.x = targetX;
newPivotPosition.y = targetY;
Vector3 newCameraPosition = camTrans.localPosition;
newCameraPosition.z = targetZ;
float t = delta * cameraConfig.pivotSpeed;
pivot.localPosition = Vector3.Lerp(pivot.localPosition, newPivotPosition,t);
camTrans.localPosition = Vector3.Lerp(camTrans.localPosition, newCameraPosition, t);
}
void HandleRotation()
{
mouseX = Input.GetAxis("Mouse X");
mouseY = Input.GetAxis("Mouse Y");
if(cameraConfig.turnSmooth > 0)
{
smoothX = Mathf.SmoothDamp(smoothX,mouseX,ref smoothXVelocity,cameraConfig.turnSmooth);
smoothY = Mathf.SmoothDamp(smoothY, mouseY, ref smoothYVelocity, cameraConfig.turnSmooth);
}
else
{
smoothX = mouseX;
smoothY = mouseY;
}
lookAngle += smoothX * cameraConfig.Y_Rotation_Speed;
Quaternion targetRot = Quaternion.Euler(0, lookAngle, 0);
tiltAngle -= smoothY * cameraConfig.Y_Rotation_Speed;
tiltAngle = Mathf.Clamp(tiltAngle, cameraConfig.minAngle, cameraConfig.maxAngle);
pivot.localRotation = Quaternion.Euler(tiltAngle,0,0);
}
}
Character status and Camera config are simple scriptable objects with no functions;