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时,先实例化特效,后播放动画.动画毕竟是有一个时间长度的.等到动画播放攻击挥刀的那一瞬间时,特效可能早就 ...
随机推荐
- Mac搭建cocos2dx+Android studio开发环境以及AnySDK的集成
配置环境: mac osx 10.12.6 cocos2dx 3.14 Android studio 2.3 目标: 在mac上配置cocos Android开发环境,接入AnySDK 配置: 1.安 ...
- makefile在编译的过程中出现“except class name”
今天写了部分代码,在添加到项目中后就那些编译,出现问题如下: logistic_regression_layer.h::: error: expected class name public Laye ...
- sqlalchemy-数据库操作
import datetime from sqlalchemy import create_engine from sqlalchemy.ext.declarative import declarat ...
- MySQL常用查询语句汇总(不定时更新)
在这篇文章中我会通过一些例子来介绍日常编程中常用的SQL语句 目录: ## 1.数据库的建立 ## 1.数据库的建立 实例将ER图的形式给出: 由此转换的4个关系模式: ...
- Java异常(输出[D@139a55问题)
简单给出一段代码说明问题: public class Main { public static void main(String[] args) { double a[]={1,4,3,2}; Sys ...
- Gym 101673F Keeping On Track
原题传送门 题意:给定一颗n+1(n≤10000)个结点的树(当然有n条边辣),定义一个结点为critical,当且仅当除去这个点及与其相连的边后,所有不相连的结点对数量最多.现在保证有且仅有一个结点 ...
- 新安装的soapui启动时报错及解决方法
今天新安装了soapui准备测试一下接口,结果安装成功后启动时报错:The JVM could not be started. The maximum heap size (-Xmx) might b ...
- 使用python写天气预告
先去YY天气注册一个账号,然后就能用API了 http://www.yytianqi.com/ # encoding=utf-8import urllib.requestimport jsonimpo ...
- CSS position: absolute、relative定位问题详解
CSS2.0 HandBook上的解释: 设置此属性值为 absolute 会将对象拖离出正常的文档流绝对定位,而不考虑它周围内容的布局.假如其他具有不同 z-index 属性的对象已经占据了给定的 ...
- Codeforces 714A Meeting of Old Friends
A. Meeting of Old Friends time limit per test:1 second memory limit per test:256 megabytes input:sta ...