Exemplo n.º 1
0
        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);
        }
Exemplo n.º 2
0
        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);
        }
Exemplo n.º 3
0
    /// <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);
            }
        }
    }
Exemplo n.º 4
0
    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();
            }
        }
    }
Exemplo n.º 5
0
    /// <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);
                }
            }
        }
    }
Exemplo n.º 6
0
    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;
                }
            });
        }
    }
Exemplo n.º 7
0
    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());
    }