DoTween 是一款 Unity 引擎中的插件,用于处理动画效果。它提供了简单而强大的 API,使得在游戏中创建和管理动画变得更加容易。DoTween 支持许多类型的动画,包括位移、旋转、缩放等,而且可以轻松地集成到 Unity 的编辑器中。
在 Unity 中安装 DoTween 插件非常简单。你可以从 Unity Asset Store 中直接下载并导入,也可以通过 GitHub 等方式获取最新版本的 DoTween 插件,并将其导入 Unity 项目。
下载地址:DoTween GitHub
官网:DoTween
using System.Collections;
using System.Collections.Generic;
using DG.Tweening;
using UnityEngine;
public class DoTweenTest : MonoBehaviour{
public Vector3 myValue = new Vector3();
public Transform CubeTransform;
public RectTransform RectTransform;
public float myValue2 = 0;
// Start is called before the first frame update
void Start(){
// 对变量做一个动画(通过插值)
DOTween.To(() => myValue, x => myValue = x, new Vector3(0, 0, 0), 5);
// float使用方法
DOTween.To(() => myValue2, x => myValue2 = x, 10, 5);
}
// Update is called once per frame
void Update(){
CubeTransform.transform.position = myValue;
RectTransform.localPosition = myValue;
}
}
这个示例演示了如何使用DoTween插件对变量进行动画处理,通过插值的方式平滑地将myValue从当前值过渡到新的目标值,同时对myValue2进行浮点数的动画。
using System.Collections;
using System.Collections.Generic;
using DG.Tweening;
using UnityEngine;
public class DoTweenTest1 : MonoBehaviour{
public RectTransform RectTransform;
public bool isIn = false;
public void MyClick(){
// 按照时间坐标系移动
// RectTransform.DOMove(new Vector3(0, 0, 0), 0.3f);
// 按照自身坐标系移动
isIn = !isIn;
if (isIn){
RectTransform.DOPlayForward();
}
else{
RectTransform.DOPlayBackwards();
}
}
}
这个示例展示了使用扩展方法的方式,通过按钮点击事件触发RectTransform的移动动画,根据isIn的状态分别播放正向和反向的动画。
using System.Collections;
using System.Collections.Generic;
using DG.Tweening;
using UnityEngine;
public class MyCube : MonoBehaviour{
public GameObject cube;
// Start is called before the first frame update
void Start(){
// 默认位置是从当前位置运行到目标位置,加上From方法表示从目标位置移动到当前位置
// cube.transform.DOMoveX(5, 1).From();
Tweener tweener = cube.transform.DOMoveX(0, 5);
// 设置动画播放曲线
tweener.SetEase(Ease.InBack);
// 设置动画播放次数
tweener.SetLoops(2);
// 设置事件结束时调用的函数
tweener.OnStepComplete(test);
}
void test(){
Debug.Log(123);
}
}
text = GetComponent<Text>();
// 如果为空就一个字的显示,如果不为空则一个字的替换显示
text.DOText("接下来进去第二篇章,点击回车开始游戏", 5);
// 操作文本颜色
text.DOColor(Color.red, 1);
// 操作文本透明度
text.DOFade(1, 3);
这个示例展示了如何使用DoTween插件对Unity中的Text组件进行动画处理。通过DOText方法实现文字内容的变化,DOColor实现颜色的渐变,DOFade实现透明度的淡入效果。
using System.Collections;
using System.Collections.Generic;
using DG.Tweening;
using UnityEngine;
public class SequenceExample : MonoBehaviour{
public Transform target;
void Start(){
Sequence sequence = DOTween.Sequence();
// 添加一系列动画到序列中
sequence.Append(target.DOMoveX(5, 2));
sequence.Append(target.DOScale(Vector3.one * 2, 1));
sequence.Insert(1, target.DORotate(new Vector3(0, 180, 0), 1));
sequence.AppendCallback(() => Debug.Log("序列!"));
}
}
这个示例展示了如何通过DoTween插件自定义属性动画。通过获取物体的初始颜色和目标颜色,实现颜色的渐变效果。这种方式可以用于处理一些特定属性的动画效果,使其更加灵活。
using System.Collections;
using System.Collections.Generic;
using DG.Tweening;
using UnityEngine;
public class SequenceExample : MonoBehaviour{
public Transform target;
// Start is called before the first frame update
void Start(){
Sequence sequence = DOTween.Sequence();
// 添加一系列动画到序列中
sequence.Append(target.DOMoveX(5, 2));
sequence.Append(target.DOScale(Vector3.one * 2, 1));
sequence.Insert(1, target.DORotate(new Vector3(0, 180, 0), 1));
sequence.AppendCallback(() => Debug.Log("序列动画!"));
}
}
这个示例展示了如何使用DoTween插件创建序列动画。通过DOTween.Sequence()创建一个序列,然后使用Append和Insert方法添加一系列动画,实现按顺序播放的效果。在动画结束时,通过AppendCallback添加回调函数。
using System.Collections;
using System.Collections.Generic;
using DG.Tweening;
using UnityEngine;
public class EventListenerExample : MonoBehaviour{
public Transform target;
// Start is called before the first frame update
void Start(){
// 移动到目标位置,然后触发事件
target.DOMoveX(5, 2).OnComplete(() => Debug.Log("移动完成!"));
}
}
这个示例演示了如何在动画完成时监听事件。通过OnComplete方法,我们可以在动画结束时执行自定义的回调函数,这样可以更灵活地处理动画完成后的逻辑。
using System.Collections;
using System.Collections.Generic;
using DG.Tweening;
using UnityEngine;
public class PathAnimationExample : MonoBehaviour{
public Transform target;
public Transform[] pathPoints;
// Start is called before the first frame update
void Start(){
// 沿着路径移动
target.DOPath(GetPathVector3Array(), 5, PathType.CatmullRom)
.SetOptions(false)
.OnComplete(() => Debug.Log("路径动画!"));
}
Vector3[] GetPathVector3Array(){
Vector3[] path = new Vector3[pathPoints.Length];
for (int i = 0; i < pathPoints.Length; i++){
path[i] = pathPoints[i].position;
}
return path;
}
}
这个示例演示了如何使用DoTween插件创建路径动画。通过DOPath方法,我们可以沿着一系列路径点移动,使用PathType.CatmullRom表示使用Catmull-Rom样条插值算法来平滑路径。
using System.Collections;
using System.Collections.Generic;
using DG.Tweening;
using UnityEngine;
public class PhysicsAnimationExample : MonoBehaviour{
public Rigidbody rigidbody;
// Start is called before the first frame update
void Start(){
// 模拟物理效果
rigidbody.DOMoveX(5, 2).SetRelative(true)
.SetEase(Ease.OutBounce)
.OnStepComplete(() => Debug.Log("物理动画!"));
}
}
这个示例展示了如何使用DoTween插件创建物理动画。通过DOMove方法,我们可以模拟物理效果,使物体在指定时间内相对于当前位置移动到新的位置。SetRelative(true)表示相对移动,SetEase设置动画曲线,OnStepComplete添加动画步骤完成的回调函数。
using System.Collections;
using System.Collections.Generic;
using DG.Tweening;
using UnityEngine;
public class BlendAnimationExample : MonoBehaviour{
public Transform target;
// Start is called before the first frame update
void Start(){
// 混合多个动画效果
Sequence blendSequence = DOTween.Sequence();
// 旋转
Tween rotationTween = target.DORotate(new Vector3(0, 180, 0), 2);
// 移动
Tween positionTween = target.DOMoveX(5, 2);
// 缩放
Tween scaleTween = target.DOScale(Vector3.one * 2, 1);
// 将动画添加到混合序列中
blendSequence.Append(rotationTween);
blendSequence.Append(positionTween);
blendSequence.Append(scaleTween);
blendSequence.OnComplete(() => Debug.Log("混合动画!"));
}
}
这个示例展示了如何使用DoTween插件进行混合动画。通过Sequence方法创建一个序列,然后将多个动画效果按顺序添加到序列中,实现多个动画效果的混合。在示例中,我们混合了旋转、移动和缩放三个动画效果。
sing System.Collections;
using System.Collections.Generic;
using DG.Tweening;
using UnityEngine;
public class LoopAnimationExample : MonoBehaviour{
public Transform target;
// Start is called before the first frame update
void Start(){
// 循环播放动画
target.DOMoveX(5, 2).SetLoops(-1, LoopType.Yoyo)
.SetEase(Ease.Linear)
.OnStepComplete(() => Debug.Log("循环动画!"));
}
}
这个示例演示了如何使用DoTween插件创建循环动画。通过SetLoops方法设置循环次数,LoopType.Yoyo表示使用倒放的方式循环,即来回播放。在示例中,我们使物体在X轴上移动,来回循环播放。
sing System.Collections;
uusing System.Collections;
using System.Collections.Generic;
using DG.Tweening;
using UnityEngine;
public class AdvancedTweenersExample : MonoBehaviour{
public Transform target;
void Start(){
// 使用Tweeners创建更复杂的动画效果
Sequence sequence = DOTween.Sequence();
// Tweeners
Tween rotateTween = target.DORotate(new Vector3(0, 180, 0), 2);
Tween moveTween = target.DOMoveX(5, 2);
Tween scaleTween = target.DOScale(Vector3.one * 2, 1);
// 添加Tweeners到序列中
sequence.Append(rotateTween);
sequence.Append(moveTween);
sequence.Append(scaleTween);
// 设置Tweeners的顺序关系
rotateTween.SetRelative(true);
moveTween.SetRelative(true);
scaleTween.SetRelative(true);
// 设置Tweeners的插值方式
rotateTween.SetEase(Ease.OutBounce);
moveTween.SetEase(Ease.Linear);
scaleTween.SetEase(Ease.InOutExpo);
// 在动画完成时调用回调函数
sequence.OnComplete(() => Debug.Log("Tweeners动画!"));
}
}
这个示例深入使用Tweeners,通过Sequence方法创建一个序列,然后使用Tweeners(DORotate、DOMoveX、DOScale)创建更复杂的动画效果。通过设置Tweeners的顺序关系、插值方式以及在动画完成时调用回调函数,使动画效果更加灵活和高级。
using System.Collections;
using System.Collections.Generic;
using DG.Tweening;
using UnityEngine;
public class DelayAndIntervalExample : MonoBehaviour{
public Transform target;
// Start is called before the first frame update
void Start(){
// 添加动画延迟和间隔
Sequence sequence = DOTween.Sequence();
// 在动画开始前延迟1秒
sequence.AppendInterval(1);
// 旋转动画
sequence.Append(target.DORotate(new Vector3(0, 180, 0), 2));
// 移动动画
sequence.Append(target.DOMoveX(5, 2));
// 缩放动画
sequence.Append(target.DOScale(Vector3.one * 2, 1));
// 设置动画完成后的回调
sequence.OnComplete(() => Debug.Log("延迟动画!"));
}
}
这个示例演示了如何使用DoTween插件添加动画延迟和间隔。通过AppendInterval方法可以在序列中添加动画开始前的延迟时间。在示例中,我们在动画开始前延迟1秒,然后依次播放旋转、移动、缩放的动画效果。
using System.Collections;
using System.Collections.Generic;
using DG.Tweening;
using UnityEngine;
public class PauseResumeExample : MonoBehaviour{
private Sequence sequence;
// Start is called before the first frame update
void Start(){
// 创建一个动画序列
sequence = DOTween.Sequence();
// 添加旋转动画
sequence.Append(transform.DORotate(new Vector3(0, 180, 0), 2));
// 添加移动动画
sequence.Append(transform.DOMoveX(5, 2));
// 添加缩放动画
sequence.Append(transform.DOScale(Vector3.one * 2, 1));
// 设置动画完成后的回调
sequence.OnComplete(() => Debug.Log("序列动画!"));
// 启动动画序列
sequence.Play();
}
// Update is called once per frame
void Update(){
// 在按下空格键时暂停或恢复动画序列
if (Input.GetKeyDown(KeyCode.Space)){
if (sequence.IsPlaying()){
// 动画正在播放,暂停
sequence.Pause();
Debug.Log("暂停动画!");
}
else{
// 动画暂停中,恢复播放
sequence.Play();
Debug.Log("播放动画!");
}
}
}
}
这个示例展示了如何在运行时暂停和恢复动画序列。通过使用sequence.Pause()和sequence.Play()方法,我们可以在按下空格键时实现动画序列的暂停和恢复操作。这为游戏中的交互性提供了更多可能性。
using System.Collections;
using System.Collections.Generic;
using DG.Tweening;
using UnityEngine;
public class ResetReplayExample : MonoBehaviour{
private Sequence sequence;
// Start is called before the first frame update
void Start(){
// 创建一个动画序列
sequence = DOTween.Sequence();
// 添加旋转动画
sequence.Append(transform.DORotate(new Vector3(0, 180, 0), 2));
// 添加移动动画
sequence.Append(transform.DOMoveX(5, 2));
// 添加缩放动画
sequence.Append(transform.DOScale(Vector3.one * 2, 1));
// 设置动画完成后的回调
sequence.OnComplete(() => Debug.Log("序列动画!"));
}
// Update is called once per frame
void Update(){
// 在按下'R'键时重置和重新播放动画序列
if (Input.GetKeyDown(KeyCode.R)){
// 重置动画序列
sequence.Restart();
// 启动动画序列
sequence.Play();
}
}
}
这个示例演示了如何在运行时重置和重新播放动画序列。通过使用sequence.Restart()方法,我们可以在按下’R’键时重新启动动画序列,从而实现动画的重播。
using System.Collections;
using System.Collections.Generic;
using DG.Tweening;
using UnityEngine;
public class ReverseAnimationExample : MonoBehaviour{
private Tween moveTween;
// Start is called before the first frame update
void Start(){
// 创建一个移动动画
moveTween = transform.DOMoveX(5, 2);
// 设置动画完成后的回调
moveTween.OnComplete(() => Debug.Log("动画完成!"));
// 启动动画
moveTween.Play();
}
// Update is called once per frame
void Update(){
// 在按下'H'键时反向播放动画
if (Input.GetKeyDown(KeyCode.H)){
// 反向播放动画
moveTween.PlayBackwards();
}
}
}
这个示例演示了如何在运行时反向播放动画。通过使用PlayBackwards()方法,我们可以在按下’H’键时实现动画的反向播放。这对于在某些情况下需要动态切换动画方向的场景非常有用。
using System.Collections;
using System.Collections.Generic;
using DG.Tweening;
using UnityEngine;
public class CustomCallbackExample : MonoBehaviour{
public Transform target;
// Start is called before the first frame update
void Start(){
// 添加自定义回调
target.DOMoveX(5, 2)
.OnStart(() => Debug.Log(" Started!"))
.OnUpdate(() => Debug.Log(" Updated!"))
.OnComplete(() => Debug.Log("Completed!"));
}
}
这个示例展示了如何添加自定义回调函数,以在动画的不同阶段执行特定的操作。通过使用OnStart、OnUpdate、OnComplete等方法,我们可以分别在动画开始、更新和完成时执行自定义的回调函数。
using System.Collections;
using System.Collections.Generic;
using DG.Tweening;
using UnityEngine;
public class CancelDestroyExample : MonoBehaviour{
private Tween moveTween;
// Start is called before the first frame update
void Start(){
// 创建一个移动动画
moveTween = transform.DOMoveX(5, 2);
// 设置动画完成后的回调
moveTween.OnComplete(() => Debug.Log("Move Animation Completed!"));
// 启动动画
moveTween.Play();
}
// Update is called once per frame
void Update(){
// 在按下'C'键时取消或销毁动画
if (Input.GetKeyDown(KeyCode.C)){
if (moveTween.IsPlaying()){
// 动画正在播放,取消动画
moveTween.Kill();
}
else{
// 动画暂停中或未播放,销毁动画
moveTween.Destroy();
}
}
}
}
这个示例演示了如何在运行时取消或销毁Tween动画。通过使用Kill()方法可以取消正在播放的Tween动画,而使用Destroy()方法可以销毁Tween动画。
DoTween插件为Unity开发者提供了丰富的动画制作工具,通过简洁而强大的接口,开发者可以轻松实现各种炫酷的动画效果。以上示例展示了DoTween的基本用法,但插件还有更多高级功能等待你去探索,如路径动画、物理动画等。希望本文对你更深入地了解和应用DoTween插件有所帮助。