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

 

转载于:https://www.cnblogs.com/mdrs/p/4899307.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值