Unity DoTween 动画使用案例
这边我就直接放一个标准的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 动画使用案例的更多相关文章
- unity Dotween插件的简单介绍及示例代码
unity里面做插值动画的插件有许多,比较常见的有itween.hotween.dotween.根据大家的反馈和实际体验来说,dotween插件在灵活性.稳定性.易用性上都十分突出.这里简单介绍下它的 ...
- Unity3D_(插件)DOTween动画插件
使用DOTween动画插件来实现物体的移动动画 Learn 一.DOTween插件对变量的动画 二.控制Cube和UI面板的动画 三.动画的快捷播放方式 四.动画的前放和后放 五.From Tween ...
- Unity骨骼动画资源解析与优化
一,背景 最近发现项目的动画文件有点大,不光内存大,而且文件也很大,所以从这2个方面下手处理 二,动画文件大小优化 为了优化动画文件大小,我们可以先分析下文件,Ctrl+D将动画文件从FBX拷贝出来, ...
- Spine学习七 - spine动画资源+ Unity Mecanim动画系统
前面已经讲过 Spine自己动画状态机的动画融合,但是万一有哥们就是想要使用Unity的动画系统,那有没有办法呢?答案是肯定的,接下来,就说说如何实现: 1. 在project面板找打你导入的Spin ...
- Unity Dotween官方案例学习
本文只涉及一些案例,具体查看 DoTween 官方文档. 一. Basics public class Basics : MonoBehaviour { public Transform redCub ...
- Unity经验之谈-DoTween动画结束匿名委托之巨坑
产生问题: 成百上千个物体放在List列表里面循环,每个物体都要使用移动和移动结束事件. BUG: 动画结束之后我想隐藏该物体,结果却没有正常的隐藏,代码如下 foreach (var item in ...
- DoTween动画插件学习
一.简单的变量插值运算 using System.Collections; using System.Collections.Generic; using UnityEngine; using DG. ...
- Unity Animator动画状态机 深入理解(一)
接触Unity以来就已经有了Animator,Animation用的少,不过也大概理解他俩之间的一个区别于联系. 图中其实就是Animator和Animation之间的区别于联系了,啊!你肯定会告诉我 ...
- Unity 3D 动画帧事件
前几天在项目开发中碰到一个这样的需求,RPG游戏中,特效和动画播放不同步的.假如主角在攻击NPC时,先实例化特效,后播放动画.动画毕竟是有一个时间长度的.等到动画播放攻击挥刀的那一瞬间时,特效可能早就 ...
随机推荐
- metasploit魔鬼训练营 (安全漏洞生命周期)
1,前期 渗透测试工程师在挖掘0day的出来的 2,前中期 在一个密封的团体里,互相交流,利用漏洞带来的价值和,金钱 3,中期 安全漏洞被披露!!黑客们快速掌握该漏洞 4,中后期 漏洞被制作成更为简单 ...
- BZOJ3916: [Baltic2014]friends
题目:http://www.lydsy.com/JudgeOnline/problem.php?id=3916 复习一下hash(然后被傻叉错误卡了半天TAT... 取出一个字串:h[r]-h[l-1 ...
- hdu3076—概率dp
hdu3076-概率dp 标签 : 概率dp 题目链接 题意: 2个人分别有AB的血数,轮流扔骰子,数小的自减一血,平的不变,谁先到减0, 谁输,问A赢的概率. 题解: dp[i][j]表示的是第一个 ...
- Matrix Chain Multiplication(表达式求值用栈操作)
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1082 Matrix Chain Multiplication Time Limit: 2000/100 ...
- day1 基础
1.python 简介 一.python简介 python的创始人为吉多·范罗苏姆(Guido van Rossum).1989年的圣诞节期间,吉多·范罗苏姆为了在阿姆斯特丹打发时间,决心开发一个新的 ...
- Centos7网络配置-转载
一. 查看网络地址: centos7取消了ifconfig命令,使用ip addr命令查看IP地址 二.配置网络 用VirtualBox安装的CentOS7,安装完成后,发现无法上网,于是到网上查了一 ...
- mysql按照天统计报表,当天没有数据,填0
1.问题复现: 按照天数统计每天的总数,如果其中有几天没有数据,那么group by 返回会忽略那几天,如何填充0?如下图,统计的10-3~10-10 7天的数据,其中只有8号和10号有数据,这样返回 ...
- block的修饰词为什么选用copy
想必很多开发人员知道一般用copy修饰block,接下来就讲解为什么需要用copy,甚至会讲到其实用strong修饰block也是可以的 在 Objective-C 语言中,一共有 3 种类型的 bl ...
- HTTP协议简介
一.简介 HTTP(HyperText Transfer Protocol, 超文本传输协议) 是访问互联网使用的核心通信协议,也是所有web应用程序使用的通信协议.消息模型:客户端发送请求消息,服务 ...
- The most interesting feature of iPhone X - FaceID
No doubt everybody knows that iPhone 8 & iPhone X appear on the market. A feature called FaceID ...