Unity3D——DOTween使用经验

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/wang_lvril/article/details/81981777

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官方案例,需要记的东西暂时就这么多,其他用的熟练的懒得写了。都很简单。

猜你喜欢

转载自blog.csdn.net/wang_lvril/article/details/81981777