1:路径动画,给一个路径,让物体沿着路径运动,Dotween实现
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using DG.Tweening;
using System.Linq;
public class Dotween_demo : MonoBehaviour
{
public Transform[] pos;
public Transform move;
void Start()
{
//使用select需要引入命名空间using System.Linq;
var poss = pos.Select(u => u.position).ToArray();
move.DOPath(poss, 7f, PathType.CatmullRom, PathMode.Full3D).SetEase(Ease.Linear).SetOptions(true).SetLookAt(0).SetLoops(-1,LoopType.Restart);
}
}
有关参数解释:
PathType.CatmullRom(路径设置成曲线的)
PathType.Linear(路径设置成直线的)
(移动物体的lookat限制)
PathMode.Full3D
PathMode.Ignore
SetOptions(true)(是否闭合路径)
2: UIText的动画
void fun2()
{
//在5秒内显示完“abcdefghijklmn”,Text的播放动画
text.DOText("abcdefghijklmn", 5f);
}
3:动画队列的执行情况
使用dotween的动画队列执行动画,就是在一个时间内执行很多动画,按照顺序将这些动画加入到动画队列中(有些动画同一时间执行,有些动画是上一个动画执行完毕后执行)
同一时间执行两个动画,有insert和join方法,两者的区别在脚本中有写到
public Transform moveA;
public Transform moveB;
///
/// dotween队列动画
///
void fun3()
{
//A--》x移动60---2秒
//等待1秒
//A-->x移动到0,同时Bx移动-60----1秒
//B-->x移动到0,1秒
//新建一个队列
Sequence sq = DOTween.Sequence();
//A移动
sq.Append(moveA.DOLocalMoveX(60, 2f));
//等待1秒
sq.AppendInterval(1f);
//AB同时移动
sq.Append(moveA.DOLocalMoveX(0, 1f));
sq.Join(moveB.DOLocalMoveX(-60, 1f));
//B移动
sq.Append(moveB.DOLocalMoveX(0, 1f));
}
void fun4()
{
//A--》x移动60---2秒
//等待1秒
//A-->x移动到0,同时Bx移动-60----1秒
//B-->x移动到0,1秒
//新建一个队列
Sequence sq = DOTween.Sequence();
//A移动
sq.Append(moveA.DOLocalMoveX(60, 2f));
//等待1秒
sq.AppendInterval(1f);
//AB同时移动
sq.Append(moveA.DOLocalMoveX(0, 1f));
//insert方法,整个队列插入在3秒以后开始执行
sq.Insert(3,moveB.DOLocalMoveX(-60, 1f));
//B移动
sq.Append(moveB.DOLocalMoveX(0, 1f));
}
4:队列加入回调方法,两种方法,个人感觉AppendCallback比较好用一点
//队列加入回调方法,两种方法,个人感觉AppendCallback比较好用一点
void fun5()
{
Sequence sq = DOTween.Sequence();
sq.AppendInterval(1f);
sq.AppendCallback(() => {
print("第一种方法,appendCallback,在上一个动画执行完毕后执行这个");
});
sq.InsertCallback(1f, () => {
print("第二种方法:在整个队列执行到1f时,执行这个");
});
}
5:预添加方法 :Prepend
//简单使用 prepend,((prepend和Append不同之处就是,append从前往后执行,prepend是从后往前执行
void fun6()
{
Sequence sq = DOTween.Sequence();
sq.Prepend(this.transform.DOScale(1, 0.2f));
sq.PrependInterval(1f);
sq.PrependCallback(() => {
});
}