Я использую этот мой кривой "код" для камеры игрока. Я перерыл весь интернет, но ничего не понял, только больше себя запутал. Я понимаю в чем дело (потому что Quaternion.Slerp ищет минимальное расстояние, а когда делается резкий рывок мышью, он понимает, что по другому пути будет быстрее), но не понимаю как это исправить. Я загрузил на яндекс диск видео чтобы было легче понять мою проблему.
https://disk.yandex.ru/i/lZdfiAq5fYBOrQ
[SerializeField] private GameObject player;
[SerializeField] float minX = -90f, maxX = 90f, speed, sensitivity, sensZ, rotY, rotX, rotZ;
void Start()
{
Cursor.lockState = CursorLockMode.Locked;
}
void Update()
{
Transform();
}
private void Transform()
{
rotY += Input.GetAxis("Mouse X") * sensitivity;
rotX += Input.GetAxis("Mouse Y") * sensitivity;
rotZ = Input.GetAxis("Mouse X") * sensZ;
rotX = Mathf.Clamp(rotX, minX, maxX);
Quaternion _target = Quaternion.Euler(-rotX, player.transform.localEulerAngles.y, rotZ);
Quaternion _targetPlayer = Quaternion.Euler(-player.transform.rotation.x, rotY, player.transform.rotation.z);
player.transform.rotation = Quaternion.Slerp(player.transform.rotation, _targetPlayer, speed * Time.deltaTime);
transform.rotation = Quaternion.Slerp(transform.rotation, _target, Time.deltaTime * speed);
}