Unity

您所在的位置:网站首页 dotween插件在运动过程中中断 Unity

Unity

2023-07-06 02:58| 来源: 网络整理| 查看: 265

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

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

添加引用 Using DG.Tweening;

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

目录1、Transform方法2、Material方法3、Camera方法4、Text方法5、Sequence队列

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("回调一次"); }


【本文地址】


今日新闻


推荐新闻


CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3