static DOTween.To(getter, setter, to, float duration) getter:lambda表达式 ()=> myValue setter:lambda表达式 (x)=> myValue = x to:最终值 duration:补间时长 例如: DOTween.To(()=> myVector, x=> myVector = x, new Vector3(3,4,8), 1); DOTween.To(()=> myFloat, x=> myFloat = x, 52, 1);
移动的方法用法相似只有两个经常使用的分别是DOMove()和DOLocalMove(),主要是对世界坐标和局部坐标区分的,固然你也能够对单个轴进行动画,好比上面的平移操做可使用DOLocalMoveX();html
旋转经常使用的就是DORotate(),DOLocalRotate()旋转三维向量
DORotateQuaternion()旋转四元数
游戏中经常使用的DOLookAt(),比本身写差值方便不少,具体参数能够查看官方例子git
public RectTransform panelTransform; private bool isIn = false; void Start() { //panelTransform.DOMove(new Vector3(0, 0, 0), 1);//让paneltransfrom从当前位置 动画到 0,0,0的位置 时间为1s (修改的世界坐标) Tweener tweener = panelTransform.DOLocalMove(new Vector3(0, 0, 0), 0.3f);//默认动画播放完成会被销毁 //Tweener对象保存这个动画的信息 每次调用do类型的方法都会建立一个tweener对象,这个对象是dotween来管理 tweener.SetAutoKill(false);// 把autokill 自动销毁设置为false tweener.Pause();//暂停动画播放 } public void OnClick() { if (isIn == false) { panelTransform.DOPlayForward();//前放 isIn = true; } else { //让panel离开屏幕 panelTransform.DOPlayBackwards();//倒放 isIn = false; } }
这个须要注意,ui和3d物体不同,他的移动是控制RectTransform,并且ui的坐标都是局部坐标,这里咱们由于dotween每次都会自动销毁,对咱们作返回很差,因此使用SetAutoKill(false)不时它销毁,可是若是放在update方法的话每次执行都会生成一个动画存放在tweener物体身上,由于不会自动销毁因此咱们须要将它放在start里面生成,而后控制动画向前播放和向后播放就能够了。
github
transform.localScale = Vector3.zero; transform.DOScale(1, 1f);
void Start () { //参数分别是震动时间和相机位移的向量,震动次数和随机方向,好比我不想让先后动,就把z轴设置为0 transform.DOShakePosition(1,new Vector3(3,3,0),10,90); }
//第一个参数 ,抖动的方向,例如我这里是从当前位置向上抖动到1的位置 //第二个参数,抖动的时间 //第三个参数,抖动的次数 //第四个参数 0-1之间的数,表明回弹的幅度, 假如为零从最高点当前位置+Vector3.up回来的时候只会回到当前位置,若是为一就会回到当前位置-Vector3.up的位置 transform.DOPunchPosition(Vector3.up, 2, 2, 0.5f);
普通UI的颜色函数
private Text text; // Use this for initialization void Start () { text = GetComponent<Text>(); //设置颜色 //text.DOColor(Color.red, 2); //设置透明度 text.DOFade(1, 3); }
3D物体咱们一般使用材质球控制颜色和透明度工具
Material ma = this.GetComponent<MeshRenderer>().material; ma.DOColor(new Color(0.5f, 0.5f, 0.5f, 1), 2);//注意当前材质的shader必须有_Color属性,若是没有或者名字不对会报错,须要给其余的赋值 //例如: ma.DOColor(new Color(0.5f, 0.5f, 0.5f, 1),"_TintColor", 2);//不知道名字的能够经过编辑shader查看
这个主要是用在两种同时须要的相同动画进行融合效果
例如
下面这种状况下dotween会忽略第一行动画效果直接执行最终的动画效果oop
transform.DOMove(new Vector3(0,1,1),2); transform.DOMove(new Vector3(1,2,0),2);
这时候就须要用到咱们的Blend动画融合,DOBlendableMoveBy()这个方法会将这两个动画的参数进行融合计算出最终的坐标当成一个动画进行融合,固然你也能够经过计算两个点的向量计算最终点的位置使用DOMove()方法进行移动.动画
transform.DOBlendableMoveBy(new Vector3(0,1,1),2); transform.DOBlendableMoveBy(new Vector3(1,2,0),2);
void Start () { transform.DOMoveX(5, 3).From(); //默认是从当前位置运行到目标位置 加上From()方法之后表示从目标位置移动到当前位置 transform.DOMoveX(5, 4).From(true); }
from方式就是和直接使用是反方向的,好比第一句代码不加from方法是想从当前位置运动到5的位置,时间三秒,加上以后就是从5运动到当前位置时间3秒,from方法里面有一个参数,默认为false就是直接从目标位置运动到当前位置,若是改成ture就是相对坐标,也就是从距离5的位置运动到目标位置,假如当前位置是1,就是从1+5也就是6的位置运动到1的位置。ui
修改SetEase()这个方法里面的Ease便可
OnComplete是动画结束须要触发的事件,能够跟在任何动画后面this
void Start () { Tweener tweener = transform.DOLocalMoveX(0, 2); tweener.SetEase(Ease.OutBounce);//动画曲线 tweener.OnComplete(OnTweenComplete);//动画结束事件 tweener.SetLoops(2);//动画循环次数 } void OnTweenComplete() { Debug.Log("动画播放完成了"); }
OnComplete();//绑定事件的函数 Onkill();//动画被销毁的时候调用 OnPlay();//动画播放的时候调用 OnPause();//动画暂停的时候调用 OnRewind();//动画被重置的时候 OnStart();//动画被播放的时候(只会调用一次)
若是想执行完第一个以后再执行第二个是不可使用两行代码直接作动画的,dotween会默认执行第二个动画,因此咱们想要再一个动画执行完成以后再执行第二个甚至第三个动画…这样就要使用OnComplete()或者队列保存动画列表挨个执行,通常队列是调用最方便的,OnComplete()在执行超过两个动画的拼接以后会出现莫名错误spa
private void SizeTween () { Sequence quence = DOTween.Sequence(); quence.Append( damageText.rectTransform.DOScale(new Vector3(1.5f,1.5f,1.5f),0.3f)); quence.AppendInterval(1);//两个动画之间的延时 quence.Append(damageText.rectTransform.DOScale(new Vector3(1, 1, 1), 1)); }
Dotween经常使用方法详解
http://www.javashuo.com/article/p-sdxskzxl-bz.html
Dotween Path 路径动画使用方法详解
http://www.javashuo.com/article/p-bzggofax-bz.html
MoveEffectTool工具Github地址
https://github.com/BlueMonk1107/MoveEffectTool
Dotween Ease效果演示地址
http://robertpenner.com/easing/easing_demo.html