Как добавить инерцию к вращению камеры вокруг объекта после отпускания кнопки мыши в данном коде реализации вращения с помощью мыши?
Для реализации эффекта инерции при вращении камеры в Unity после отпускания кнопки мыши можно воспользоваться следующим подходом: 1. Создайте переменную для хранения скорости вращения камеры после отпускания кнопки мыши. ```csharp public float rotationSpeed = 5f; public float damping = 0.9f; private Vector3 lastMousePosition; private Vector3 newMousePosition; private Vector3 deltaMousePosition; private Vector3 rotationVelocity; ``` 2. В методе Update() добавьте следующий код для записи текущего и предыдущего положения мыши и вычисления изменения положения мыши: ```csharp void Update() { if (Input.GetMouseButtonDown(0)) { lastMousePosition = Input.mousePosition; } if (Input.GetMouseButton(0)) { newMousePosition = Input.mousePosition; deltaMousePosition = newMousePosition - lastMousePosition; // Рассчитываем скорость вращения камеры rotationVelocity += new Vector3(-deltaMousePosition.y, deltaMousePosition.x, 0) * rotationSpeed; lastMousePosition = newMousePosition; } // Применяем инерцию к вращению камеры rotationVelocity *= damping; transform.Rotate(rotationVelocity * Time.deltaTime); } ``` 3. Убедитесь, что у вас есть объект, к которому камера должна вращаться, и что камера находится в правильной позиции относительно этого объекта. Теперь при вращении камеры с помощью мыши и отпускании кнопки мыши камера будет продолжать вращаться с инерцией. Подберите значения переменных rotationSpeed и damping для достижения желаемого эффекта инерции.
using UnityEngine; public class Rotate : MonoBehaviour { float _currentSpeed; float _targetSpeed; [SerializeField] float _speedRotate; const float c_acceleration = 20f; const float c_di_acceleration = 10f; float _acceleration; private void Update() { _targetSpeed = Input.GetAxis("Mouse Y")*_speedRotate; _acceleration = _targetSpeed != 0 ? c_acceleration : c_di_acceleration; _currentSpeed = Mathf.MoveTowards(_currentSpeed, _targetSpeed, _acceleration * Time.deltaTime); } }
с константами надо поиграть что бы не было задержки при вращении