• DOTween 模仿NGUI Tween


    最近再做一个小的项目,只要使用的是DOTween 动画。 但是感到DOTween 在某些方面不如 NGUI的Twenn 比较好用 所以就模仿了一下

    在此,请各位大神指点一下 

    public class HCTweenScale :DoTweener {
    
        public Vector3 formScale;
        public Vector3 toScale;
        public float   animTime = 1f;
        Transform tr;
        Transform myTransform {
            get {
                if (tr == null)
                    tr = transform;
                return tr;
            }
            set {
                tr = value;
            }
        }
    
        Vector3 Scale {
            get{
                return myTransform.localScale;
            }
        }
        public override void PlayForward() {
            StyleFunction(formScale, toScale);
        }
        public override void PlayReverse() {
            StyleFunction(toScale, formScale);
        }
    
        void StyleFunction(Vector3 from, Vector3 to) {
            switch (style) {
                case Style.Once:
                    One(from, to);
                    break;
                case Style.Loop:
                    Loop(from, to);
                    break;
                case Style.Repeatedly:
                    Repeatedly(from, to);
                    break;
                case Style.PingPong:
                    PingPong(from, to);
                    break;
            }
        }
        void One(Vector3 from, Vector3 to) {
            myTransform.localScale = from;
            myTransform.DOScale(to, animTime).OnComplete(() => OnComplete());
        }
        void Repeatedly(Vector3 from, Vector3 to) {
            myTransform.localScale = from;
            myTransform.DOScale(to, animTime).OnComplete(() => myTransform.DOScale(from, animTime));
        }
        void Loop(Vector3 from, Vector3 to) {
            myTransform.localScale = from;
            myTransform.DOScale(to, animTime).OnComplete(() => Loop(from,to));
        }
        void PingPong(Vector3 from, Vector3 to) {
            myTransform.DOScale(to, animTime).OnComplete(() => PingPong(to, from));
        }
    
        protected override void StartValue() {
            formScale = Scale;
        }
        protected override void EndValue() {
            toScale = Scale;
        }
    }

    public class HCTweenPosition : DoTweener{
        public Vector3 Form;
        public Vector3 To;
        public float   MoveTime=1f;
        Transform my;
        Transform myTransform {
            get {
                if (my == null)
                    my = transform;
                return my;
            }
        }
        Vector3 position {
            get {
                return myTransform.position;
            }
        }
        public override void PlayForward() {
            StyleFunction(this.Form, this.To);
        }
        public override void PlayReverse() {
            StyleFunction(this.To, this.Form);
        }
        void StyleFunction(Vector3 From, Vector3 To) {
            switch (style) {
                case Style.Once:
                    One(From, To);
                    break;
                case Style.Loop:
                    Loop(From, To);
                    break;
                case Style.Repeatedly:
                    Repeatedly(From, To);
                    break;
                case Style.PingPong:
                    PingPong(From, To);
                    break;
            }
        }
        void One(Vector3 From, Vector3 To) {
            myTransform.position = From;
            myTransform.DOMove(To, MoveTime).OnComplete(() => OnComplete());
        }
        void Repeatedly(Vector3 From,Vector3 To) {
            myTransform.position = From;
            myTransform.DOMove(To, MoveTime).OnComplete(() => myTransform.DOMove(Form, MoveTime));
        }
        void Loop(Vector3 From, Vector3 To) {
            myTransform.position = From;
            myTransform.DOMove(To, MoveTime).OnComplete(() => Loop(Form, To));
        }
        void PingPong(Vector3 From, Vector3 To) {
            myTransform.DOMove(To, MoveTime).OnComplete(() => PingPong(To, From));
        }
        protected override void StartValue() {
            Form = this.position;
        }
        protected override void EndValue() {
            To = this.position;
        }
    }

    public class HCTweenAlpha :DoTweenerAlpha {
        public float StartAlpha;
        public float EndAlpha;
        public float durtion = 1f;
        tk2dBaseSprite _sprite;
        tk2dBaseSprite sprite {
            get {
                if (_sprite == null) {
                    _sprite = gameObject.GetComponent<tk2dBaseSprite>();
                }         
                return _sprite;
            }
            set {
                _sprite = value;
            }
        }
        public float GetAlpha {
            get {
                return sprite.color.a;
            }
        }
    
        bool Forward = true;
        public override void PlayForward() {
            Forward = true;
            StyleFunction(StartAlpha, EndAlpha, durtion, style);
        }
        public override void PlayReverse() {
            Forward = false;
            StyleFunction(EndAlpha, StartAlpha, durtion, style);
        }
    
        void StyleFunction(float fromAlpha, float toAlpha,float animTime, DoTweener.Style style) {
            if (sprite == null) {
                Des();
                return;
            }
          //  SetChildAlpha(fromAlpha, toAlpha, animTime, style);
            switch (style) {
                case Style.Once:
                    One(fromAlpha, toAlpha, animTime);
                    break;
                case Style.Loop:
                    Loop(fromAlpha, toAlpha, animTime);
                    break;
                case Style.Repeatedly:
                    Repeatedly(fromAlpha, toAlpha, animTime);
                    break;
                case Style.PingPong:
                    PingPong(fromAlpha, toAlpha, animTime);
                    break;
            }
        }
    
        //float notAlpha;
        //public override void SetAlpha(float startalpha, float alpha,float animTime, DoTweener.Style style) {
        //    if (notAlpha == null)
        //        notAlpha = GetAlpha;
        //    if (alpha >= notAlpha)
        //        alpha = notAlpha;
        //    if (startalpha > notAlpha)
        //        startalpha = notAlpha;
    
        //    StyleFunction(startalpha, alpha, animTime, style);
        //}
        void One(float fromAlpha, float toAlpha,float time) {
            sprite.color = new Color(sprite.color.r, sprite.color.g, sprite.color.b, fromAlpha);
            DOTween.ToAlpha(() => sprite.color, x => sprite.color = x, toAlpha, time).OnComplete(() => OnComplete());
        }
        void Repeatedly(float fromAlpha, float toAlpha, float time) {
            sprite.color = new Color(sprite.color.r, sprite.color.g, sprite.color.b, fromAlpha);
            DOTween.ToAlpha(() => sprite.color, x => sprite.color = x, toAlpha, time).OnComplete(() => DOTween.ToAlpha(() => sprite.color, x => sprite.color = x, fromAlpha, time));
        }
        void Loop(float fromAlpha, float toAlpha, float time) {
            sprite.color = new Color(sprite.color.r, sprite.color.g, sprite.color.b, fromAlpha);
            DOTween.ToAlpha(() => sprite.color, x => sprite.color = x, EndAlpha, time).OnComplete(() => Loop(fromAlpha, toAlpha, time));
        }
        void PingPong(float fromAlpha, float toAlpha, float time) {
            DOTween.ToAlpha(() => sprite.color, x => sprite.color = x, toAlpha, time).OnComplete(() => PingPong(toAlpha, fromAlpha, time));
        }
    
        protected override void StartValue() {
            if (sprite) {
                StartAlpha = sprite.color.a;
                EndAlpha = sprite.color.a;
                return;
            }     
        }
    
        void Des() {
            Destroy(GetComponent<HCTweenAlpha>(), 1f);
            HCTweenTextAlpha text = gameObject.AddComponent<HCTweenTextAlpha>();
            text.StartAlpha       = this.StartAlpha;
            text.EndAlpha         = this.EndAlpha;
            text.durtion          = this.durtion;
            text.style            = this.style;
            text.IsStartRun       = this.IsStartRun;
            if (Forward)
                text.PlayForward();
            else
                text.PlayReverse();
        
        }
    }
      tween.OnComplete = () => {
            Debug.Log("这里是 回调");
            }

    基于某些原因 twenn 的动画方式没有写 如果各位需要 请自行添加

    下面附上链接

    链接:http://pan.baidu.com/s/1c0dlWkC 密码:iaue

  • 相关阅读:
    JavaScript二进制数据序列化和反序列化
    三维变换矩阵推导笔记
    如何制作一款“有毒”的游戏
    如何使用visual studio将你的程序打包成安装包
    游戏设计模式系列(三)—— 策划变心太快?也许可以使用组合
    使用LayaAir解析xml文件
    游戏设计模式系列(二)—— 适时使用观察者模式,解耦你的代码
    游戏设计模式系列(一)—— 单线逻辑&&数据驱动,搞定最容易卡死的结算界面
    vs2010 win32程序中 sqlserver 2008 express的简单使用 (C++)
    UVALive 6529
  • 原文地址:https://www.cnblogs.com/mdrs/p/4899307.html
Copyright © 2020-2023  润新知