DoTween下载链接:6r7a
DoTween官网API解释:DoTween文档
下面是我对b站龙子赫赫的教学视频链接的总结整理,方便之后用到的时候查询
一、一些基础功能
Gradient gradient;
void Start()
{
//目标点 时长
transform.DOMove(Vector3.one, 3);
//旋转
transform.DORotate(new Vector3(100, 100, 100), 4);
transform.DOScale(new Vector3(3, 3, 3), 4);
//------------------------------
//震动
//运动方向和力的大小 持续时间 震动次数、频率
transform.DOPunchPosition(new Vector3(0, 1, 0), 2, 3, 0.1f);
transform.DOPunchRotation(new Vector3(100, 100, 100), 2, 3, 0.2f);
transform.DOPunchScale(new Vector3(10, 10, 10), 5, 3, 0.4f);
//------------------------------
//Shake
//持续时间 强度 频率 随机角度
transform.DOShakePosition(3, 1, 5, 80);
transform.DOShakeRotation(4, 19, 45);
//------------------------------
//
transform.DOMove(new Vector3(10, 10, 10), 5);
transform.DOMove(new Vector3(-2, -2, -2), 10);
//混合方式 最终走到(8,8,8)
transform.DOBlendableLocalMoveBy(new Vector3(10, 10, 10), 5);
transform.DOBlendableLocalMoveBy( new Vector3(-2, -2, -2), 7);
//------------------------------
//动态改变材质球颜色
Material mat = GetComponent<MeshRenderer>().material;
mat.DOColor(Color.blue, 5);
//对于Color名称不是_Color的时候指定名字 mat--Edit Sharder(在这里面进行设置)
mat.DOColor(Color.blue, "_TintColoe", 3);
//----------------------------
//透明度
//第一种方法
mat.DOColor(Color.clear, 2);
//第二种方法
mat.DOFade(0, 2);
//----------------------------
//渐变颜色
mat.DOGradientColor(gradient, 4);
//----------------------------
//mat偏移值
mat.DOOffset(new Vector2(2, 3), 2);
//-------------------------------
//混合mat
mat.DOBlendableColor(Color.red, 2);
mat.DOBlendableColor(Color.blue, 2);
}
二、相机
void Start()
{
Camera cam = GetComponent<Camera>();
//------------------------
//设置摄像机的宽高比
cam.DOAspect(1, 2);
cam.DOAspect(16 / 9, 3);
//设置摄像机颜色
cam.DOColor(Color.red, 4);
//设置相机近切面 远切面
cam.DONearClipPlane(2f, 4);
cam.DOFarClipPlane(5, 4);
//相机可视区域
cam.DOFieldOfView(5, 4);
//设置相机屏幕尺寸
cam.DORect(new Rect (0, 0, 0.5f, 0.5f), 4);
//像素
cam.DOPixelRect(new Rect(0, 0, 512, 512),4);
//相机震动
cam.DOShakePosition(4,2,5,60);
cam.DOShakeRotation(3);
}
三、Text
Text txt;
void Start()
{
txt = GetComponent<Text>();
///打字机效果
///线性 先快后慢 再快
txt.DOText("wdwewdsrwaeawdsadwerawewa", 5);
//匀速 SetEase(Ease.Linear);设置曲线形式
txt.DOText("wdwewdsrwaeawdsadwerawewa", 5).SetEase(Ease.Linear);
//-----------------------------------------
}
四、物体运动
private void Start()
{
//队列
Sequence sequence = DOTween.Sequence();
//依次执行
sequence.Append(transform.DOMove(new Vector3(5, 0, 0), 4)); //0-4
//暂停x秒钟
sequence.Append(transform.DOMove(new Vector3(0, 3, 1), 6));//9-15
//序列的插入 插入的是时间
//0秒插入 4秒结束 替换了第一个序列
sequence.Insert(0, transform.DOMove(new Vector3(-5, 0, 0), 4));
//-------------------------
//边缩放 边移动
sequence.Insert(0, transform.DOScale(new Vector3(4, 4, 4), 4));
sequence.Insert(9, transform.DOScale(Vector3.one,6));
//边缩放 边移动 另一种方法
sequence.Append(transform.DOMove(new Vector3(5, 0, 0), 4)); //0-4
sequence.Join(transform.DOScale(new Vector3(4, 4, 4), 4));
sequence.AppendInterval(5);//4-9
sequence.Append(transform.DOMove(new Vector3(0, 3, 1), 6));//9-15
sequence.Join(transform.DOScale(Vector3.one, 6));'
//----------------------------
//预添加 从上往下执行 先缩放再等待一秒 比Append先执行
sequence.Append(transform.DOMove(new Vector3(5, 0, 0), 4));
sequence.PrependInterval(5);
sequence.Prepend(transform.DOScale(Vector3.one * 5, 5));
//----------------------------
//回调 完成某件事直接执行该函数
sequence.InsertCallback(3, DoCallBack);
sequence.AppendCallback(AppCallBack);
sequence.PrependCallback(PreCallBack);
//-----------------------------------
//链式循环
transform.DOMove(new Vector3(4, 4, 4), 3).SetLoops(3, LoopType.Yoyo);
//SetLoop(-1)无限次循环
transform.DOMove(new Vector3(4, 4, 4), 3).SetLoops(-1, LoopType.Yoyo);
//另一种写法
TweenParams tp = new TweenParams();
tp.SetLoops(-1, LoopType.Yoyo);
transform.DOMove(Vector3.one * 4, 3).SetAs(tp);
//动画之后不再用 进行自行销毁
transform.DOMove(Vector3.one * 4, 4).SetAutoKill();
//From()从目标点往回走(4,4,4)->(0,0,0)
transform.DOMove(Vector3.one * 4, 4).From();
//---------------------------------------
//延时执行
transform.DOMove(Vector3.one, 2).SetDelay(4);
设置速度 DoMove(V3,4) 4不再是时间 而是基于Unity中的速度
transform.DOMove(Vector3.one * 4, 4).SetSpeedBased(true);
//------------------------------------
//设置ID 调用ID
transform.DOMove(Vector3.one * 4, 4).SetId("444");
DOTween.Play("444");
//----------------------------------
//可回收对象 用不到的时候 系统自动回收
transform.DOMove(Vector3.one * 4, 4).SetRecyclable();
//增量的使用 ,在物体原有坐标上进行移动,如果原坐标是(4,4,4) 物体会向(8,8,8)运动
transform.DOMove(Vector3.one * 4, 4).SetRelative();
//设置帧类型 Updata
transform.DOMove(Vector3.one * 4, 4).SetUpdate(UpdateType.Late);
//----------------------
//运动曲线 SetEase(Ease.InCirc);
transform.DOMove(Vector3.one * 4, 4).SetEase(Ease.InCirc);
//自定义曲线 AnimationCurve ac;
transform.DOMove(Vector3.one * 4, 4).SetEase(ac);
//-------------------------
//回调 x.OnX(函数)
transform.DOMove(Vector3.one * 4, 4).OnComplete(() =>
{
Debug.Log("OnComplete Coming!!!");
});
transform.DOMove(Vector3.one * 4, 4).OnKill(()=> {
Debug.Log("OnKill Coming!!!!");
});
transform.DOMove(Vector3.one * 4, 4).OnPlay(()=> {
Debug.Log("OnPlay Coming!!!");
});
//暂停
transform.DOMove(Vector3.one * 4, 4).OnPause(() => {
Debug.Log("OnPause Coming!!!");
});
//动画反复执行的时候 每一次完成时调用
transform.DOMove(Vector3.one * 4, 4).OnStepComplete(()=> {
Debug.Log("OnStepComplete coming!!!");
});
//动画从新播放时
transform.DOMove(Vector3.one * 4, 4).OnRewind(() => {
Debug.Log("OnRewind coming!!!");
});
}
//用unity设置曲线样式
public AnimationCurve ac;
private void PreCallBack()
{
Debug.Log("PreCallBack");
}
private void AppCallBack()
{
Debug.Log("AppCallBack coming!!!");
}
private void DoCallBack()
{
Debug.Log("CallBack Coming!!!");
}
五、动画控制
void Start()
{
transform.DOMove(Vector3.one * 4, 4);
//回到初始位置
transform.DORewind();
transform.DoSoothRewind();
transform.DOPlay();
transform.DOPause();
//从新播放
transform.DORestart();
transform.DOKill();
//翻转 先运行到(4,4,4)再回到(0,0,0)
transform.DOFlip();
//跳到一秒位置 然后播放
transform.DOGoto(1, true);
//从后往前 从前往后
transform.DOPlayForward();
transform.DOPlayBackwards();
transform.DOTogglePause();
//----------------------------------------
//DOTween的类方法 返回的是list
//找到所有暂停的动画
var list = DOTween.PausedTweens();
var list1 = DOTween.PlayingTweens();
DOTween.TweensById("xxx", true);
DOTween.TweensByTarget(transform,true);
DOTween.IsTweening(transform);
//统计所有动画
int all= DOTween.TotalPlayingTweens();
///-----------------------
//DoTween 时间操作
var tween = transform.DOMove(new Vector3(4, 4, 4), 4).SetLoops(2);
//输出动画开始时间
Debug.Log(tween.fullPosition);
//循环次数
Debug.Log(tween.CompletedLoops());
//获取时间
tween.Delay();
//获取时间 false不包含循环的时间
tween.Duration(true);
//---------------
//DoTween和携程 携程控制循环次数
twn= transform.DOMove(new Vector3(4, 4, 4), 4).SetLoops(2);
StartCoroutine(WaitFun());
}
Tween twn;
IEnumerator WaitFun()
{
//yield return twn.WaitForCompletion();
//循环几次之后执行相关的代码
yield return twn.WaitForElapsedLoops(2);
//销毁的时候开始执行
yield return twn.WaitForKill();
//Position 表示时间位置
yield return twn.WaitForPosition(2);
yield return twn.WaitForRewind();
yield return twn.WaitForStart();
yield return twn.WaitForCompletion();
}
六、路径动画
public Transform[] paths;
void Start()
{
//********************************************
//路径动画的使用方法
//使用linq方法把 数组中的所有pos 返回一个数组类型
var listPos = paths.Select(u => u.position).ToArray();
//根据path路径行走
//PathType物体行走的方式 曲线 直线
//20 平滑度
transform.DOPath(listPos, 5,PathType.CatmullRom,PathMode.Full3D,20,Color.red);
//---------------------------------------------
//路径动画SetOption的应用
transform.DOPath(listPos, 5, PathType.CatmullRom, PathMode.Full3D, 20, Color.red)
//设置 时候为封闭式路径
//AxisConstraint 锁定哪一个轴
//第二个--角度
.SetOptions(true,AxisConstraint.X,AxisConstraint.X);
//-----------------------------------------------
//SetLookAt用法
transform.DOPath(listPos, 5, PathType.CatmullRom, PathMode.Full3D, 20, Color.red)
.SetLookAt(0);
}