示例#1
0
        static public void DrawVector3(DoTweenNode node)
        {
            EditorGUILayout.BeginHorizontal();
            node.fVector3 = EditorGUILayout.Vector3Field("开始值", node.fVector3);
            node.valFlagF = (DoTweenValFlag)EditorGUILayout.EnumMaskField(node.valFlagF, GUILayout.Width(60));
            EditorGUILayout.EndHorizontal();

            EditorGUILayout.BeginHorizontal();
            node.tVector3 = EditorGUILayout.Vector3Field("结束值", node.tVector3);
            node.valFlagT = (DoTweenValFlag)EditorGUILayout.EnumMaskField(node.valFlagT, GUILayout.Width(60));
            EditorGUILayout.EndHorizontal();
        }
示例#2
0
        public void Play()
        {
            for (int i = 0; i < mTweeners.Count; ++i)
            {
                Tweener node = mTweeners[i];
                if (node.IsActive())
                {
                    node.Kill();
                }
            }
            mTweeners.Clear();

            for (int j = 0; j < nodes.Count; ++j)
            {
                DoTweenNode node    = nodes[j];
                Tweener     tweener = null;

                node.parent = gameObject;

                if (node.type == DoTweenType.Position)
                {
                    Vector3 tVector3;

                    if ((node.valFlagF & DoTweenValFlag.MySelf) == 0)
                    {
                        if (node.isLocal)
                        {
                            transform.localPosition = node.fVector3;
                        }
                        else
                        {
                            transform.position = node.fVector3;
                        }
                    }

                    if ((node.valFlagT & DoTweenValFlag.MySelf) > 0)
                    {
                        if (node.isLocal)
                        {
                            tVector3 = transform.localPosition;
                        }
                        else
                        {
                            tVector3 = transform.position;
                        }
                    }
                    else
                    {
                        tVector3 = node.tVector3;
                    }

                    if (node.isLocal)
                    {
                        tweener = DOTween.To(
                            () => transform.localPosition,
                            position =>
                        {
                            transform.localPosition = position;
                        },
                            tVector3,
                            node.duration);
                    }
                    else
                    {
                        tweener = DOTween.To(
                            () => transform.position,
                            position =>
                        {
                            transform.position = position;
                        },
                            tVector3,
                            node.duration);
                    }
                }
                else if (node.type == DoTweenType.Scale)
                {
                    transform.localScale = node.fVector3;
                    tweener = transform.DOScale(node.tVector3, node.duration);
                }
                else if (node.type == DoTweenType.Rotation)
                {
                    Vector3 tVector3;

                    if ((node.valFlagF & DoTweenValFlag.MySelf) == 0)
                    {
                        if (node.isLocal)
                        {
                            transform.localRotation = Quaternion.Euler(node.fVector3);
                        }
                        else
                        {
                            transform.rotation = Quaternion.Euler(node.fVector3);
                        }
                    }

                    if ((node.valFlagT & DoTweenValFlag.MySelf) > 0)
                    {
                        if (node.isLocal)
                        {
                            tVector3 = transform.localRotation.eulerAngles;
                        }
                        else
                        {
                            tVector3 = transform.rotation.eulerAngles;
                        }
                    }
                    else
                    {
                        tVector3 = node.tVector3;
                    }

                    if (node.isLocal)
                    {
                        tweener = DOTween.To(
                            () => transform.localRotation.eulerAngles,
                            angle =>
                        {
                            transform.localRotation = Quaternion.Euler(angle);
                        },
                            tVector3,
                            node.duration);
                    }
                    else
                    {
                        tweener = DOTween.To(
                            () => transform.rotation.eulerAngles,
                            angle =>
                        {
                            transform.rotation = Quaternion.Euler(angle);
                        },
                            tVector3,
                            node.duration);
                    }
                }
                else if (node.type == DoTweenType.Color)
                {
                    Graphic graphic = GetComponent <Graphic>();
                    if (graphic != null)
                    {
                        graphic.color = node.fColor;
                        tweener       = graphic.DOColor(node.tColor, node.duration);
                    }
                }
                else if (node.type == DoTweenType.Alpha)
                {
                    Graphic[] comps = null;
                    if (node.isInfluenceChild)
                    {
                        comps = GetComponentsInChildren <Graphic>(true);
                    }
                    else
                    {
                        comps = GetComponents <Graphic>();
                    }

                    for (int i = 0; i < comps.Length; i++)
                    {
                        Color color = comps[i].color;
                        color.a        = node.fFloat;
                        comps[i].color = color;
                    }

                    if (comps != null)
                    {
                        tweener = DOTween.To(alpha =>
                        {
                            for (int i = 0; i < comps.Length; i++)
                            {
                                Color color    = comps[i].color;
                                color.a        = alpha;
                                comps[i].color = color;
                            }
                        }, node.fFloat, node.tFloat, node.duration);
                    }
                }
                else if (node.type == DoTweenType.Material)
                {
                    Graphic graphic = GetComponent <Graphic>();
                    if (graphic != null)
                    {
                        graphic.material = new Material(Shader.Find("Kadu/UI/Bloom"));
                        graphic.material.SetColor("_Color", Color.white);
                        tweener = DOTween.To(value =>
                        {
                            graphic.material.SetFloat("_Strength", value);
                        }, node.fFloat, node.tFloat, node.duration);
                    }
                }

                if (tweener != null)
                {
                    mTweeners.Add(tweener);

                    // 循环
                    tweener.SetLoops(node.loops, node.loopType);

                    // 延迟
                    tweener.SetDelay(node.delay);

                    //设置这个Tween不受Time.scale影响
                    tweener.SetUpdate(node.isIndependentUpdate);

                    //设置移动类型
                    tweener.SetEase(node.ease);

                    // 自动删除
                    tweener.SetAutoKill();

                    // 完成回调
                    tweener.OnComplete(node.OnComplete);
                }
            }
        }
