/// <summary>Fires the given callback after the given time.</summary> /// <param name="delay">Callback delay</param> /// <param name="callback">Callback to fire when the delay has expired</param> /// <param name="ignoreTimeScale">If TRUE (default) ignores Unity's timeScale</param> public static Tween DelayedCall(float delay, TweenCallback callback, bool ignoreTimeScale = true) { return(DOTween.Sequence().AppendInterval(delay).OnStepComplete(callback).SetUpdate(UpdateType.Normal, ignoreTimeScale).SetAutoKill(true)); }
void FixedUpdate() { if (!_isRolling) { return; } if (_currentNumberIndex < _maxCount && Time.time >= _startTime + _currentNumberIndex * _interval) { _currentNumberIndex += 1; } for (int i = 0; i < _currentNumberIndex; i++) { if (_restRollingTimes[i] < 0) { continue; } Text number1 = _numberList1[i]; Text number2 = _numberList2[i]; number1.rectTransform.SetAnchoredPosY(_originSize.y - (_originSize.y - (number1.rectTransform.anchoredPosition.y - Time.deltaTime * _speed)) % (2 * _originSize.y)); if (number1.rectTransform.anchoredPosition.y - Time.deltaTime * _speed <= -_originSize.y && _restRollingTimes[i] >= 0) { _restRollingTimes[i] -= 1; if (_restRollingTimes[i] < 0) { number1.transform.DOLocalMoveY(-_originSize.y, _bufferTime); var s = DOTween.Sequence(); s.Append(number2.transform.DOLocalMoveY(-_bufferLength, _bufferTime)).Append(number2.transform.DOLocalMoveY(0, _harmonicTime).SetEase(Ease.OutCubic)); continue; } number1.rectTransform.SetAnchoredPosY(number1.rectTransform.anchoredPosition.y + 2 * _originSize.y); number1.text = NextNumber(number2.text); } number2.rectTransform.SetAnchoredPosY(_originSize.y - (_originSize.y - (number2.rectTransform.anchoredPosition.y - Time.deltaTime * _speed)) % (2 * _originSize.y)); if (number2.rectTransform.anchoredPosition.y - Time.deltaTime * _speed <= -_originSize.y && _restRollingTimes[i] >= 0) { _restRollingTimes[i] -= 1; if (_restRollingTimes[i] < 0) { number2.transform.DOLocalMoveY(-_originSize.y, _bufferTime); var s = DOTween.Sequence(); s.Append(number1.transform.DOLocalMoveY(-_bufferLength, _bufferTime)).Append(number1.transform.DOLocalMoveY(0, _harmonicTime).SetEase(Ease.OutCubic)); continue; } number2.rectTransform.SetAnchoredPosY(number2.rectTransform.anchoredPosition.y + 2 * _originSize.y); number2.text = NextNumber(number1.text); } } if ((_maxCount > 1 && _restRollingTimes[_maxCount - 2] < 0 && _restRollingTimes[_maxCount - 1] < 0) || (_maxCount == 1 && _restRollingTimes[0] < 0)) { if (!_fromZero) { transform.DOLocalMoveX(_lengthDelta / 2, _tweakTime).SetEase(Ease.OutCubic); } onComplete?.Invoke(); _isRolling = false; } }
// Used also by DOTweenAnimationInspector when applying runtime changes and restarting public void CreateTween() { if (target == null) { Debug.LogWarning(string.Format("{0} :: This tween's target is NULL, because the animation was created with a DOTween Pro version older than 0.9.255. To fix this, exit Play mode then simply select this object, and it will update automatically", this.gameObject.name), this.gameObject); return; } if (forcedTargetType != TargetType.Unset) { targetType = forcedTargetType; } if (targetType == TargetType.Unset) { // Legacy DOTweenAnimation (made with a version older than 0.9.450) without stored targetType > assign it now targetType = TypeToDOTargetType(target.GetType()); } switch (animationType) { case DOTweenAnimationType.None: break; case DOTweenAnimationType.Move: if (useTargetAsV3) { isRelative = false; if (endValueTransform == null) { Debug.LogWarning(string.Format("{0} :: This tween's TO target is NULL, a Vector3 of (0,0,0) will be used instead", this.gameObject.name), this.gameObject); endValueV3 = Vector3.zero; } else { if (targetType == TargetType.RectTransform) { RectTransform endValueT = endValueTransform as RectTransform; if (endValueT == null) { Debug.LogWarning(string.Format("{0} :: This tween's TO target should be a RectTransform, a Vector3 of (0,0,0) will be used instead", this.gameObject.name), this.gameObject); endValueV3 = Vector3.zero; } else { RectTransform rTarget = target as RectTransform; if (rTarget == null) { Debug.LogWarning(string.Format("{0} :: This tween's target and TO target are not of the same type. Please reassign the values", this.gameObject.name), this.gameObject); } else { // Problem: doesn't work inside Awake (ararargh!) endValueV3 = DOTweenUtils46.SwitchToRectTransform(endValueT, rTarget); } } } else { endValueV3 = endValueTransform.position; } } } switch (targetType) { case TargetType.RectTransform: tween = ((RectTransform)target).DOAnchorPos3D(endValueV3, duration, optionalBool0); break; case TargetType.Transform: tween = ((Transform)target).DOMove(endValueV3, duration, optionalBool0); break; case TargetType.Rigidbody2D: tween = ((Rigidbody2D)target).DOMove(endValueV3, duration, optionalBool0); break; case TargetType.Rigidbody: tween = ((Rigidbody)target).DOMove(endValueV3, duration, optionalBool0); break; } break; case DOTweenAnimationType.LocalMove: tween = transform.DOLocalMove(endValueV3, duration, optionalBool0); break; case DOTweenAnimationType.Rotate: switch (targetType) { case TargetType.Transform: tween = ((Transform)target).DORotate(endValueV3, duration, optionalRotationMode); break; case TargetType.Rigidbody2D: tween = ((Rigidbody2D)target).DORotate(endValueFloat, duration); break; case TargetType.Rigidbody: tween = ((Rigidbody)target).DORotate(endValueV3, duration, optionalRotationMode); break; } break; case DOTweenAnimationType.LocalRotate: tween = transform.DOLocalRotate(endValueV3, duration, optionalRotationMode); break; case DOTweenAnimationType.Scale: tween = transform.DOScale(optionalBool0 ? new Vector3(endValueFloat, endValueFloat, endValueFloat) : endValueV3, duration); break; case DOTweenAnimationType.UIWidthHeight: tween = ((RectTransform)target).DOSizeDelta(optionalBool0 ? new Vector2(endValueFloat, endValueFloat) : endValueV2, duration); break; case DOTweenAnimationType.Color: isRelative = false; switch (targetType) { case TargetType.SpriteRenderer: tween = ((SpriteRenderer)target).DOColor(endValueColor, duration); break; case TargetType.Renderer: tween = ((Renderer)target).material.DOColor(endValueColor, duration); break; case TargetType.Image: tween = ((Image)target).DOColor(endValueColor, duration); break; case TargetType.Text: tween = ((Text)target).DOColor(endValueColor, duration); break; case TargetType.Light: tween = ((Light)target).DOColor(endValueColor, duration); break; #if DOTWEEN_TK2D case TargetType.tk2dTextMesh: tween = ((tk2dTextMesh)target).DOColor(endValueColor, duration); break; case TargetType.tk2dBaseSprite: tween = ((tk2dBaseSprite)target).DOColor(endValueColor, duration); break; #endif #if DOTWEEN_TMP case TargetType.TextMeshProUGUI: tween = ((TextMeshProUGUI)target).DOColor(endValueColor, duration); break; case TargetType.TextMeshPro: tween = ((TextMeshPro)target).DOColor(endValueColor, duration); break; #endif } break; case DOTweenAnimationType.Fade: isRelative = false; switch (targetType) { case TargetType.SpriteRenderer: tween = ((SpriteRenderer)target).DOFade(endValueFloat, duration); break; case TargetType.Renderer: tween = ((Renderer)target).material.DOFade(endValueFloat, duration); break; case TargetType.Image: tween = ((Image)target).DOFade(endValueFloat, duration); break; case TargetType.Text: tween = ((Text)target).DOFade(endValueFloat, duration); break; case TargetType.Light: tween = ((Light)target).DOIntensity(endValueFloat, duration); break; case TargetType.CanvasGroup: tween = ((CanvasGroup)target).DOFade(endValueFloat, duration); break; #if DOTWEEN_TK2D case TargetType.tk2dTextMesh: tween = ((tk2dTextMesh)target).DOFade(endValueFloat, duration); break; case TargetType.tk2dBaseSprite: tween = ((tk2dBaseSprite)target).DOFade(endValueFloat, duration); break; #endif #if DOTWEEN_TMP case TargetType.TextMeshProUGUI: tween = ((TextMeshProUGUI)target).DOFade(endValueFloat, duration); break; case TargetType.TextMeshPro: tween = ((TextMeshPro)target).DOFade(endValueFloat, duration); break; #endif } break; case DOTweenAnimationType.Text: switch (targetType) { case TargetType.Text: tween = ((Text)target).DOText(endValueString, duration, optionalBool0, optionalScrambleMode, optionalString); break; #if DOTWEEN_TK2D case TargetType.tk2dTextMesh: tween = ((tk2dTextMesh)target).DOText(endValueString, duration, optionalBool0, optionalScrambleMode, optionalString); break; #endif #if DOTWEEN_TMP case TargetType.TextMeshProUGUI: tween = ((TextMeshProUGUI)target).DOText(endValueString, duration, optionalBool0, optionalScrambleMode, optionalString); break; case TargetType.TextMeshPro: tween = ((TextMeshPro)target).DOText(endValueString, duration, optionalBool0, optionalScrambleMode, optionalString); break; #endif } break; case DOTweenAnimationType.PunchPosition: switch (targetType) { case TargetType.RectTransform: tween = ((RectTransform)target).DOPunchAnchorPos(endValueV3, duration, optionalInt0, optionalFloat0, optionalBool0); break; case TargetType.Transform: tween = ((Transform)target).DOPunchPosition(endValueV3, duration, optionalInt0, optionalFloat0, optionalBool0); break; } break; case DOTweenAnimationType.PunchScale: tween = transform.DOPunchScale(endValueV3, duration, optionalInt0, optionalFloat0); break; case DOTweenAnimationType.PunchRotation: tween = transform.DOPunchRotation(endValueV3, duration, optionalInt0, optionalFloat0); break; case DOTweenAnimationType.ShakePosition: switch (targetType) { case TargetType.RectTransform: tween = ((RectTransform)target).DOShakeAnchorPos(duration, endValueV3, optionalInt0, optionalFloat0, optionalBool0); break; case TargetType.Transform: tween = ((Transform)target).DOShakePosition(duration, endValueV3, optionalInt0, optionalFloat0, optionalBool0); break; } break; case DOTweenAnimationType.ShakeScale: tween = transform.DOShakeScale(duration, endValueV3, optionalInt0, optionalFloat0); break; case DOTweenAnimationType.ShakeRotation: tween = transform.DOShakeRotation(duration, endValueV3, optionalInt0, optionalFloat0); break; case DOTweenAnimationType.CameraAspect: tween = ((Camera)target).DOAspect(endValueFloat, duration); break; case DOTweenAnimationType.CameraBackgroundColor: tween = ((Camera)target).DOColor(endValueColor, duration); break; case DOTweenAnimationType.CameraFieldOfView: tween = ((Camera)target).DOFieldOfView(endValueFloat, duration); break; case DOTweenAnimationType.CameraOrthoSize: tween = ((Camera)target).DOOrthoSize(endValueFloat, duration); break; case DOTweenAnimationType.CameraPixelRect: tween = ((Camera)target).DOPixelRect(endValueRect, duration); break; case DOTweenAnimationType.CameraRect: tween = ((Camera)target).DORect(endValueRect, duration); break; case DOTweenAnimationType.BezierMove: if (useTargetAsV3) { isRelative = false; if (endValueTransform == null) { Debug.LogWarning(string.Format("{0} :: This tween's TO target is NULL, a Vector3 of (0,0,0) will be used instead", this.gameObject.name), this.gameObject); endValueV3 = Vector3.zero; } else { if (targetType == TargetType.RectTransform) { RectTransform endValueT = endValueTransform as RectTransform; if (endValueT == null) { Debug.LogWarning(string.Format("{0} :: This tween's TO target should be a RectTransform, a Vector3 of (0,0,0) will be used instead", this.gameObject.name), this.gameObject); endValueV3 = Vector3.zero; } else { RectTransform rTarget = target as RectTransform; if (rTarget == null) { Debug.LogWarning(string.Format("{0} :: This tween's target and TO target are not of the same type. Please reassign the values", this.gameObject.name), this.gameObject); } else { // Problem: doesn't work inside Awake (ararargh!) endValueV3 = DOTweenUtils46.SwitchToRectTransform(endValueT, rTarget); } } } else { endValueV3 = endValueTransform.position; } } } Vector3 startPt = target.transform.localPosition; //bool isRight = startPt.x > 0; Vector3 ctrlPt1; Vector3 ctrlPt2; if (useRandomRange) { ctrlPt1.x = UnityEngine.Random.Range(P1_Offset.x, P1_RandomRange.x); ctrlPt1.y = UnityEngine.Random.Range(P1_Offset.y, P1_RandomRange.y); } else { ctrlPt1.x = P1_Offset.x; ctrlPt1.y = P1_Offset.y; } ctrlPt1.z = startPt.z; ctrlPt2.x = P2_Offset.x; ctrlPt2.y = P2_Offset.y; ctrlPt2.z = ctrlPt1.z; if (same_P1) { if ((ctrlPt1.x < 0 && ctrlPt2.x > 0) || (ctrlPt1.x > 0 && ctrlPt2.x < 0)) { ctrlPt2.x *= -1; } if ((ctrlPt1.y < 0 && ctrlPt2.y > 0) || (ctrlPt1.y > 0 && ctrlPt2.y < 0)) { ctrlPt2.y *= -1; } } //Debug.LogError (string.Format ("ctrlPt1:{0} ctrlPt2:{1}", ctrlPt1.ToString (), ctrlPt2.ToString ())); Vector3[] path = GetBeizerList(startPt, ctrlPt1, ctrlPt2, endValueV3, 50); switch (targetType) { case TargetType.RectTransform: case TargetType.Transform: tween = ((Transform)target.transform).DOLocalPath(path, duration, PathType.CatmullRom); break; case TargetType.Rigidbody2D: tween = (target.transform).DOLocalPath(path, duration, PathType.CatmullRom); break; case TargetType.Rigidbody: tween = (target.transform).DOLocalPath(path, duration, PathType.CatmullRom); break; } if (useScal) { var scale1 = target.transform.DOScale(P1_Scal.x, P1_Scal.y); var scale2 = target.transform.DOScale(P2_Scal.x, P2_Scal.y); var scale3 = target.transform.DOScale(End_Scal.x, End_Scal.y); var scale = DOTween.Sequence(); scale.AppendInterval(delay); scale.Append(scale1); scale.Append(scale2); scale.Append(scale3); } break; } if (tween == null) { return; } if (isFrom) { ((Tweener)tween).From(isRelative); } else { tween.SetRelative(isRelative); } if (DOTweenAnimationType.BezierMove == animationType) { tween.SetDelay(delay).SetLoops(loops, loopType).SetAutoKill(autoKill) .OnKill(() => tween = null); } else { tween.SetTarget(this.gameObject).SetDelay(delay).SetLoops(loops, loopType).SetAutoKill(autoKill) .OnKill(() => tween = null); } if (isSpeedBased) { tween.SetSpeedBased(); } if (easeType == Ease.INTERNAL_Custom) { tween.SetEase(easeCurve); } else { tween.SetEase(easeType); } if (!string.IsNullOrEmpty(id)) { tween.SetId(id); } tween.SetUpdate(isIndependentUpdate); if (hasOnStart) { if (onStart != null) { tween.OnStart(onStart.Invoke); } } else { onStart = null; } if (hasOnPlay) { if (onPlay != null) { tween.OnPlay(onPlay.Invoke); } } else { onPlay = null; } if (hasOnUpdate) { if (onUpdate != null) { tween.OnUpdate(onUpdate.Invoke); } } else { onUpdate = null; } if (hasOnStepComplete) { if (onStepComplete != null) { tween.OnStepComplete(onStepComplete.Invoke); } } else { onStepComplete = null; } if (hasOnComplete) { if (onComplete != null) { tween.OnComplete(onComplete.Invoke); } } else { onComplete = null; } if (autoPlay) { tween.Play(); } else { tween.Pause(); } if (hasOnTweenCreated && onTweenCreated != null) { onTweenCreated.Invoke(); } }