Kastell/Assets/Pixel3D/Scripts/IsometricCameraPivot.cs
Gerard Gascón f5c1616018 init
2025-02-02 23:45:04 +01:00

51 lines
1.5 KiB
C#

using System;
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public class IsometricCameraPivot : MonoBehaviour
{
float _targetAngleY;
float _currentAngleY;
float _targetAngleX;
float _currentAngleX;
[SerializeField] float _mouseSensitivity = 2;
[SerializeField] float _rotationSpeed = 5;
void Awake()
{
_targetAngleY = transform.eulerAngles.y;
_targetAngleX = transform.eulerAngles.x;
}
void Update()
{
float mouseX = Input.GetAxis("Mouse X");
float mouseY = Input.GetAxis("Mouse Y");
if (Input.GetMouseButton(0))
{
_targetAngleY += mouseX * _mouseSensitivity;
_targetAngleX -= mouseY * _mouseSensitivity / 3;
}
else
{
_targetAngleY = Mathf.Round(_targetAngleY / 45) * 45;
_targetAngleX = Mathf.Round(_targetAngleX / 15) * 15;
}
_targetAngleY = (_targetAngleY + 360) % 360;
_targetAngleX = Mathf.Clamp(_targetAngleX, 23, 67);
_currentAngleY = Mathf.LerpAngle(transform.eulerAngles.y, _targetAngleY, Time.deltaTime * _rotationSpeed);
_currentAngleX = Mathf.LerpAngle(transform.eulerAngles.x, _targetAngleX, Time.deltaTime * _rotationSpeed);
if (Mathf.Abs(_currentAngleY - _targetAngleY) < 0.1f) _currentAngleY = _targetAngleY;
if (Mathf.Abs(_currentAngleX - _targetAngleX) < 0.1f) _currentAngleX = _targetAngleX;
transform.rotation = Quaternion.Euler(_currentAngleX, _currentAngleY, 0);
}
}