这边我就直接放一个标准的Dotween动画的使用demo吧。

这个案例满足应该可以完成你所想实现的几乎所有复杂动画。

void PlayTween()
{
//set tween data
float testOneTime = 1.0f;
float testTwoTime = 1.0f;
float delayTime = 1.0f;
Vector3 firstTargetPos = Vector3.one;
Vector3 secondTargetPos = Vector3.forward;
TweenCallback completeCallBack = DoEndThing;
TweenCallback oneCallBack = DoOneThing;
// play
Sequence se = DOTween.Sequence();
se.Append(mThing.transform.DOMove(Vector3.zero, testOneTime).SetEase(Ease.InOutBounce)); //增加一段动画
se.Append(mThing.transform.DOMove(Vector3.one, testTwoTime));
se.Join(mThing.transform.DOMove(Vector3.forward, testOneTime));//插入一段动画
se.AppendInterval(delayTime);//等待一段时间
se.AppendCallback(oneCallBack);//执行回调 I
se.Append(mThing.transform.DOMove(Vector3.one, testTwoTime));//再增加一段动画
//II :se.AppendCallback(()=> Debug.Log("this is tween callback")); 这是另外一种回调的写法,匿名方法的形式,就是所谓的lamdon表达式写法,具体自己去看看吧
//适用于一句话的回调这样写
//III:se.AppendCallback(()=> { Debug.Log("this is tween callback"); });这也是另外一种写法,适用于多段回调写法,
//总的来说我都不建议这样写,我建议我上述没有注释的写法。当然如果是一段话的回调,则采取II写法,不建议使用III的写法
se.OnComplete(completeCallBack); //整个动画完成之后的回调
se.Play();
} void DoOneThing()
{
Debug.Log("this is one thing to need do");
}
void DoEndThing()
{
Debug.Log("Do end call backthing");
}

我们会看到  se.Append(mThing.transform.DOMove(Vector3.zero, testOneTime).SetEase(Ease.InOutBounce)); //增加一段动画

这句是很经典的一段动画的设置。

这边额外解释一下SetEase方法,设置不同的动画播放曲线。(是先特别快,然后特别慢,还是先特别慢,然后特别快的设置)

有些同学可能不了解这个动画曲线啥意思,看英文也不太方便。直接看图,直观。

该图链接: http://robertpenner.com/easing/easing_demo.html

当然,有这个图,但是如果这些曲线还是满足不了我的话,怎么办。

DoTween 有自定义曲线。

[SerializeField]
AnimationCurve selfSetTweenLine;

点击图中线条,即可进入自定义编辑。

Append/Join 的区别

Append 是增加,就是之前的动画都播放完之后再播放。

Join 是加入,即现在当然虽然有播放的动画,但是这个动画不用等,直接也开始大家一起播放。

Play/PlayForward/PlayBackwards      SetAutoKill 理解

play 默认是SetAutoKill (true)

而如果你用playforward 则必须使用SetAutoKill (false),因为你需要再次开启,而Dotween默认SetAutoKill (true),所以必须记得设置。

如下:

 Sequence se;
// Use this for initialization
void Start () {
SetTween();
} void SetTween()
{
float testOneTime = 1.0f;
se = DOTween.Sequence();
se.Append(this.transform.DOMove(Vector3.zero * , testOneTime).SetEase(Ease.InOutBounce)); //增加一段动画
se.SetAutoKill(false);
se.Pause();
} private void Update()
{
if(Input.GetKeyDown(KeyCode.Q))
{
se.PlayForward();
}
else if(Input.GetKeyDown(KeyCode.W))
{
se.PlayBackwards();
}
}

图中,你可以尝试改变SetAutoKill为true,则只会执行一遍动画,之后的PlayBackwards不会再执行,直接被销毁了。

Restart使用  循环重复播放某种动画实现

  [SerializeField]
Image image;
Sequence imageSequence;
// Use this for initialization
void Start()
{
imageSequence = DOTween.Sequence();
imageSequence.Append(image.transform.DOScale(1.2f,5f));
imageSequence.AppendCallback(() => image.transform.localScale = Vector2.one);
imageSequence.SetAutoKill(false);
imageSequence.Pause();
} // Update is called once per frame
void Update () {
if(Input.GetKeyDown(KeyCode.Q))
{
imageSequence.Restart();
} }

  这是一个让一个图片缩放动画,受控制,只用一个Play实现。一定要 用Restart。

补充:

DotweenPath 使用方式。参考链接:http://www.bubuko.com/infodetail-2245478.html

注意:编辑 增加一个path的方法,还需要在Scene中鼠标点击+SHITFT+CTRL。 还有哈,在编译模式下,用代码指定tweenPath好像是不行的。所以,推出下面 DoPath的用法。

Tween tween = ShortcutExtension.DoPath(this.tranform,wayPoints,3,PathType.CatmulRoom)

