zoukankan      html  css  js  c++  java
  • Unity---DOTween插件学习(1)---Transform、Material、Camera、Text、Sequence

    本文及系列参考于Andy老师的DOTween系列
    欢迎大家关注Andy老师

    介绍
    在Unity Asset Store上搜索DOTween下载免费版。
    Pro收费版就比免费版多了可视化功能,作用并不大。

    添加引用 Using DG.Tweening;

    DO开头的方法:设置动画的方法
    Set开头的方法:设置动画属性的方法
    On开头的方法:设置动画的回调函数

    1、Transform方法

    Unity中添加一个Cube,并挂载这个脚本

    Position

    transform.DOMove(Vector3.one, 2);  //1.要移动的目标位置,2.移动的时间s
    transform.DOMoveX(1, 2);  //只控制X轴方向上的移动
    transform.DOLocalMove();  //改变局部坐标
    

    Rotate

    transform.DORotate(new Vector3(0,90,0), 2);  //旋转
    transform.DOLocalRotate();  
    transform.DORotateQuaternion(new Quaternion(0.1f, 0.1f, 0.1f, 0.1f), 2);   //四元数旋转
    transform.DOLookAt(Vector3.one, 2); //Z轴正方向指向目标
    

    Scale

    transform.DOScale(Vector3.one * 2, 2);  //缩放到目标值
    transform.DOScaleX(3, 2);  //缩放比例
    

    Punch:类似弹跳功能

    //参数1.punch 运动的方向和力的大小   
    //参数2.duration 持续时间
    //参数3.vibrato 震动的次数
    //参数4.elascity 0-1的数,越大往反方向运动越多
    transform.DOPunchPosition(new Vector3(0, 1, 0), 2, 5, 0.5f);
    transform.DOPunchRotation();
    transform.DOPunchScale();
    

    Shake:左右乱震的效果

    //参数1.持续时间   
    //参数2.方向的力大小   
    //参数3.震动次数   
    //参数4.震动角度范围   
    //参数5.是否淡入淡出
    transform.DOShakePosition(2, Vector3.one, 10, 90);
    transform.DOShakeRotation();
    transform.DOShakeScale();
    

    Blend:混合动画

    //普通情况
    transform.DOMove(Vector3.one, 2);
    transform.DOMove(Vector3.one*2, 2);
    //第二个会覆盖第一个方法,物体运动到2,2,2
    
    
    //Blend 混合
    //DOBlendableMoveBy方法有两个特点
    //1.允许多个同时执行
    transform.DOBlendableMoveBy(new Vector3(1, 1, 1), 1);
    transform.DOBlendableMoveBy(new Vector3(-1, 0, 0), 1);
    //假设其实点为(0,0,0),最后动画停止时的坐标就是(0,1,1)
    
    //2.它是增量动画
    transform.DOBlendableMoveBy(new Vector3(1, 1, 1), 1);
    //假设其实点为(1,1,1),最后动画停止时的坐标就是(2,2,2),它的参数不是目标点,而是要移动的量
    

    2、Material方法

    Unity中添加一个Material,并挂载这个脚本

    改变颜色

    material.DOColor(Color.red,"_TintColor", 2);  
    //参数2默认 改变shader中_Color的值,但如果没有这个属性,再改变就会报错。
    //所以用之前看一下Color的名字是不是 _Color
    

    改变透明度alpha

    material.DOFade(0,"_TintColor", 2);
    //1.透明度   2.color属性名   3.时间
    

    材质颜色渐变

    //颜色渐变,但是并没有改变
    //可以直接在属性脚本中设置Gradient的内容
    public Gradient gradient;  //渐变编辑器
    		material.DOGradientColor(gradient, "_TintColor", 2);
    

    渐变编辑器

    改变材质offect的值

    material.DOOffset();  //类似用多个贴图实现动画的功能,但一般不怎么会用这个方法
    

    改变提供的shader属性的名称对应的Vector4值

    material.DOVector(Color.clear,"_TintColor",2);
    

    材质颜色混合(和位置混合道理相同)

    material.DOColor(Color.red,"_TintColor",2);  
    material.DOColor(Color.yellow, "_TintColor",2);  //第二个会覆盖第一个
    
    material.DOBlendableColor(Color.red, "_TintColor", 2);
    material.DOBlendableColor(Color.yellow, "_TintColor", 2); //混合
    

    3、Camera方法

    Unity中添加一个Camera,并挂载这个脚本

    改变屏幕视角宽高比

    camera.DOAspect(0.5f,2);  //1.相机的宽/高
    

    改变相机background参数的颜色

    camera.DOColor(Color.red, 2);
    

    改变相机近切面的值

    camera.DONearClipPlane(200, 2);
    

    改变相机远切面的值

    camera.DOFarClipPlane(2000, 2);
    

    改变相机file of view(fov)的值

    camera.DOFieldOfView(30, 2);
    

    改变相机正交模式下size的大小

    camera.DOOrthoSize(10, 2);
    

    相机震动(比如fps游戏,被雷炸到后视角的晃动)

    //参数1.持续时间  
    //参数2.力量:实际就是震动的幅度,可以理解成相机施加的力的大小 使用Vector3可以选择每个轴向不同的强度
    //参数3.震动:震动次数
    //参数4.随机性:改变震动方向的随机值(大小:0~180)
    //参数5.淡出:就是运动最后是否缓慢移动回到原本位置
    camera.DOShakePosition(1, 10, 10, 30, false);
    

    对应Viewport Rect中的X,Y,W,H

    camera.DOPixelRect(new Rect(100f, 0f, 500f, 500f), 2);
    

    和上个一样,但为百分比方式

    camera.DORect(new Rect(0.5f, 0.5f, 0.5f, 0.5f), 2);
    

    利用这个方法创建有4个视角的相机
    1.创建四个相机,w、h都改为0.5
    2.调整x、y位置使四个相机各自位于一角

    4、Text方法

    Unity中添加一个Camera,并挂载这个脚本

    颜色

    text.DOColor(Color.black, 2);
    

    透明度

    text.DOFade(0, 2);
    

    混合颜色

    text.DOBlendableColor(Color.black, 2);
    

    类似galgame对话框中字体缓慢的出现

    text.DOText("Hello Wrold", 3); 
    text.DOText("Hello Wrold", 3).SetEase(Ease.Linear);  //匀速
    

    5、Sequence队列

    Unity中添加一个Cube,并挂载这个脚本

    添加动画和添加延时

    //利用队列两个DOMove方法就不会覆盖了,会一个一个的执行
    quence.Append(transform.DOMove(Vector3.one,2)); //0-2
    quence.AppendInterval(1); //添加延时,隔1s执行下一个  //2-3
    quence.Append(transform.DOMove(-Vector3.one,2));  //3-5
    

    按时间点插入动画

    //把动画插入到某个位置,但并不会妨碍队列中原来的动画运动
    //比如插入这个1s的动画,第0s时开始这个动画覆盖了刚开始的动画,第1s开始又开始执行原队列中的动画
    quence.Insert(0, transform.DOMove(-Vector3.one, 1));  //0-1
    

    加入动画Join

    quence.Append(transform.DOMove(Vector3.one,2));
    quence.Join(transform.DOScale(Vector3.one * 2,2));
    //Join会加入和当前正在执行的动画一起执行
    quence.Append(transform.DOMove(-Vector3.one,2)); 
    quence.Join(transform.DOScale(Vector3.one * 2, 2));
    

    预添加动画

    quence.Append(transform.DOMove(Vector3.one,2));
    //预添加动画
    //预添加的动画和正常添加执行是反的,后添加的先执行
    quence.PrependInterval(1);  //预添加的间隔
    quence.Prepend(transform.DOMove(-Vector3.one * 2, 2));
    //先执行PrependInterval,再执行Prepend,再执行Append
    

    添加回调函数:

    private void Start()
    {
         Sequence quence = DOTween.Sequence();
    
         quence.Append(transform.DOMove(Vector3.one,2));
         //写在某个队列后,在执行完这个方法就会调用回调函数
         quence.AppendCallback(InsertCallBack);
    
       //在规定时间点插入回调函数
       quence.InsertCallback(1, InsertCallBack);
    }
    
    private void InsertCallBack()
    {
       Debug.Log("回调一次");
    }
    
  • 相关阅读:
    Arpa's weak amphitheater and Mehrdad's valuable Hoses
    Arpa's loud Owf and Mehrdad's evil plan
    穷游中国在统题
    2016 ACM Amman Collegiate Programming Contest D Rectangles
    区间求和
    Redis 连接池的问题
    eBay 使用ReviseInventoryStatusCall调整库存和价格
    eBay Notification介绍
    Quartz.Net 配置模板范例
    Quartz.net misfire实践
  • 原文地址:https://www.cnblogs.com/Fflyqaq/p/10861568.html
Copyright © 2011-2022 走看看