您当前的位置: 首页 >  unity

莉萝爱萝莉

暂无认证

  • 7浏览

    0关注

    58博文

    0收益

  • 0浏览

    0点赞

    0打赏

    0留言

私信
关注
热门博文

Unity插件-DoTween

莉萝爱萝莉 发布时间:2021-03-15 23:57:46 ,浏览量:7

  1. 单个动画
// 缓动移动
transform.DOMove(new Vector3(x, y, 0), 0.5F).SetEase(Ease.InOutSine);
transform.DOLocalMove(new Vector3(x, y, 0), 0.5F).SetEase(Ease.InOutSine);
// 相对于原本位置的位移(offset)
transform.DOBlendableLocalMoveBy(Vector3.one, 2);
// 旋转
transform.DORotate(new Vector3(0, 0, -0), 0.5F).SetEase(Ease.InOutSine);
// 变为红色
gameObject.GetComponent().DOColor(Color.red, 2);
// 变为透明
gameObject.GetComponent().DOFade(0, 2)
// 多颜色渐变动画
// 第二个参数:Shader的颜色名称,可以在shader中Edit Shader查看名字
// 在DOColor和DOFade中同样适用
GetComponent().material.DOGradientColor(Gradient, "_Color", 2);
// 四元向量(如颜色)修改动画
GetComponent().material.DOVector(Color.blue, "_Color", 2);
  1. 连续动画
// 新建动画集
Sequence se = DOTween.Sequence();
// 添加动画
se.Append(Tween);
// 添加动画,该动画会与该行之上的Append一起执行
se.Join(Tween);
// 插入动画(秒)
se.Insert(0, Tween);
// 等待
se.AppendInterval(2)
// 调用函数
se.AppendCallback(oneCallBack)
// 某个时间点调用函数
se.InsertCallback(2, oneCallBack)
// 开始
se.Play();
// 暂停
se.Pause();       
// 在开始动画前预运行
se.PrependInterval();
se.PrependCallback();
se.Prepend();
  1. SetXXX()设置参数

    1. SetEase 设置运动曲线
    可用入参描述EaseEase函数AnimationCurve定制曲线
    1. SetLoops 设置动画循环次数,-1为无限循环。可加入入参 LoopType 设定循环方式
    LoopType类型描述Yoyo正播之后倒播Incremental重播时不重置位置Restart重播时重置位置
    1. SetDelay 设置等待时间
    2. SetAutoKill 是否自动回收
    3. SetId 设置ID
    DOTween.Pause(ID);// 暂停指定ID
    
    1. SetRelative 设置向量不是目标位置。而是偏移的大小
    2. SetUpdate 设置更新类型,是否不受Time.timeScale影响
    SetUpdate(UpdateType.Normal, true);
    
    1. SetLink将tween与对象关联,一但对象被清除,dotween将停止(或给到枚举的一种)。
  2. DOTween.To万能动画

Vector3 v3;
DOTween.To(() => v3, x => v3 = x, new Vector3(10, 10, 10), 10F);
  1. 动画的倒播 想要倒播动画,需要设置动画对象的 SetAutoKill(false),然后运行 DOPlayBackwards()。 示例:
public Transform obj;
public bool flag;
private void Start()
{
    // 新建动画
    Tweener tweener = obj.DOMove(new Vector3(1, 1, 1), 1).SetEase(Ease.InBack);
    // 不会自动销毁
    tweener.SetAutoKill(false);
    // 先不播放这个动画
    tweener.Pause();
    // 播放一次
    // obj.DOPlayForward();
}
public void Click()
{
    if (flag)
    {
        // 正播
        obj.DOPlayForward();
    }
    else
    {
        // 反播
        obj.DOPlayBackwards();
    }
    flag = !flag;
}
  1. From动画 为DoTween动画后追加一个From(),来让动画变成从目标坐标移动到当前坐标 From()存在入参,如果传入true,那么动画的坐标从世界坐标改为相对坐标 例:
obj.DOMove(new Vector3(1, 1, 1), 1).From();
  1. OnComplete、OnStart回调 OnComplete()可以让动画在播放结束时,添加一个额外的回调函数 OnStart()可以让动画在播放开始时,添加一个额外的回调函数 例:
int value = 2;
obj.DOLocalMove(new Vector3(1, 1, 1), 1).OnComplete(() =>
{
    Debug.Log(value);
});

