private IEnumerator ShakeRoutine(ShakeInstance shakeInstance, Common.StaticData.ShakeInfo shakeInfo) { if (shakeInfo.Delay > 0) { yield return(new WaitForSeconds(shakeInfo.Delay)); } shakeInstance.StartFadeIn(shakeInfo.FadeInTime); _shakeInstances.Add(shakeInstance); if (shakeInfo.Duration <= 0f) // 무한 쉐이크, StartShake()로 리턴받은 ShakeInstance를 가지고 수동으로 꺼줘야 한다. ShakeHolder 참고 { yield break; } float elapsedTime = 0f; float endTime = shakeInfo.Duration + shakeInfo.FadeInTime; while (elapsedTime <= endTime) { elapsedTime += Time.deltaTime * _freezeSpeed; yield return(null); } if (shakeInstance.CurrentState != ShakeState.FadingOut) { shakeInstance.StartFadeOut(shakeInfo.FadeOutTime); } }
public ShakeHolder StartShake(string shakeInfoId) { if (_target == null) { return(null); } if (shakeInfoId == null || Common.StaticInfo.StaticInfoManager.Instance.ShakeInfos.Exist(shakeInfoId) == false) { return(null); } Common.StaticData.ShakeInfo shakeInfo = Common.StaticInfo.StaticInfoManager.Instance.ShakeInfos[shakeInfoId]; return(StartShake(shakeInfo)); }
public ShakeHolder StartShake(Common.StaticData.ShakeInfo shakeInfo) { if (_target == null || shakeInfo == null) { return(null); } ShakeInstance newInstance = new ShakeInstance(shakeInfo.FadeInTime, shakeInfo.FadeOutTime) { Magnitude = shakeInfo.Scale, Roughness = shakeInfo.Speed, PositionInfluence = shakeInfo.PositionInfluence.Convert(), RotationInfluence = shakeInfo.RotationInfluence.Convert() }; newInstance.ScaleRoughness = this._freezeSpeed; StartCoroutine( ShakeRoutine(newInstance, shakeInfo)); return(new ShakeHolder(newInstance, shakeInfo.FadeOutTime)); }