DOTween插件用来做动画有多方便就不多解释了,这里总结一下最近使用的经验。
每一个tween动画,都可以复制给一个 Tweener 对象,可以很方便的管理。
tweener可以控制动画的播放,暂停,倒放,播放速度,自动销毁,循环,动画效果等等一系列所有问题。
TogglePause(),触发一次该事件,就播放,再触发一次暂停,然后再播放。字面意思理解。
From() 从目标状态——>当前状态,运行时,瞬间跳跃到目标状态。
SetRelative(),以自己的状态增加目标状态。
SetLoops(),-1为无限循环,可以设置循环模式,LoopType
LoopType.Yoyo:类似NGUI动画的PingPang,正放播完然后倒放。
LoopType.Restart:正向播放完毕,从头开始重新播放。
LoopType.Incremental:增量,动画目标状态越来越强
动画的目标值可以随时改变,比如做一个实时跟随动画。在Update()函数里,通过Tweener对象调用ChangEndValue()方法,并调用Restart()方法重新播放。
下面是一个实时跟随目标移动的案例:
public class Follow : MonoBehaviour
{
public Transform target; // Target to follow
Vector3 targetLastPos;
Tweener tween;
void Start()
{
tween = transform.DOMove(target.position, 2).SetAutoKill(false);
targetLastPos = target.position;
}
void Update()
{
if (targetLastPos == target.position) return;
tween.ChangeEndValue(target.position, true).Restart();
targetLastPos = target.position;
}
}
DOPath(),按照给定的路径运动。有很多重载,没用过,只写简单的一个。
首先要创建一个数组,来存放路径。其它用法基本类似,有PathType,慢慢尝试喽。
下面给一个例子:
public class Paths : MonoBehaviour
{
public Transform target;
public PathType pathType = PathType.Linear;
public Vector3[] waypoints = new[] {
new Vector3(4, 2, 6),
new Vector3(8, 6, 14),
new Vector3(4, 6, 14),
new Vector3(0, 6, 6),
new Vector3(-3, 0, 0)
};
void Start()
{
Tween t = target.DOPath(waypoints, 4, pathType)
.SetOptions(true)
.SetLookAt(0.001f);
t.SetEase(Ease.Linear).SetLoops(-1);
}
}
Sequence s = DOTween.Sequence(); 翻译是序列,大概就是一系列动画,融合在一起。
Sequence对象可以添加动画,插入动画等。
给个例子自己体会:(改Cube移动时,旋转,改变颜色)
public class Sequences : MonoBehaviour
{
public Transform cube;
public float duration = 4;
IEnumerator Start()
{
yield return new WaitForSeconds(1);
// Create a new Sequence.
Sequence s = DOTween.Sequence();
s.Append(cube.DOMoveX(6, duration).SetRelative().SetEase(Ease.InOutQuad));
s.Insert(0, cube.DORotate(new Vector3(0, 45, 0), duration / 2).SetEase(Ease.InQuad).SetLoops(2, LoopType.Yoyo));
s.Insert(duration / 2, cube.GetComponent<Renderer>().material.DOColor(Color.yellow, duration / 2));
s.SetLoops(-1, LoopType.Yoyo);
}
}
Camera Tween动画:
camera.DOShakePosition(5); //震动,值越大越厉害
camera.DOShakeRotation(5); //胡乱旋转
camera.DORect(Rect.zero, 1); //向右下角缩小,产生很多方块
camera.DOAspect(3, 1); //横向压缩视角,值越大压缩越大
camera.DOFieldOfView(10, 1); //视野 (2D没效果)
camera.DOOrthoSize(2, 1); //改变相机Size
camera.DOColor(Color.black, 1); //改变颜色
camera.DOFarClipPlane(10, 1); //远夹平面 (2D不知道效果)
camera.DONearClipPlane(10, 1); //同上相反
Light Tween动画:
GetComponent<Light>().DOColor(Color.black, 1); //改变光照颜色
GetComponent<Light>().DOIntensity(2, 1); //改变光强
GetComponent<Light>().DOShadowStrength(3, 1); //改变光照材质strength
案例是DOTween官方案例,需要记的东西暂时就这么多,其他用的熟练的懒得写了。都很简单。