Ejemplo n.º 1
0
        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);
            }
        }
Ejemplo n.º 2
0
        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));
        }
Ejemplo n.º 3
0
        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));
        }