tween.Play();

最后:DoTween基本的主要知识点就是这些了,没啥东西了,主要核心东西都讲完了。Over

Unity DoTween 动画使用案例的更多相关文章

  1. unity Dotween插件的简单介绍及示例代码

    unity里面做插值动画的插件有许多,比较常见的有itween.hotween.dotween.根据大家的反馈和实际体验来说,dotween插件在灵活性.稳定性.易用性上都十分突出.这里简单介绍下它的 ...

  2. Unity3D_(插件)DOTween动画插件

    使用DOTween动画插件来实现物体的移动动画 Learn 一.DOTween插件对变量的动画 二.控制Cube和UI面板的动画 三.动画的快捷播放方式 四.动画的前放和后放 五.From Tween ...

  3. Unity骨骼动画资源解析与优化

    一,背景 最近发现项目的动画文件有点大,不光内存大,而且文件也很大,所以从这2个方面下手处理 二,动画文件大小优化 为了优化动画文件大小,我们可以先分析下文件,Ctrl+D将动画文件从FBX拷贝出来, ...

  4. Spine学习七 - spine动画资源+ Unity Mecanim动画系统

    前面已经讲过 Spine自己动画状态机的动画融合,但是万一有哥们就是想要使用Unity的动画系统,那有没有办法呢?答案是肯定的,接下来,就说说如何实现: 1. 在project面板找打你导入的Spin ...

  5. Unity Dotween官方案例学习

    本文只涉及一些案例,具体查看 DoTween 官方文档. 一. Basics public class Basics : MonoBehaviour { public Transform redCub ...

  6. Unity经验之谈-DoTween动画结束匿名委托之巨坑

    产生问题: 成百上千个物体放在List列表里面循环,每个物体都要使用移动和移动结束事件. BUG: 动画结束之后我想隐藏该物体,结果却没有正常的隐藏,代码如下 foreach (var item in ...

  7. DoTween动画插件学习

    一.简单的变量插值运算 using System.Collections; using System.Collections.Generic; using UnityEngine; using DG. ...

  8. Unity Animator动画状态机 深入理解(一)

    接触Unity以来就已经有了Animator,Animation用的少,不过也大概理解他俩之间的一个区别于联系. 图中其实就是Animator和Animation之间的区别于联系了,啊!你肯定会告诉我 ...

  9. Unity 3D 动画帧事件

    前几天在项目开发中碰到一个这样的需求,RPG游戏中,特效和动画播放不同步的.假如主角在攻击NPC时,先实例化特效,后播放动画.动画毕竟是有一个时间长度的.等到动画播放攻击挥刀的那一瞬间时,特效可能早就 ...

随机推荐

  1. webpack自定义打包命令

    更快捷的执行打包任务 1.执行类似于node_modules/.bin/webpack这样的命令其实是比较烦人且容易出错的,不过值得庆幸的是npm可以引导任务执行, 对其进行配置后可以使用简单的npm ...

  2. MkDocs项目文档生成器

    简介 安装 我的配置 Chocolatey 简介 - Windows的包管理器 官方网址 安装 注意事项 Python 简介 安装 Pip 简介-Python的包管理器 升级 MkDocs的安装 使用 ...

  3. Axios使用说明

    vue更新到2.0之后,作者就宣告不再对vue-resource更新,而是推荐的axios,前一段时间用了一下,现在说一下它的基本用法. 首先就是引入axios,如果你使用es6,只需要安装axios ...

  4. 学习笔记-echarts x,y轴样式

    //改变坐标轴文本的样式axisLabel:{ textStyle:{ color:'#fff' }},//改变坐标轴和文本的样式axisLine:{ lineStyle:{ color:'#fff' ...

  5. BZOJ 2748: [HAOI2012]音量调节【二维dp,枚举】

    2748: [HAOI2012]音量调节 Time Limit: 3 Sec  Memory Limit: 128 MBSubmit: 2010  Solved: 1260[Submit][Statu ...

  6. HDU2689-Sort it-冒泡排序

    Sort it Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others)Total Sub ...

  7. XYZZY(spfa求最长路)

    http://acm.hdu.edu.cn/showproblem.php?pid=1317 XYZZY Time Limit: 2000/1000 MS (Java/Others)    Memor ...

  8. Sublime Text 3.0版本的傻瓜式汉化步骤

    Sublime text 3是非常好的文本编辑器,在试用过N款文本编辑器(Notepad.Notepad++.Notepad2.Programmer's notepad.EditPlus,Vim, T ...

  9. 电脑打不开网页,使用dns优化下就可以了。

    通过电脑管家dns优化下就可以了.启用114DNS

  10. myEclipse配置SVN

    方法三:直接解压      下载SVN插件:site-1.6.10.zip      解压后将其全部文件拷贝至:D:\Program Files\Genuitec\MyEclipse 8.5\drop ...