public void ScrubToHere( float currentTime, TargetPositionCache.Mode cacheMode, CinemachineBrain brain) { if (brain == null) { return; } TargetPositionCache.CacheMode = cacheMode; TargetPositionCache.CurrentTime = currentTime; if (cacheMode != TargetPositionCache.Mode.Playback) { return; } float stepSize = TargetPositionCache.CacheStepSize; var up = brain.DefaultWorldUp; var endTime = TargetPositionCache.CurrentTime; var startTime = Mathf.Max( TargetPositionCache.CacheTimeRange.Start, endTime - GetMaxDampTime()); var numSteps = Mathf.FloorToInt((endTime - startTime) / stepSize); for (int step = numSteps; step >= 0; --step) { var t = Mathf.Max(startTime, endTime - step * stepSize); TargetPositionCache.CurrentTime = t; var deltaTime = (step == numSteps) ? -1 : (t - startTime < stepSize ? t - startTime : stepSize); // Update all relevant vcams, leaf-most first for (int i = mAllCamerasForScrubbing.Count - 1; i >= 0; --i) { var sublist = mAllCamerasForScrubbing[i]; for (int j = sublist.Count - 1; j >= 0; --j) { var vcam = sublist[j]; vcam.InternalUpdateCameraState(up, deltaTime); if (deltaTime < 0) { vcam.ForceCameraPosition( TargetPositionCache.GetTargetPosition(vcam.transform), TargetPositionCache.GetTargetRotation(vcam.transform)); } } } } }
public void ScrubToHere( float currentTime, TargetPositionCache.Mode cacheMode, CinemachineBrain brain) { if (brain == null) { return; } TargetPositionCache.CacheMode = cacheMode; TargetPositionCache.CurrentTime = currentTime; if (cacheMode != TargetPositionCache.Mode.Playback) { return; } const float kStepsPerSecond = 30; const float kStepSize = 1.0f / kStepsPerSecond; int numSteps = Mathf.CeilToInt(GetMaxDampTime() * kStepsPerSecond); float endTime = TargetPositionCache.CurrentTime; for (int step = numSteps; step >= 0; --step) { var t = endTime - step * kStepSize; var deltaTime = (step == numSteps) ? -1 : kStepSize; TargetPositionCache.CurrentTime = t; // Update all relevant vcams, leaf-most first for (int i = mAllCamerasForScrubbing.Count - 1; i >= 0; --i) { var sublist = mAllCamerasForScrubbing[i]; for (int j = sublist.Count - 1; j >= 0; --j) { var vcam = sublist[j]; vcam.InternalUpdateCameraState(brain.DefaultWorldUp, deltaTime); } } } }