官网:http://dotween.demigiant.com/
动画的基本设置
DOTween.defaultAutoKill:(全局操作) 当该值为真时,之后创建的动画当其播放完毕之后会自动被销毁。
DOTween.defaultAutoPlay:(全局操作) 当该值为真时,之后创建的动画会自动播放。
DOTween.defaultEaseType:(全局操作) 该值为创建动画时候默认的动画曲线。
DOTween.defaultLoopType:(全局操作) 该值为创建动画时候默认的循环模式。
tweener.SetAs():(局部操作) 参数为Tween或者TweenParams.用于设置该动画相关属性。
tweener.SetAutoKill():(局部操作) 参数为true或者false.用于设置该动画是否自动销毁。
tweener.SetId():(局部操作) 参数为obj.用于设置该动画id。
tweener.SetLoop():(局部操作)参数为float&LoopType.用于设置该动画循环次数和循环类型,次数为-1表示无限循环。 5.动画的播放操作
tweener.From():参数为true或者false。表示运动为相对运动还是绝对运动。并且动画效果为tweener的逆动画
tweener.Pause():动画播放暂停。
tweener.Play():动画继续播放。
tweener.Flip():动画播放中执行,动画原轨迹运动到起始点,当动画回到起始状态时动画结束。
tweener.Complete():动画播放中执行,物体立即运动到动画末尾状态,动画结束。
tweener.Goto():参数为float,表示动画立即进入到时间为t时候的状态。
tweener.PlayForward():动画顺序播放。
tweener.PlayBackwards():动画倒序播放。
tweener.TogglePause():
暂停\播放,如果动画处于播放状态就暂停,反之就播放
tweener.ReStart():动画重新开始播放。
tweener.Kill():立即销毁该动画。
6.动画的回调函数
tweener.OnComplete():动画结束时触发。
tweener.OnPlay():动画开始播放时触发。
tweener.OnStart():动画被创建时触发。
tweener.OnKill():动画被销毁时触发。
选取了几个常用的,至于其余的可以查看DOTween的官网介绍。
//十秒内X,Y,Z 局部坐标(localPosition)移动到 10,10,10 位置
//transform.DOBlendableLocalMoveBy(new Vector3(10, 10, 10), 10);
//十秒内 X,Y,Z 方向的局部旋转(localPosition),转动到 30,30,30
//transform.DOBlendableLocalRotateBy(new Vector3(30, 30, 30), 10);
//十秒内X,Y,Z坐标移动到 自身坐标 加 new Vector3( 10,10,10) 位置 原始 坐标 3,3,3,移动后 13,13,13
//transform.DOBlendableMoveBy(new Vector3(10, 10, 10), 10);
//十秒内X,Y,Z自身旋转到 30,30,30(有父物体的相对于父物体)
//transform.DOBlendableRotateBy(new Vector3(30, 30, 30), 10);
//十秒内 自身X,Y,Z方向的比例 加 3,3,3如原始比例 2,1,1 变化后5,4,4
//transform.DOBlendableScaleBy(new Vector3(10, 10, 10), 10);
//执行该方法,变化立即结束,且完成移动
//transform.DOComplete();
//在变化过程中执行该方法,则物体慢慢的变回原样,如果变化已经完成,该方法无效
//transform.DOFlip();
// 变化过程中执行该方法,则物体变化到 第二秒 时该物体的位置、比例等
//transform.DOGoto(2);
//十秒内 弹跳 3次
//transform.DOJump(new Vector3(10, 10, 10), 3, 10);
//停止掉当前的变化
//transform.DOKill();
// 十秒内 弹跳 3次, 局部坐标最终变化为 10, 0, 10
//transform.DOLocalJump(new Vector3(10, 10, 10), 3, 10);
// 5 秒内, 局部坐标变化到 10,10,10
//transform.DOLocalMove(new Vector3(10, 10, 10), 5);
// 10 秒内 X 局部坐标变换到 5
//transform.DOLocalMoveX(5, 10);
// 10 秒内 Y 局部坐标变化到 5
//transform.DOLocalMoveY(5, 10);
//10 秒内 Z 局部坐标变化到 5
//transform.DOLocalMoveZ(5, 10);
//transform.DOLocalPath();
//5 秒内 局部旋转变化到 10,10, 10
//transform.DOLocalRotate(new Vector3(10, 10, 10), 5);
// 自身朝向 坐标(10,10,10)
//transform.DOLookAt(new Vector3(10, 10, 10), 5);
// 5 秒内 移动到 坐标 (10,10,10)
//transform.DOMove(new Vector3(10, 10, 10), 5);
//10 秒内 X 局部坐标变化到 5
//transform.DOMoveX(5, 10);
//10 秒内 Y 局部坐标变化到 5
//transform.DOMoveY(5, 10);
//10 秒内 Z 局部坐标变化到 5
//transform.DOMoveZ(5, 10);
//
//transform.DOPath();
//执行该方法停止 变化
//transform.DOPause();
//transform.DOPlay();
//变化结束前调用该方法,物体回到原始位置
//transform.DOPlayBackwards();
//执行 transform.DOPlayBackwards(); 物体回到原始位置
//执行 下面方法则再次变化
//transform.DOPlayForward();
//冲压机,在 5 秒内在原始坐标和下面坐标之间,来回冲压
//transform.DOPunchPosition(new Vector3(10, 10, 10), 5);
//冲压机,在 5 秒内在原始旋转和下面角度之间,来回冲压变化
//transform.DOPunchRotation(new Vector3(50, 50, 50), 5);
//冲压机,在 5 秒内在原始比例和下面比例之间,来回冲压变化
//transform.DOPunchScale(new Vector3(5, 5, 5), 5);
//在变化结束之前,执行该方法,则重新开始变化
//transform.DORestart();
//变化过程中执行该方法,回到原始
//transform.DORewind();
// 10 秒内 旋转角度 到 (50,50,50)
//transform.DORotate(new Vector3(50, 50, 50), 5);
// 10 秒内 比例变化到 (5,5,5)
//transform.DOScale(new Vector3(5, 5, 5), 5);
// 10 秒内 X 比例变化到 5
//transform.DOScaleX(5, 10);
// 10 秒内 Y 比例变化到 5
//transform.DOScaleY(5, 10);
// 10 秒内 Z 比例变化到 5
//transform.DOScaleZ(5, 10);
// 10 秒内 物体 X,Y,Z 坐标在 自身-5 到 自身加 5 之间震动
//transform.DOShakePosition(10, new Vector3(10, 10, 10));
// 10 秒内, 物体 X,Y,Z 旋转角度在 自身-5 到 自身加 5 之间震动
//transform.DOShakeRotation(10, new Vector3(10, 10, 10));
// 10 秒内, 物体 X,Y,Z 比例在 自身-5 到 自身加 5 之间震动
//transform.DOShakeScale(10, new Vector3(10, 10, 10));
//在变化过程中执行该方法,停止、开始、停止、开始
//transform.DOTogglePause();
// 执行该方法,坐标立即变化为 0,5,0, 从 0,5,0 两秒移动到初始位置
//transform.DOMove(new Vector3(0, 5, 0), 2).From();
// 执行该方法,移动到相对于原始位置 6,0,2 的位置
// 如原始位置 3,2,1。 移动后位置为 3+6,2+0,2+2 即 9,2,4
//transform.DOMove(new Vector3(6, 0, 2), 2).SetRelative();
using UnityEngine;
using System.Collections;
using UnityEngine.UI;
using DG.Tweening;
using UnityEditor;
using UnityEngine.EventSystems;
using LuaInterface;
namespace LuaFramework
{
public class DoTweenManager : Manager
{
//**************************************************/
/*传入一个Text形成一个漂浮文字Tips*/
//**************************************************/
public void ShowTips(Graphic graphic)
{
graphic.transform.SetParent(GameObject.Find("msg_canvas").transform); //让创建的Text挂载到msg_canvas上
graphic.transform.parent.position = new Vector3(0, 0, 0);
RectTransform rt = graphic.rectTransform;
rt.sizeDelta = new Vector2(200, 100); //改变RectTransform的size
rt.transform.position = new Vector3(0, 0, 0); //改变RectTransform的pos
// rt.transform.Rotate(new Vector3(0, 0, 45));
rt.transform.localScale = new Vector3(1, 1, 1);
Color c = graphic.color;
c.a = 0;
graphic.color = c; //先将字体透明
Sequence mySequence = DOTween.Sequence(); //创建空序列
Tweener move1 = rt.DOMoveY(rt.position.y + 2, 0.5f); //创建向上移动的第一个动画
Tweener move2 = rt.DOMoveY(rt.position.y + 350, 0.5f); //创建向上移动的第二个动画
Tweener alpha1 = graphic.DOColor(new Color(c.r, c.g, c.b, 1), 0.5f); //创建Alpha由0到1渐变的动画
Tweener alpha2 = graphic.DOColor(new Color(c.r, c.g, c.b, 0), 0.5f); //创建Alpha由1到0渐变的动画
mySequence.Append(move1); //先添加向上移动的动画
mySequence.Join(alpha1); //同时执行Alpha由0到1渐变的动画
mySequence.AppendInterval(1); //延迟1秒钟
mySequence.Append(move2); //添加向上移动的动画
mySequence.Join(alpha2); //同时执行Alpha由1到0渐变的动画
}
//**************************************************/
/*图片到屏幕中心*/
//**************************************************/
public void TransformImage(Graphic graphic)/*RectTransform image*/
{
graphic.transform.SetParent(GameObject.Find("msg_canvas").transform);
graphic.transform.parent.position = new Vector3(0, 0, 0);
RectTransform rt = graphic.rectTransform;
rt.sizeDelta = new Vector2(500, 500); //改变RectTransform的size
rt.transform.position = new Vector3(0, 0, 0); //改变RectTransform的pos
// rt.transform.Rotate(new Vector3(0, 0, 45));
rt.transform.localScale = new Vector3(1, 1, 1);
//透明度设置
Color c = graphic.color;
c.a = 0;
graphic.color = c; //先将字体透明
Sequence mySequence = DOTween.Sequence(); //创建空序列
Tweener alpha1 = graphic.DOColor(new Color(c.r, c.g, c.b, 1), 0.1f); //创建Alpha由0到1渐变的动画
Tweener alpha2 = graphic.DOColor(new Color(c.r, c.g, c.b, 0), 0.1f); //创建Alpha由1到0渐变的动画
mySequence.Join(alpha2); //同时执行Alpha由0到1渐变的动画
mySequence.AppendInterval(0.1f); //延迟1秒钟
mySequence.Join(alpha1); //同时执行Alpha由1到0渐变的动画
// 缩放
Tweener m_scale = rt.DOScale(new Vector3(1.5f, 1.5f, 1f), 0.2f);
m_scale.SetEase(Ease.Linear);
m_scale.SetLoops(2, LoopType.Yoyo);
//ui组件要使用本地坐标
//第一个参数:目标地点,就是要移动到哪个位置
//第二个参数:移动到那个位置需要的时间
// rt.DOLocalMove(new Vector3(0, 0, 0), 0.6f);
//震动 3 秒内 物体 X,Y,Z 坐标在 自身-5 到 自身加 5 之间震动
rt.transform.DOShakePosition(1f, new Vector3(10, 10, 10));
// rt.transform.DOShakeScale(2, new Vector3(3, 3, 3));
//几种移动效果
// rt.transform.DOMoveX(20, 1).SetEase(Ease.OutBack).SetRelative();
// rt.transform.DOMoveX(20, 1).SetEase(Ease.InQuad).SetRelative();
// rt.transform.DOMoveX(20, 1).SetEase(Ease.InOutQuad).SetRelative();
// rt.transform.DOMoveX(20, 1).SetEase(Ease.Linear).SetRelative();
// rt.transform.DOMoveX(20, 1).SetEase(Ease.InOutCubic).SetRelative();
}
//生成Text对象
public void CreateTextObject()
{
// if(Input.GetMouseButtonDown(0))
// {
GameObject tex = new GameObject("CreateText", typeof(Text));
// tex.transform.SetParent(GameObject.Find("msg_canvas").transform);
// tex.transform.parent.position = new Vector2(0,0);
Text text = tex.GetComponent();
text.text = "正在开发中";
text.font = AssetDatabase.LoadAssetAtPath("Assets/Fonts/Arial Black.TTF"); // 默认字体
text.fontSize = 25;
text.alignment = TextAnchor.MiddleCenter;
// text.alignment = TextAnchor.LowerCenter;
// RectTransform rt = tex.GetComponent();
// rt.sizeDelta = new Vector2(200, 100);
// rt.transform.position = new Vector3(0, 0, 0);
// // rt.transform.Rotate(new Vector3(0, 0, 45));
// rt.transform.localScale = new Vector3(1,1,1);
ShowTips(text);
// }
}
//**************************************************/
/*文字以打印机的形式显示*/
//**************************************************/
public void ComponentEvent(Graphic graphic)
{
graphic.transform.SetParent(GameObject.Find("msg_canvas").transform); //让创建的Text挂载到msg_canvas上
graphic.transform.parent.position = new Vector3(0, 0, 0);
RectTransform rt = graphic.rectTransform;
rt.sizeDelta = new Vector2(500, 300); //改变RectTransform的size
rt.transform.position = new Vector3(0, 0, 0); //改变RectTransform的pos
// rt.transform.Rotate(new Vector3(0, 0, 45));
rt.transform.localScale = new Vector3(1, 1, 1);
//默认为false
//Vector3.forward是相对位置,表示从Vector3.forward加当前位置移动到当前位置
rt.transform.DOMove(Vector3.forward, 2).From(true);
Text test = graphic.GetComponent();
//逐字显示
test.DOText("大千世界年度最佳模拟经营游戏,大千世界年度最佳模拟经营游戏,大千世界年度最佳模拟经营游戏,大千世界年度最佳模拟经营游戏", 5);
test.DOBlendableColor(Color.yellow, 5);
}
//**************************************************/
/*屏幕震动效果*/
//**************************************************/
public void ShakeEvent()
{
transform.DOShakePosition(2f, new Vector3(2, 2, 3));
transform.DOShakeScale(2, new Vector3(3, 3, 3));
}
//**************************************************/
/*使sphere在1秒内向x轴相对(SetRelative())的移动了+20的位置。中间的SetEase()函数确定了使用那个缓动函数,可以看出不同的缓动函数可以实现不同的动画过度效果。
5个小球同时达到终点,但是运动过程却不一样,有些先快后慢,有些先慢后快,有些会超过终点再折回。*/
//**************************************************/
// public void Test(Transform sphere1, Transform sphere2, Transform sphere3, Transform sphere4, Transform sphere5)
// {
// sphere1.DOMoveX(20, 1).SetEase(Ease.OutBack).SetRelative();
// sphere2.DOMoveX(20, 1).SetEase(Ease.InQuad).SetRelative();
// sphere3.DOMoveX(20, 1).SetEase(Ease.InOutQuad).SetRelative();
// sphere4.DOMoveX(20, 1).SetEase(Ease.Linear).SetRelative();
// sphere5.DOMoveX(20, 1).SetEase(Ease.InOutCubic).SetRelative();
// }
//**************************************************/
/**/
//**************************************************/
// public void Show(ArrayList boxes)
// {
// //boxes引用了图片中的那些方块Transform
// foreach (var j in boxes)
// j.DOScale(new Vector3(1, 1, 1), 0.5f);
// }
// public void Hide()
// {
// foreach (var j in boxes)
// j.transform.DOScale(new Vector3(0, 0, 0), 0.4f);
// }
private Tweener m_pos;
private Tweener m_rota;
private Tweener m_scale;
private Tweener m_color;
public void ImageMove() {
// 全局初始化
DOTween.Init(true, true, LogBehaviour.ErrorsOnly).SetCapacity(200, 10);
Image image = transform.GetComponent();
// 位置
m_pos = image.rectTransform.DOMove(new Vector3(Screen.width * 0.5f, Screen.height * 0.5f,0), 1f);
m_pos.SetEase(Ease.OutCubic);
m_pos.SetLoops(10,LoopType.Yoyo);
// 旋转
m_rota = image.rectTransform.DORotate(new Vector3(0,180,0), 1);
m_rota.SetEase(Ease.Linear);
m_rota.SetLoops(10, LoopType.Yoyo);
// 缩放
m_scale = image.rectTransform.DOScale(new Vector3(0.6f, 0.6f, 1f), 1);
m_scale.SetEase(Ease.Linear);
m_scale.SetLoops(10, LoopType.Yoyo);
// 颜色
m_color = image.material.DOColor(new Color(0f,1f,1f, 0.7f), 1f);
m_color.SetEase(Ease.Linear);
m_color.SetLoops(10, LoopType.Yoyo);
// 注册开始和结束事件
m_pos.OnStart(AnimaStart);
m_pos.OnComplete(AnimaEnd);
}
private void AnimaStart()
{
Debug.Log("动画开始");
}
private void AnimaEnd()
{
Debug.Log("动画结束");
}
}
}
参考
http://www.taidous.com/forum.php?mod=viewthread&tid=38061&extra=page%3D3&page=1
http://blog.csdn.net/jason_520/article/details/54349227
http://www.cnblogs.com/android-blogs/p/6092561.html
Demo
http://www.360doc.com/content/17/0601/12/39658022_658977934.shtml
http://blog.csdn.net/qq_33927832/article/details/53887828
http://www.cnblogs.com/Study02/p/7254461.html