public static List <Tween> GetDOTweens(object source = null, string prefix = StringConst.String_DOTweenId_Use_GameTime) { List <Tween> tweenList = new List <Tween>(); if (DOTween.PlayingTweens() == null) { return(tweenList); } foreach (var tween in DOTween.PlayingTweens()) { if (source == null) { if (tween.id is DOTweenId id && id.prefix == prefix) { tweenList.Add(tween); } } else { if (tween.id is DOTweenId && tween.id.Equals(new DOTweenId(source, prefix))) { tweenList.Add(tween); } } if (tween.id is string s && s.Equals(prefix)) { tweenList.Add(tween); } } return(tweenList); }
private bool DoTween(bool leave) { if (GetDone(DoFlag.Tween)) { return(false); } SetDone(DoFlag.Tween); if (cameraMode != null) { string id = leave ? cameraMode.tweenIdLeave : cameraMode.tweenIdEnter; if (!string.IsNullOrEmpty(id)) { int count = DOTween.Restart(id); if (count > 0) { var playings = DOTween.PlayingTweens(); float duration = GetMaxDuration(playings, id); if (duration == 0f) { return(false); } StartCoroutine(WaitTweenComplete(duration, leave)); return(true); } } } return(false); }
/// <summary> /// 清除当前正在运行的Tween动画 /// </summary> /// <param name="isComleat">清除前是否让其瞬间过度完动画</param> public static void KillPlayingTweens(bool isComleat) { List <Tween> list = DOTween.PlayingTweens(); if (list?.Count > 0) { for (int i = list.Count - 1; i >= 0; i--) { if (isComleat) { list[i].fullPosition = 0f; } list[i].Kill(isComleat); } } }
public void OnClickHandle() { if (isMoveing) { return; } if (DOTween.TotalPlayingTweens() > 0) { List <Tween> tweens = DOTween.PlayingTweens(); foreach (Tween t in tweens) { Debug.Log(t.target); } DOTween.CompleteAll(); DOTween.KillAll(); return; } if (onComplate != null) { Close(); onComplate(); } else { qy.config.StoryItem story = curDialogue.next; if (story != null) { ShowStory(story); } else { Close(); } } }
/// <summary> /// 过滤清除当前正在运行的Tween动画 ///【默认为布尔值,请注意设置Tween.id 为 true】 /// </summary> /// <param name="isComleat">清除前是否让其瞬间过度完动画</param> public static void KillPlayingFilterTweens(bool isComleat) { List <Tween> list = DOTween.PlayingTweens(); if (list?.Count > 0) { for (int i = list.Count - 1; i >= 0; i--) { if (list[i] != null) { if (list[i].id is Boolean && (Boolean)list[i].id) { break; } if (isComleat) { list[i].fullPosition = 0f; } list[i].Kill(isComleat); } } } }
private void ResolveTouchClick(IPuzzle puzzle, IOperation op) { IQuad quad = puzzle[op.row, op.column]; if (quad.value == QuadValue.Front || quad.value == QuadValue.Back) { List <Tween> playings = DOTween.PlayingTweens(); if (playings != null) { playings.ForEach((Tween each) => { if (each.id != null && each.id.ToString().StartsWith(Style.QuadUnifiedRotateId)) { each.Kill(true); } }); } puzzle.touchEnable = false; TweenDepot depot = new TweenDepot(); ResolvePresent(depot, puzzle, op, op, 0); Sequence sequence = depot.ToSequence(); sequence.SetId(Style.QuadUnifiedRotateId); sequence.OnComplete(() => { ResolveTouchData(puzzle, op); if (IsSolved(puzzle)) { puzzle.solved = true; } else { puzzle.touchEnable = true; } }); } }
async void Start() { //Position 移動到座標 transform.DOMove(Vector3.one, 2); transform.DOLocalMoveX(1, 2); transform.DOLocalMoveY(1, 2); //Rotate 旋轉 transform.DORotate(new Vector3(0, 0, 180), 2); transform.DOLocalRotate(new Vector3(0, 90, 0), 2); transform.DORotateQuaternion(new Quaternion(0.1f, 0.1f, 0.1f, 0.1f), 2); transform.DOLookAt(Vector3.one, 2); //縮放 Scale transform.DOScale(Vector3.one * 2, 2); //震動 + 彈性 //第一個參數 punch:方向 力的大小 //第二個參數 duration:持續時間 //第三個參數 Vibrato: 震動頻率 //第四個參數 Elasticity 彈性 transform.DOPunchPosition(new Vector3(0, 1, 0), 2, 10, 10); //Shake 震動 transform.DOShakePosition(2, Vector3.one, 20, 0); //Blend(座標位置增加或減少) transform.DOBlendableMoveBy(Vector3.one, 2); transform.DOBlendableMoveBy(-Vector3.one * 2, 2); //Material 材質Tint顏色變化 Material material = GetComponent <MeshRenderer>().material; material.DOColor(Color.red, "_Color", 2); //Alpha 透明 material.DOFade(0, 2); //Gradient 顏色和透明度漸變 material.DOGradientColor(_gradient, "_Color", 2); material.DOVector(Color.clear, "_Color", 2); //顏色混合 material.DOBlendableColor(Color.red, "_Color", 2); material.DOBlendableColor(Color.green, "_Color", 2); //隊列執行 Sequence quence = DOTween.Sequence(); quence.Append(transform.DOMove(Vector3.one, 2)); //0~2秒 quence.AppendInterval(1); //2~3秒 quence.AppendCallback(AppendCallBack); quence.Join(transform.DOScale(Vector3.one * 2, 2)); quence.Append(transform.DOMove(new Vector3(1, 0, 0), 2)); //3~5秒 quence.Join(transform.DOScale(Vector3.one, 2)); //插入執行(會覆蓋當前秒數的執行) quence.Insert(2, transform.DOMove(-Vector3.one, 1)); //2秒開始 //插入方法執行 quence.InsertCallback(5, InsertCallBack); //多種方法調用 transform.DOMove(Vector3.one, 1).SetLoops(-1, LoopType.Yoyo).SetEase(Ease.Linear); //結束點到起點 transform.DOMove(Vector3.one, 2).From(); //延遲調用 transform.DOMove(Vector3.one, 2).SetDelay(3); //移動速度 transform.DOMove(Vector3.one, 10).SetSpeedBased(); //以ID調用 transform.DOMove(Vector3.one, 10).SetId("ID"); DOTween.Play("ID"); //增量移動 transform.DOMove(Vector3.one, 2).SetRelative(true); //幀函數 transform.DOMove(Vector3.one, 2).SetUpdate(UpdateType.Normal, true); //Flash運動曲線 漸大或漸小 transform.DOMove(Vector3.one, 2).SetEase(Ease.Flash, 10, 1); transform.DOMove(Vector3.one, 2).SetEase(Ease.Flash, 10, -1); //結合AnimationCurve使用 transform.DOMove(Vector3.one * 2, 2).SetEase(_curve); //曲線運動 自訂義函數設置 transform.DOMove(Vector3.one * 2, 2).SetEase(EaseFun); //回調函數 transform.DOMove(Vector3.one * 2, 2).OnComplete(() => { Debug.Log("OnComplete"); }); transform.DOMove(Vector3.one * 2, 2).OnKill(() => { Debug.Log("OnKill"); }); transform.DOMove(Vector3.one * 2, 2).OnPlay(() => { Debug.Log("OnPlay"); }); transform.DOMove(Vector3.one * 2, 2).OnPause(() => { Debug.Log("OnPause"); }); transform.DOMove(Vector3.one * 2, 2).OnStart(() => { Debug.Log("OnStart"); }); transform.DOMove(Vector3.one * 2, 2).OnStepComplete(() => { Debug.Log("OnStepComplete"); }); transform.DOMove(Vector3.one * 2, 2).OnUpdate(() => { Debug.Log("OnUpdate"); }); transform.DOMove(Vector3.one * 2, 2).OnRewind(() => { Debug.Log("OnRewind"); }); //常見方法 transform.DOMove(Vector3.one * 2, 2); await Task.Delay(TimeSpan.FromSeconds(0.0001f)); transform.DOPause(); transform.DOPlay(); transform.DORestart(); transform.DORewind(); transform.DOSmoothRewind(); transform.DOPlayBackwards(); await Task.Delay(TimeSpan.FromSeconds(0.5f)); transform.DOPlayForward(); transform.DOTogglePause(); //獲取數據 var list1 = DOTween.PausedTweens(); var list2 = DOTween.PlayingTweens(); var list3 = DOTween.TweensById("ID"); var list4 = DOTween.TweensByTarget(transform, true); var list5 = DOTween.IsTweening("ID"); var list6 = DOTween.TotalPlayingTweens(); //修改移動模式 var tweener = transform.DOMove(Vector3.one * 2, 2); await Task.Delay(TimeSpan.FromSeconds(1)); Debug.Log(tweener.fullPosition); await Task.Delay(TimeSpan.FromSeconds(0.5f)); tweener.fullPosition = 0; var tweener1 = transform.DOMove(Vector3.one * 2, 1).SetLoops(3); await Task.Delay(TimeSpan.FromSeconds(1.1f)); Debug.Log(tweener1.CompletedLoops()); //1.1秒 await Task.Delay(TimeSpan.FromSeconds(1.1f)); Debug.Log(tweener1.CompletedLoops()); //2.2秒 await Task.Delay(TimeSpan.FromSeconds(1.1f)); Debug.Log(tweener1.CompletedLoops()); //3.3秒 //獲取時間數據 var tweener2 = transform.DOMove(Vector3.one * 2, 1).SetLoops(3); tweener2.Delay(); //延遲 tweener2.Duration(); //持續時間 tweener2.Elapsed(); //已經播放的時間 tweener2.ElapsedDirectionalPercentage(); //過去方向百分比 tweener2.ElapsedPercentage(); //過去百分比 //協程 指定循環次數 _tweener = transform.DOMove(Vector3.one * 2, 1).SetLoops(3); StartCoroutine(Wait()); }