/// <summary> /// Starts a camera shake using the provided profile /// </summary> /// <param name="profile">profile to use</param> public void StartShake(CameraShakeProfile profile) { if (!_isShaking) { StartCoroutine(Shake(profile)); } }
private IEnumerator Shake(CameraShakeProfile profile) { _isShaking = true; var seed = Random.Range(-256, 256); TimeSince start = 0f; var initialPosition = transform.localPosition; var initialRotation = transform.localEulerAngles; while (start <= profile.Duration) { var positionOffset = profile.Resolve(seed, start); positionOffset.Scale(profile.PositionScalar); transform.localPosition = initialPosition + positionOffset; var rotationOffset = profile.Resolve(seed, start); rotationOffset.Scale(profile.RotationScalar); transform.localEulerAngles = initialRotation + rotationOffset; yield return(null); } transform.localPosition = initialPosition; transform.localEulerAngles = initialRotation; _isShaking = false; }