using UnityEngine; using Cinemachine; using System.Collections.Generic; public class DollyCameraController : MonoBehaviour { public CinemachineDollyCart dollyCart; public float tapWindowSeconds = 0.5f; public float baseSpeed = 2f; public float maxSpeed = 10f; public float acceleration = 5f; private List tapTimestamps = new List(); private float currentSpeed = 0f; private float targetSpeed = 0f; void Update() { HandleInput(); UpdateSpeed(); MoveCamera(); } void HandleInput() { if (Input.GetMouseButtonDown(0) || Input.touchCount > 0) { tapTimestamps.Add(Time.time); } } public float tapSensitivity = 0.8f; void UpdateSpeed() { float cutoff = Time.time - tapWindowSeconds; tapTimestamps.RemoveAll(t => t < cutoff); float tps = tapTimestamps.Count / tapWindowSeconds; // Add tap influence to base speed (softly) float rawTarget = baseSpeed + (tps * tapSensitivity); targetSpeed = Mathf.Clamp(rawTarget, baseSpeed, maxSpeed); currentSpeed = Mathf.MoveTowards(currentSpeed, targetSpeed, acceleration * Time.deltaTime); } void MoveCamera() { if (dollyCart == null) return; float cameraSpeed = currentSpeed / 50f; dollyCart.m_Position += cameraSpeed * Time.deltaTime; dollyCart.m_Position %= 1f; } public float GetCameraPathPosition() { return dollyCart.m_Position; } }