常用API
using DG.Tweening;
using DG.Tweening.Core;
using NUnit.Framework.Constraints;
using System;
using System.Collections;
using System.Collections.Generic;
using System.Linq;
using System.Threading.Tasks;
using UnityEngine;
public class Test : MonoBehaviour {
public Gradient _gradient; //颜色渐变
public AnimationCurve _Curve;
private Tweener _tweener;
public Transform[] positions;
// Use this for initialization
async void Start () {
//都不是增量,而是目标值
//Position
//移动
//transform.DOMove(new Vector3(10,10,10),3);
//-----测试两个动画一起执行--
//transform.DOMove(new Vector3(2, 2, 2), 2);
//transform.DOMove(new Vector3(-3, -2, -1), 3);
//transform.DORotate(new Vector3(0,90,0),2);
//--------结束;结论:相同类型后面的动画会覆盖前面的动画--------
//相对位置移动
//transform.DOLocalMove(new Vector3(10,1,1),1);
//移动到x值为10
//transform.DOMoveX(10,2);
//Rotation
//旋转 绕着y轴旋转到150 两秒
//transform.DORotate(new Vector3(0,150,0),2);
//看向目标点
//transform.DOLookAt(new Vector3(10,10,10),2);
//Scale
//transform.DOScale(Vector3.one*2,2);
//来回弹跳 第一个参数:位置 方向 第二个参数:持续时间 第三个参数:弹跳次数(频率) 第四个参数:越大向相反方向移动越大
//transform.DOPunchPosition(new Vector3(0,5,0),4,3,0);
//shake 1:持续时间 2:范围 3:频率
//transform.DOShakePosition(2,new Vector3(2,2,2),5);
//transform.DOShakeRotation(2,new Vector3(90,90,90),2);
//blend 动画混合 增量动画
//transform.DOBlendableMoveBy(new Vector3(2, 2, 2), 2);
//transform.DOBlendableMoveBy(new Vector3(-1, -1, -2), 2);
//transform.DOBlendableRotateBy(new Vector3(0,90,0),2);
//materail
//Material material = GetComponent<MeshRenderer>().material;
//material.DOColor(Color.red,2);//shader必须有_Color属性 否则 DoColor(Color.red,"_OtherColor",2)
//material.DOFade(0,2); material.DOColor(Color.clear,2)//变透明 两种
//material.DOGradientColor(_gradient, 2); //颜色渐变
//material.DOOffset(new Vector2(10,20),2); //贴图偏移
//material.DOVector(new Vector4(1,1,1,1),"",2); // 修改shader属性值
//颜色混合
//material.DOBlendableColor(Color.red,2);
//material.DOBlendableColor(Color.blue,2);
//动画队列 依次执行动画
//Sequence sequence = DOTween.Sequence();
//sequence.Append(transform.DOMove(new Vector3(2,2,2),2));
//sequence.Join(transform.DOScale(Vector3.one*3,4)); //加入到上一个动画一起执行 ↑
//sequence.AppendInterval(2);//等待两秒
//sequence.Append(transform.DOMove(new Vector3(2,0,8),2));
//sequence.Join(transform.DOScale(Vector3.one,2));
//sequence.Insert(2,transform.DOMove(-Vector3.one,1)); //插入动画 1:哪个时间插入 2:动画;一秒后移动到-1,-1,-1
//sequence.Prepend(transform.DOMove(new Vector3(-2,-2,-2),2)); // 预添加 后添加先执行
//sequence.InsertCallback(5,InsertCallback); //在第五秒插入回调函数
//transform.DOMove(new Vector3(3,3,3),2).SetLoops(-1,LoopType.Incremental); // Yoyo来回循环 单边算一次 Restart 重头再来 Incremental 增量的形式
//transform.DOMove(new Vector3(2,2,2),2).From();//从目标点到起始点 From 参数为true则为增量
//transform.DOMove(Vector3.one,2).SetDelay(3);//设置延迟多少秒后执行动画 单位秒
//transform.DOMove(Vector3.one,2).SetSpeedBased();//2代表移动速度 设置以速度为基准
//transform.DOMove(Vector3.one*3,2).SetRelative(true);//相对运动 即增量运动
//transform.DOMove(Vector3.one * 3, 2).SetId("Ani1");//设置动画ID 方便再次使用
//transform.DOMove(Vector3.one * 3, 2).SetId("Ani2").SetRelative(true).SetRecyclable(true);//设置是否可回收
//transform.DOMove(Vector3.one * 2, 2 ).SetUpdate(UpdateType.Fixed); // 设置帧动画更新类型 normal普通 fixed late
//Time.timeScale = 0;
//transform.DOMove(Vector3.one * 10, 5).SetUpdate(UpdateType.Normal,true) ; //不受unity Time.timeScale影响
//transform.DOMove(Vector3.one*5,2).SetEase(Ease.InBack);//设置动画速度变化的运动曲线
//transform.DOMove(Vector3.one * 5, 2).SetEase(Ease.Flash,10,1); //10 震动次数 1 从大到小
//transform.DOMove(Vector3.one*2,2).SetEase(_Curve);//可以用Unity自带的AnimationCurve动画曲线来设置速度变化的曲线
//transform.DOMove(Vector3.one*2,1).SetEase(EaseFunc);//通过自己编写的曲线函数来设置速度变化的曲线
//生命周期的回调函数
//transform.DOMove(Vector3.one * 2, 2).SetLoops(3,LoopType.Yoyo)
// .OnRewind(() => { Debug.Log("OnRewind"); })
// .OnStart(() => { Debug.Log("OnStart"); })
// .OnUpdate(()=> { Debug.Log("OnUpdate"); })
// .OnPlay(()=> { Debug.Log("OnPlay"); })
// .OnComplete(() => { Debug.Log("OnComplete"); })
// .OnStepComplete(()=>{ Debug.Log("OnStepComplete"); })
// .OnKill(() => { Debug.Log("OnKill"); });
//控制函数
//transform.DOMove(Vector3.one * 2, 2);
//await Task.Delay(TimeSpan.FromSeconds(1));
//transform.DOPause();//暂停
//transform.DOPlay();//开始播放
//transform.DORestart();//重新播放
//transform.DORewind();//倒播 一下子回到起始点 播放完不回倒
//transform.DOSmoothRewind();//倒播 平滑的回到起始点 播放完不回倒
//transform.DOMove(Vector3.one * 2, 2);
//await Task.Delay(TimeSpan.FromSeconds(1));
//transform.DOFlip(); //动画翻转 终点变为起始点
//transform.DOGoto(1,true);//跳转到动画第几秒,true 接着播放动画
//transform.DOPlayBackwards();//倒放
//transform.DOTogglePause();//暂停开始开关;暂停是调用则播放,播放时调用则暂停
//List<Tween> list = DOTween.PausedTweens(); // 获取所有暂停的动画
//List<Tween> list2 = DOTween.PlayingTweens();//获取所有正在播放的动画
//DOTween.TweensByTarget(transform,true); 获取目标的动画,为true表示正在播放的动画
//Tweener tweener = transform.DOMove(Vector3.one * 2, 2);
//await Task.Delay(TimeSpan.FromSeconds(1));
//Debug.Log(tweener.fullPosition);
//await Task.Delay(TimeSpan.FromSeconds(1));
//tweener.fullPosition = 0; // 动画播放的时间点 (可读可写) 修改后可以从另一个时间点运动
//tweener.Elapsed(); // 已运动的时间 true 包括循环 false 不包括
//tweener.ElapsedPercentage();//同上 不过是百分比
//通过协程执行回调
//_tweener = transform.DOMove(Vector3.one * 2, 2).SetLoops(3);
//StartCoroutine(Wait());
//路径动画
var posiList = positions.Select(t => t.position).ToArray() ;
//路径点 持续时间 路线类型(直线 曲线) 路径类型 路线精细程度 路线颜色
transform.DOPath(posiList, 5, PathType.Linear, PathMode.Full3D, 50, Color.blue)
.SetOptions(true, AxisConstraint.X, AxisConstraint.Y); //true收尾相连 锁定x轴位移(x值不发生变化) 锁定Y轴旋转
}
private IEnumerator Wait()
{
//yield return _tweener.WaitForCompletion(); // 动画执行完成
yield return _tweener.WaitForElapsedLoops(3); // 循环执行几次后
Debug.Log("DDD");
}
// Update is called once per frame
void Update () {
if (Input.GetKeyDown(KeyCode.W))
{
DOTween.Play("Ani2");
}
}
void InsertCallback()
{
print("插入回调函数");
}
/// <summary>
/// 运动曲线回调函数
/// </summary>
/// <param name="time">当前运行到某时刻</param>
/// <param name="duration">总共的运行时间--持续时间</param>
/// <param name="overshootOrAmplitude">振幅</param>
/// <param name="period">期间 范围</param>
/// <returns>运动路程与总路程的比值</returns>
private float EaseFunc(float time, float duration, float overshootOrAmplitude, float period)
{
return time/duration;//匀速运动到终点
}
}