51 lines
1.5 KiB
C#
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);
|
|
}
|
|
}
|