public static ImageEffect FadeOutDialog(float time)
        {
            EffectBuilder builder = new EffectBuilder();
            ImageEffect   e       = builder.UI(null)
                                    .TotalTime(time)
                                    .Init(() =>
            {
                dialog.GetComponent <UIWidget>().alpha = 1;
            })
                                    .AnimateUpdate((aim, totaltime, nowtime) =>
            {
                if (nowtime < totaltime)
                {
                    float t = Mathf.MoveTowards(dialog.GetComponent <UIWidget>().alpha, 0, 1 / totaltime * Time.fixedDeltaTime);
                    dialog.GetComponent <UIWidget>().alpha = t;
                }
            })
                                    .Finish(() =>
            {
                dialog.GetComponent <UIWidget>().alpha = 0;
                //dialoglabel.text = "";
                //namelabel.text = "";
            })
                                    .Get();

            return(e);
        }
        public static ImageEffect MoveByDepth(int depth, Vector3 final, float time)
        {
            UI2DSprite ui = null;

            if (charaPanel.transform.Find("sprite" + depth) != null)
            {
                ui = charaPanel.transform.Find("sprite" + depth).GetComponent <UI2DSprite>();
            }
            else
            {
                return(null);
            }
            EffectBuilder builder = new EffectBuilder();
            Vector3       origin  = ui.transform.localPosition;
            ImageEffect   e       = builder.UI(ui)
                                    .TotalTime(time)
                                    .Init(() => { })
                                    .AnimateUpdate((aim, totaltime, nowtime) =>
            {
                if (nowtime < totaltime)
                {
                    float x = Mathf.MoveTowards(aim.transform.localPosition.x, final.x, Math.Abs(final.x - aim.transform.localPosition.x) / (totaltime - nowtime) * Time.fixedDeltaTime);
                    float y = Mathf.MoveTowards(aim.transform.localPosition.y, final.y, Math.Abs(final.y - aim.transform.localPosition.y) / (totaltime - nowtime) * Time.fixedDeltaTime);
                    aim.transform.localPosition = new Vector3(x, y);
                }
            })
                                    .Finish(() => { })
                                    .Get();

            return(e);
        }
        /* 采用了krkr的图像处理方式
         * Depth为图像的唯一编号
         * 表示了深度,数字越大越靠前
         */
        public static ImageEffect SetSpriteByDepth(int depth, Sprite sprite)
        {
            UI2DSprite ui = null;

            if (charaPanel.transform.Find("sprite" + depth) != null)
            {
                ui = charaPanel.transform.Find("sprite" + depth).GetComponent <UI2DSprite>();
            }
            else
            {
                GameObject go = Resources.Load("Prefab/Character") as GameObject;
                go = NGUITools.AddChild(charaPanel, go);
                go.transform.name = "sprite" + depth;
                ui = go.GetComponent <UI2DSprite>();
            }
            EffectBuilder builder = new EffectBuilder();
            ImageEffect   e       = builder.UI(ui)
                                    .TotalTime(0)
                                    .Init(() =>
            {
                ui.alpha    = 0;
                ui.depth    = depth;
                ui.sprite2D = sprite;
                ui.MakePixelPerfect();
            })
                                    .AnimateUpdate((aim, totaltime, nowtime) => { }).Get();

            return(e);
        }
        public static ImageEffect FadeOutByDepth(int depth, float time)
        {
            UI2DSprite ui;

            if (charaPanel.transform.Find("sprite" + depth) != null)
            {
                ui = charaPanel.transform.Find("sprite" + depth).GetComponent <UI2DSprite>();
            }
            else
            {
                return(null);
            }
            EffectBuilder builder = new EffectBuilder();
            ImageEffect   e       = builder.UI(ui)
                                    .TotalTime(time)
                                    .Init(() => { ui.alpha = 1; })
                                    .AnimateUpdate((aim, totaltime, nowtime) =>
            {
                if (nowtime < totaltime)
                {
                    aim.alpha = Mathf.MoveTowards(aim.alpha, 0, 1 / totaltime * Time.fixedDeltaTime);
                }
            })
                                    .Finish(() => { ui.alpha = 0; })
                                    .Get();

            return(e);
        }
        public static ImageEffect ChangeSprite(UI2DSprite ui, Sprite sprite)
        {
            EffectBuilder builder = new EffectBuilder();
            ImageEffect   e       = builder.UI(ui)
                                    .TotalTime(0)
                                    .Init(() => { ui.sprite2D = sprite; })
                                    .AnimateUpdate((aim, totaltime, nowtime) => { })
                                    .Get();

            return(e);
        }
        public static ImageEffect BlockClick(bool block)
        {
            EffectBuilder builder = new EffectBuilder();
            ImageEffect   e       = builder.UI(null)
                                    .TotalTime(0)
                                    .Init(() => { click.SetActive(block); })
                                    .Finish(() => { })
                                    .AnimateUpdate((aim, totaltime, nowtime) => { })
                                    .Get();

            return(e);
        }
        public static ImageEffect FadeOut(UI2DSprite sprite, float time)
        {
            EffectBuilder builder = new EffectBuilder();
            ImageEffect   e       = builder.UI(sprite)
                                    .TotalTime(time)
                                    .Alpha(1)
                                    .AnimateUpdate((aim, totaltime, nowtime) =>
            {
                if (nowtime < totaltime)
                {
                    aim.alpha = Mathf.MoveTowards(aim.alpha, 0, 1 / totaltime * Time.fixedDeltaTime);
                }
            }).Get();

            return(e);
        }
        public static ImageEffect Move(UI2DSprite sprite, Vector3 origin, Vector3 final, float time)
        {
            EffectBuilder builder = new EffectBuilder();
            ImageEffect   e       = builder.UI(sprite)
                                    .TotalTime(time)
                                    .Init(() => { sprite.transform.position = origin; })
                                    .Finish(() => { sprite.transform.position = final; })
                                    .AnimateUpdate((aim, totaltime, nowtime) =>
            {
                if (nowtime < totaltime)
                {
                    aim.alpha = Mathf.MoveTowards(aim.alpha, 1, 1 / totaltime * Time.fixedDeltaTime);
                }
            }).Get();

            return(e);
        }
        public static ImageEffect SetDialog(bool open)
        {
            EffectBuilder builder = new EffectBuilder();
            ImageEffect   e       = builder.UI(null)
                                    .TotalTime(0)
                                    .Init(() =>
            {
                dialog.SetActive(open);
                dialog.GetComponent <UIWidget>().alpha = 0;
                //namelabel.text = "";
                //dialoglabel.text = "";
                //dialog.transform.Find("NextIcon_Sprite").gameObject.SetActive(false);
            })
                                    .AnimateUpdate((aim, totaltime, nowtime) => { })
                                    .Finish(() => { })
                                    .Get();

            return(e);
        }
        public static ImageEffect SetDefaultPostionByDepth(int depth, string pstr)
        {
            UI2DSprite ui = null;

            if (charaPanel.transform.Find("sprite" + depth) != null)
            {
                ui = charaPanel.transform.Find("sprite" + depth).GetComponent <UI2DSprite>();
            }
            else
            {
                return(null);
            }
            float x;

            switch (pstr)
            {
            case "left":
                x = -320;
                break;

            case "middle":
                x = 0;
                break;

            case "right":
                x = 320;
                break;

            default:
                x = 0;
                break;
            }
            EffectBuilder builder = new EffectBuilder();
            ImageEffect   e       = builder.UI(ui)
                                    .TotalTime(0)
                                    .Init(() =>
            {
                ui.transform.localPosition = new Vector3(x, -360 + ui.height / 2);
            })
                                    .AnimateUpdate((aim, totaltime, nowtime) => { }).Get();

            return(e);
        }
        public static ImageEffect SetPostionByDepth(int depth, Vector3 position)
        {
            UI2DSprite ui = null;

            if (charaPanel.transform.Find("sprite" + depth) != null)
            {
                ui = charaPanel.transform.Find("sprite" + depth).GetComponent <UI2DSprite>();
            }
            else
            {
                return(null);
            }
            EffectBuilder builder = new EffectBuilder();
            ImageEffect   e       = builder.UI(ui)
                                    .TotalTime(0)
                                    .Init(() =>
            {
                ui.transform.localPosition = position;
            })
                                    .AnimateUpdate((aim, totaltime, nowtime) => { }).Get();

            return(e);
        }
 public static ImageEffect ChangeByDepth(int depth, Sprite sprite)
 {
     if (charaPanel.transform.Find("sprite" + depth) == null)
     {
         return(null);
     }
     else
     {
         EffectBuilder builder = new EffectBuilder();
         UI2DSprite    ui      = charaPanel.transform.Find("sprite" + depth).GetComponent <UI2DSprite>();
         ImageEffect   e       = builder.UI(ui)
                                 .TotalTime(0)
                                 .Init(() =>
         {
             ui.sprite2D = sprite;
             ui.MakePixelPerfect();
         })
                                 .AnimateUpdate((aim, totaltime, nowtime) => { })
                                 .Finish(() => { })
                                 .Get();
         return(e);
     }
 }
 public static ImageEffect DeleteSpriteByDepth(int depth)
 {
     if (charaPanel.transform.Find("sprite" + depth) == null)
     {
         return(null);
     }
     else
     {
         EffectBuilder builder = new EffectBuilder();
         UI2DSprite    ui      = charaPanel.transform.Find("sprite" + depth).GetComponent <UI2DSprite>();
         ImageEffect   e       = builder.UI(ui)
                                 .TotalTime(0)
                                 .Init(() => {
             //if (charaPanel.transform.Find("sprite" + depth) != null)
             //if(ui!=null)
             // GameObject.Destroy(ui.transform.gameObject);
             ui.sprite2D = null;
         })
                                 .AnimateUpdate((aim, totaltime, nowtime) => { })
                                 .Finish(() => {  })
                                 .Get();
         return(e);
     }
 }