其他的还有onKillOnStart(第一次)、onPlay(第一次和暂停结束后)、onPauseonRewind(重新播放)

  1. DOText()文字动画 为文字添加逐一显示的动画 例:
txt.DOText("大家好我爱你们!", 1, false, ScrambleMode.All);
  1. DOText()文字动画 为文字添加逐一显示的动画 例:
txt.DOText("大家好我爱你们!", 1, false, ScrambleMode.All);
// 时间,振幅,频率,振动转向范围, 位移为整数, 是否采用缓动动画
obj.DOShakePosition(2, new Vector3(1, 1, 0), 10, 90, false, true);
  1. DOPunchPosition()冲击动画 让物体向一个方向冲击出去然后反弹回来。
 // 冲击 -> 方向、持续时间、次数(频率)、反弹超出距离
obj.DOPunchPosition(new Vector3(0, 1, 0), 2, 2, 0.15f);
  1. 摄像机动画
Camera camera = Camera.main;

// 修改宽高比(改宽度)
camera.DOAspect(0.5f, 2);

// 修改背景颜色
camera.DOColor(Color.green, 2);

// 修改摄像机近切面和远切面的值
camera.DONearClipPlane(0.5f, 2);
camera.DOFarClipPlane(0.5f, 2);

// 透视模式 摄像机视野
camera.DOFieldOfView(0.5f, 2);

// 正交模式 摄像机大小
camera.DOOrthoSize(0.5f, 2);

// 摄像机镜头在界面中显示的位置与大小
camera.DORect(new Rect(.1f, .2f, .3f, .4f), 2);

// 时间,振幅,频率,振动转向范围, 是否采用缓动动画
camera.DOShakePosition(2, new Vector3(1, 1, 0), 10, 90, false);
  1. 控制函数
// 逆播回到原位置
transform.DOSmoothRewind();
// 维持当前速度回到原位置
transform.DORewind();
// 播放
transform.DOPlay();
// 暂停
transform.DOPause();
// 切换暂停和播放的状态
transform.DOTogglePause();
// 跳转时间点、跳转后是否继续播放
transform.DOGoto(0.2f, true);
// 倒播
transform.DOPlayBackwards();
  1. 获取动画
// 获取所有播放的动画
var list = DOTween.PlayingTweens();
// 获取所有暂停的动画
list = DOTween.PausedTweens();
// 根据ID获取动画
list = DOTween.TweensById("tMove");
// 根据对象获取动画,是否仅在其播放时候获取到
list = DOTween.TweensByTarget(transform, true);
  1. 获取数据
var tweener = transform.DOMove(Vector3.zero, 2).SetLoops(3);

// 设置动画播放的时间点
tweener.fullPosition = 0;
// 动画循环的次数
Debug.Log( tweener.CompletedLoops() );
// 动画播放时间,如果循环是否累计播放时间
Debug.Log( tweener.Elapsed(true) );
// 动画播放的百分比
Debug.Log( tweener.ElapsedDirectionalPercentage() );
// 包括循环、动画播放的百分比
Debug.Log( tweener.ElapsedPercentage() );
// 判断动画是否反向
Debug.Log( tweener.IsBackwards() );
// 判断动画是否活动
Debug.Log( tweener.IsActive() );
// 判断动画是否完成
Debug.Log( tweener.IsComplete() );
// 判断动画是否初始化
Debug.Log( tweener.IsComplete() );
// 判断动画是否正在播放
Debug.Log( tweener.IsPlaying() );
// 判断动画循环次数
Debug.Log( tweener.Loops() );
  1. 携程
Tweener tweener;
void Start()
{
    tweener = transform.DOMove(Vector3.zero, 2).SetLoops(3);
    StartCoroutine(Wait());
}

IEnumerator Wait()
{
    yield return tweener.WaitForElapsedLoops(2);
    Debug.Log("循环了两次");
}

IEnumerator Wait()
{

    yield return tweener.WaitForPosition(3);
    Debug.Log("过了3秒");
}
  1. 路径
public Transform[] pointList;
void Start()
{
    Vector3[] positionList = new Vector3[pointList.Length];
    for (int i = 0; i 路径后方(1f)
        .SetLookAt(0);
}
关注
打赏
1663903574
查看更多评论
立即登录/注册

微信扫码登录

0.1111s