DoTween的各种使用方法有点多,本人只试用了几种比较常用的,后续项目中如果需要用到更多再补吧。详细内容上官网看http://dotween.demigiant.com/documentation.php。
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using DG.Tweening;
using UnityEngine.UI;
public class DoTweenTest : MonoBehaviour {
public Transform Target;
private Vector3 RotationTarget = Vector3.one;
private Quaternion QuaternionTarget = Quaternion.identity;
private Vector3 ScaleTarget = new Vector3(12,12,12);
void TweenMove()
{
//让物体向目标点移动
// 参数一(vector3): 目标点坐标 参数二(float):移动所花时间
//参数三(bool):若为true则在移动过程中物体的坐标被强制为整数,表现的效果就是非平滑移动,默认flase
// transform.DOMove(Target.position, 5,true);
//让物体X坐标的值向目标值变化
// 参数一(vector3): 目标值 参数二(float):移动所花时间
//参数三(bool):若为true则在移动过程中物体的X坐标被强制为整数,表现的效果就是非平滑移动,默认flase
//transform.DOMoveX(1,5,true);
//transform.DOMoveY原理同上
//transform.DOMoveZ原理同上
//除了改变的是localPosition外,原理同上
// transform.DOLocalMove(Target.position,5);
//transform.DOLocalMoveX(1,5);
// transform.DOLocalMoveY
// transform.DOLocalMoveZ
}
void TweenRotate()
{
//在给定的时间里旋转到指定的角度(世界)
// transform.DORotate(RotationTarget,3,RotateMode.Fast);
//在给定的时间里旋转到指定四元素(世界)
//transform.DORotateQuaternion(QuaternionTarget,3);
// transform.DOLocalRotate(局部)
//transform.DOLocalRotateQuaternion(局部)
//在给定的时间里让自身Z轴方向指向目标,平滑转动
//transform.DOLookAt(Target.position,3);
}
void TweenScale()
{
//在给定的时间里伸缩到指定的比例
//transform.DOScale(ScaleTarget,3);
//X、Y、Z方向上的伸缩
// transform.DOScaleX
// transform.DOScaleY
//transform.DOScaleZ
}
void TweenPunch()
{
//模拟类似弹簧的运动
// Vector3 direction = Target.position - transform.position;
// transform.DOPunchPosition(direction,2,2,0.1f);
}
void TweenShake()
{
//模拟位置随机震动效果
//参数1:震动时间;参数2:震动幅度;参数3:震动次数;参数4:改变震动方向的随机值
//参数5:是间断性运动还是平滑性运动;参数6:是否选择淡出效果
// transform.DOShakePosition(2,10,8,120,false,true);
//模拟角度随机震动效果
// transform.DOShakeRotation(2,5,6,90,true);
//模拟尺寸随机震动效果
// transform.DOShakeScale(2,10,8,90,true);
}
void TweenCamera()
{
Camera myCamera = Camera.main;
//摄像机可视范围的宽高比
// myCamera.DOAspect(0.5f,2);
//摄像机background颜色
// myCamera.DOColor(Color.red,2);
//摄像机近切面值
// myCamera.DONearClipPlane(2,2);
//摄像机远切面值
// myCamera.DOFarClipPlane(1200,3);
//摄像机field of view值
//myCamera.DOFieldOfView(80,2);
//正交摄像机的size
//myCamera.DOOrthoSize(5,2);
//摄像机颤动效果
// myCamera.DOShakeRotation(2,10,10,10,false);
}
void TweenLight()
{
Light myLight = GameObject.Find("Directional Light").GetComponent<Light>();
//光的颜色变化
//myLight.DOColor(Color.cyan,2);
//光纤强度变化
// myLight.DOIntensity(4,2);
}
void TweenMaterial()
{
Material myMaterial = Target.GetComponent<MeshRenderer>().material;
//改变颜色
// myMaterial.DOColor(Color.cyan,3);
//改变shader颜色属性值
// myMaterial.DOColor(Color.gray,"_Color",3);
//改变材质offset值
// myMaterial.DOOffset(new Vector2(0,8),3);
//改变材质tiling值
// myMaterial.DOTiling(new Vector2(2,2),3);
//改变shader属性中vector4的值
// myMaterial.DOVector(new Vector4(0,0,0,0),"_Color",3);
}
void TweenText()
{
Text myText = GameObject.Find("Text").GetComponent<Text>();
//UI文本出现方式,在一定时间内让文本一个字一个字出来
//myText.DOText("A B C D E F G H T Y",10,true,ScrambleMode.None);
//文本渐隐效果
// myText.DOFade(0.2f,2);
}
void TweenEase()
{
//曲线
// transform.DOMove(Vector3.zero, 2).SetEase(Ease.InCirc,1,0);
}
void TweenCallBack()
{
//动画完成回调
transform.DOMove(Vector3.one, 2).OnComplete(()=> { Debug.Log("i am a hanpi"); });
}
// Update is called once per frame
void Update ()
{
if (Input.GetKeyDown(KeyCode.A))
{
TweenMove();
TweenRotate();
TweenScale();
TweenPunch();
TweenShake();
TweenCamera();
TweenLight();
TweenMaterial();
TweenText();
TweenEase();
TweenCallBack();
}
}
}