private IEnumerator MoveShakeStrength(ShakeData shakeData, Action onShakeCompleted = null) { float durationOffset = UnityEngine.Random.Range(-shakeData.randomDurationOffset, shakeData.randomDurationOffset); float targetStrengthOffset = UnityEngine.Random.Range(-shakeData.randomTargetStrengthOffset, shakeData.randomTargetStrengthOffset); float duration = shakeData.duration + durationOffset; float targetStrength = shakeData.targetStrength + targetStrengthOffset; float startStrength = shakeStrength; float time = 0; while (time < duration) { float absoluteValue = time / duration; float easedAbsoluteValue = EasingHelper.EaseInSine(absoluteValue); float strengthProgess = targetStrength - startStrength; float easedStrengthProgess = strengthProgess * easedAbsoluteValue; shakeStrength = startStrength + easedStrengthProgess; time += Time.deltaTime; yield return(new WaitForEndOfFrame()); } shakeStrength = targetStrength; if (onShakeCompleted != null) { onShakeCompleted(); } }