示例#3
0
        public override void OnInspectorGUI()
        {
            base.OnInspectorGUI();

            GUILayout.BeginHorizontal();
            GUILayout.Space(Screen.width - 80);
            if (GUILayout.Button("添加动画", GUILayout.Width(60)))
            {
                if (mTarget.nodes == null)
                {
                    mTarget.nodes = new List <DoTweenNode>();
                }
                mTarget.nodes.Add(new DoTweenNode());
            }
            GUILayout.EndHorizontal();

            if (mTarget.nodes != null)
            {
                for (int i = 0; i < mTarget.nodes.Count; ++i)
                {
                    DoTweenNode node = mTarget.nodes[i];

                    bool isOpen = DoTweenTool.DrawHeader("anim", "anim" + i.ToString(), false, false);


                    if (isOpen)
                    {
                        EditorGUILayout.BeginHorizontal();
                        GUILayout.Space(Screen.width - 60);
                        if (GUILayout.Button("x", GUILayout.Width(40)))
                        {
                            mTarget.nodes.RemoveAt(i);
                            EditorGUILayout.EndHorizontal();
                            break;
                        }
                        EditorGUILayout.EndHorizontal();

                        GUI.changed = false;

                        node.type                = (DoTweenType)EditorGUILayout.EnumPopup("类型", node.type);
                        node.ease                = (DG.Tweening.Ease)EditorGUILayout.EnumPopup("插值类型", node.ease);
                        node.loopType            = (DG.Tweening.LoopType)EditorGUILayout.EnumPopup("循环类型", node.loopType);
                        node.loops               = EditorGUILayout.IntField("循环的次数", node.loops);
                        node.isIndependentUpdate = EditorGUILayout.Toggle("不受时间暂停影响", node.isIndependentUpdate);

                        node.delay       = EditorGUILayout.FloatField("延迟", node.delay);
                        node.duration    = EditorGUILayout.FloatField("时间", node.duration);
                        node.completer   = (GameObject)EditorGUILayout.ObjectField("完成回调者", node.completer, typeof(GameObject), true);
                        node.completeFun = EditorGUILayout.TextField("   回调函数", node.completeFun);

                        switch (node.type)
                        {
                        case DoTweenType.Position:
                        {
                            node.isLocal = EditorGUILayout.Toggle("局部坐标", node.isLocal);
                            DoTweenTool.DrawVector3(node);
                            break;
                        }

                        case DoTweenType.Scale:
                        {
                            DoTweenTool.DrawVector3(node);
                            break;
                        }

                        case DoTweenType.Rotation:
                        {
                            node.isLocal = EditorGUILayout.Toggle("局部坐标", node.isLocal);
                            DoTweenTool.DrawVector3(node);
                            break;
                        }

                        case DoTweenType.Color:
                        {
                            DoTweenTool.DrawColor(node);
                            break;
                        }

                        case DoTweenType.Alpha:
                        {
                            node.isInfluenceChild = EditorGUILayout.Toggle("影响子节点", node.isInfluenceChild);
                            DoTweenTool.DrawFloat(node);
                            break;
                        }

                        case DoTweenType.Material:
                        {
                            DoTweenTool.DrawFloat(node);
                            break;
                        }
                        }

                        if (GUI.changed)
                        {
                            EditorUtility.SetDirty(mTarget);
                        }
                    }
                }
            }
        }
示例#4
0
        //static public void DrawVector3(DoTweenNode node)
        //{
        //    node.fPositon = EditorGUILayout.Vector3Field("开始值", node.fPositon);
        //    node.tPositon = EditorGUILayout.Vector3Field("结束值", node.tPositon);
        //}

        static public void DrawColor(DoTweenNode node)
        {
            node.fColor = EditorGUILayout.ColorField("开始值", node.fColor);
            node.tColor = EditorGUILayout.ColorField("结束值", node.tColor);
        }
示例#5
0
 static public void DrawFloat(DoTweenNode node)
 {
     node.fFloat = EditorGUILayout.FloatField("开始值", node.fFloat);
     node.tFloat = EditorGUILayout.FloatField("结束值", node.tFloat);
 }