修改3D物体位置
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using DG.Tweening; // 在使用DOTween需引入对应的命名空间:
public class GetStart : MonoBehaviour
{
public Vector3 myValue = new Vector3(10, 5, 0);
public Transform cube_;
void Start()
{
// DOTween.To():让当前值变为另一个值
// 第一个参数:返回要修改的值,第二个参数:把DOteen计算好的值赋值给myValue,第三个参数:变化的目标值, 第四个:变化的时间,2s
DOTween.To(() => myValue, x => myValue = x, new Vector3(5, 0, 0), 2);
}
void Update()
{
cube_.position = myValue;
}
}
修改2D物体位置
public class GetStart : MonoBehaviour
{
public Vector3 myValue = new Vector3(10, 5, 0);
public RectTransform image_; // 2D物体是RectTransform,3D物体是Transform
void Start()
{
DOTween.To(() => myValue, x => myValue = x, new Vector3(0, 0, 0), 5);
}
// Update is called once per frame
void Update()
{
image_.localPosition = myValue; // 这里使用image_.Position的话改变的是世界坐标系, image_.localPosition是局部坐标系
}
}
将数值由10变为0
public class GetStart : MonoBehaviour
{
public float myValue2 = 10;
void Start()
{
DOTween.To(() => myValue2, x => myValue2 = x, 0, 5);
}
}
点击按钮让物体移动到视野中央,再点击则移出视野
public class GetStart : MonoBehaviour
{
public RectTransform image_;
private bool isIn = false;
public void Onclick() {
// 第一个参数:目标位置 第二个参数:动画时间, 2s
//image_.DOMove(new Vector3(0,0,0),2); // 点击按钮移动到new Vector3(0,0,0)的位置,世界坐标系
// image_.DOLocalMove(new Vector3(0, 0, 0), 2); // 局部坐标系
if (isIn == false)
{
image_.DOLocalMove(new Vector3(0, 0, 0), 2); // 执行完就销毁
isIn = true;
}
else {
image_.DOLocalMove(new Vector3(578, 0, 0), 2); // 执行完就销毁
isIn = false;
}
}
}
优化点击按钮让物体移入移出
public class GetStart : MonoBehaviour
{
public RectTransform image_;
private bool isIn = false;
private void Start()
{
Tweener tweener = image_.DOLocalMove(new Vector3(0, 0, 0), 2); // Tweener保存动画的信息,每次DO都会创建一个Tweener对象,默认动画播放完就会销毁
tweener.SetAutoKill(false); // 不让动画自动销毁
tweener.Pause(); // 先不执行动画
}
public void Onclick() {
// 第一个参数:目标位置 第二个参数:动画时间, 2s
//image_.DOMove(new Vector3(0,0,0),2); // 点击按钮移动到new Vector3(0,0,0)的位置,世界坐标系
if (isIn == false)
{
image_.DOPlayForward(); // 前放
isIn = true;
}
else {
image_.DOPlayBackwards(); // 倒放
isIn = false;
}
}
}
From Tween的使用
void Start()
{
// 沿x轴移动到x=5的位置,用时1s。
transform.DOMoveX(5, 1);
// 沿x轴移动到x=5的位置,再回到原位置,用时1s。
transform.DOMoveX(5, 1).From();
// 加上true是相对位置,如果cube原x坐标为1,那么他就是运动到x=6的位置,再回到x=1的位置
transform.DOMoveX(5, 3).From(true);
}
动画属性的设置(动画模式、循环、事件函数)
public class Domove2 : MonoBehaviour
{
void Start()
{
Tweener tweener = transform.DOLocalMoveX(0, 2);
tweener.SetEase(Ease.Linear); // Ease.InCubic 设置动画的模式,先快后慢、匀速、弹跳等等。
tweener.SetLoops(3); // 循环播放3次
tweener.OnComplete(OntweenerCompleteFn); // 当动画播放完的时候,调用OntweenerCompleteFn方法
}
void OntweenerCompleteFn() {
print("我播放完了");
}
}
动画的生命周期与生命周期函数
对话框文字动画
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.UI;
using DG.Tweening;
public class MyText : MonoBehaviour
{
private Text text;
void Start()
{
text = this.GetComponent<Text>();
text.DOText("我是游戏提示,我是游戏提示,我是游戏提示", 2);
}
}
屏幕震动(相机位移)
public class ShakeScene : MonoBehaviour
{
void Start()
{
transform.DOShakePosition(1); // 屏幕震动的1s
transform.DOShakePosition(1, new Vector3(3,3,0)); // 屏幕震动的1s,震动幅度为向x移动3,y移动3
}
}
颜色透明度动画
public class MyText : MonoBehaviour
{
private Text text;
void Start()
{
text = this.GetComponent<Text>();
text.DOColor(Color.green, 2); // 2秒时间,让text的颜色由黑色渐变为绿色
text.DOFade(1, 3); // 3s时间,让text的颜色由透明转为不透明
}
}
动画的组件可视化创建方式
动画组件的代码控制:
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using DG.Tweening;
public class DoteenAnimation : MonoBehaviour
{
private DOTweenAnimation tweenAnimation;
private bool isIn;
void Start()
{
tweenAnimation = GetComponent<DOTweenAnimation>();
//tweenAnimation.DOPlay();
}
public void OnClick() {
if (isIn == true)
{
tweenAnimation.DOPlayBackwards();
isIn = false;
}
else {
tweenAnimation.DOPlayForward();
isIn = true;
}
}
}