void LateUpdate() { PlayerInput input = new PlayerInput(); AxisInput axisInput = input.SubAxis(); DeltaCameraAngle deltaAngle = new DeltaCameraAngle(axisInput.value) .Multi(speed) .MultiCurrentFrameTime() .Reverse(); CameraAngle currentCameraAngle = prevCameraAngle.Add(deltaAngle); prevCameraAngle = currentCameraAngle; Vector3 lookPoint = playerTransformCache.position + Vector3.up * height; Vector3 localPosition = currentCameraAngle.ToLocalPosition(distance); Vector3 position = lookPoint + localPosition; transformCache.position = position; transformCache.LookAt(playerTransformCache); }