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时,先实例化特效,后播放动画.动画毕竟是有一个时间长度的.等到动画播放攻击挥刀的那一瞬间时,特效可能早就 ...
随机推荐
- MVVM 框架解析之双向绑定
更好的阅读体验,点击 原文地址 MVVM 框架 近年来前端一个明显的开发趋势就是架构从传统的 MVC 模式向 MVVM 模式迁移.在传统的 MVC 下,当前前端和后端发生数据交互后会刷新整个页面,从而 ...
- [bzoj1731] [Usaco2005 dec]Layout 排队布局
差分约束系统...因为题目要求的是1和n的最大距离所以这题就跑最长路.. 对于互相反感的牛(i与j互相反感,彼此距离至少为len,i<j),就有dis[j]-dis[i]>=len.就加一 ...
- 从parcel.js打包出错,到拥抱nvm
去年年底发布的parcel.js在年底可谓是火了一把,短短一个多月的时间在GitHub热门排行榜上名列前茅.因其几乎零配置的易用性,相比Webpack的复杂配置收获了大量关注及好评,甚至有人预言未来大 ...
- FineReport调用存储过程
"总结一下本人在项目中遇到的问题,如何在数据库表名未知且作为一种查询条件的情况下查询出数据集,仅能通过FineReport+Oracle实现. 首先分析这个问题的条件和要求: 条件:只有一个 ...
- POJ 1422 Air Raid
题目链接: http://poj.org/problem?id=1422 Description Consider a town where all the streets are one-way a ...
- Mybatis中是否需要依赖配置文件的名称要和mapper接口的名称一致 params错误
一:当核心配置文件mapper标签下以resource形式指向依赖配置文件时,不需要 这样就可以加载到其相应的依赖配置文件通过namespace找到其相应的方法 二:如果mapper标签下以packa ...
- Java客户端API
添加依赖 <dependency> <groupId>org.apache.zookeeper</groupId> <artifactId>zookee ...
- PHP截取中英文字符串
//如果字符串长度超过10,则截取并以省略号结尾 function sub($str){ $str=(string)$str; if( mb_strlen($str,'utf-8') >10){ ...
- 关于iconfont字体图标的使用
今天用iconfont遇到了字体图标的使用问题.关于使用字体图标的方式在这里有介绍三种方式(css和js的引入和平时一样) 首先你要分清是用单个字体图标icon,还是多个字体图标icon 关于使用代码 ...
- ngRx 官方示例分析 - 1. 介绍
ngRx 的官方示例演示了在具体的场景中,如何使用 ngRx 管理应用的状态. 示例介绍 示例允许用户通过查询 google 的 book API 来查询图书,并保存自己的精选书籍列表. 菜单有两 ...