“ 一切不牵扯利益得失的知识,都不过是智力游戏。当局势不明朗,没有人告诉你该怎么办,错误的判断会导致不良后果,你因为有知识而敢于拿出主意,这才算是真有知识。
--------------万维钢老师”
今天聊 DoTween。
DoTween 的官网: http://dotween.demigiant.com
图片缩放
image
首先创建一个工程并创建一个Image
随便找一个贴图贴图拖到Source Image中
image
“Set Native Size”按钮是设置Sprite的尺寸为贴图原始尺寸
现在到了脚本的部分 创建一个脚本:“ImageDoScale”
ImageDoScale
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.UI;
// 引用DoTween
using DG.Tweening;
public class ImageDoScale : MonoBehaviour
{
//DoTween缩放对象
[SerializeField]
private Image m_scaleImg;
// 缩放初始值
[SerializeField]
private Vector3 m_from = new Vector3(1.2f, 1.2f, 1f);
// 缩放结束值
[SerializeField]
private Vector3 m_to = new Vector3(1f, 1f, 1f);
// 缩放时间
[SerializeField]
private float m_duration = 0.1f;
private Transform m_imgTransform;
// 缩放类型
private Ease m_myEase = Ease.InOutBack;
public Ease MyEase { get => m_myEase; set => m_myEase = value; }
private float m_passTime;
// Start is called before the first frame update
void Start()
{
m_scaleImg = GetComponent<Image>();
m_imgTransform = m_scaleImg.transform;
}
// Update is called once per frame
void Update()
{
m_passTime += Time.deltaTime;
// 每0.5秒执行一次
if(m_passTime>.5f)
{
DoScale();
m_passTime = 0;
}
}
public void DoScale()
{
Debug.Log("移动完毕事件" + m_imgTransform);
m_imgTransform.localScale = new Vector3(1.2f, 1.2f, 1f);
Tweener tweener = m_imgTransform.DOScale(new Vector3(1f, 1f, 1f), 0.1f);
//设置这个Tween不受Time.scale影响
tweener.SetUpdate(true);
//设置移动类型
tweener.SetEase(m_myEase );
tweener.onComplete = delegate ()
{
Debug.Log("移动完毕事件");
};
}
}
将此脚本拖到Image上就可以执行了
image
Editor 扩展:下拉列表及按钮
你可能发现你的Inspector 跟我的长的不太一样 那是因为 我这边多加了一个脚本。在Editor文件夹下添加一个脚本“MyDoTween”
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEditor;
using DG.Tweening;
[CustomEditor(typeof(ImageDoScale))]
public class MyDoTween : Editor
{
public Ease m_myEase = Ease.Flash;
// Start is called before the first frame update
public override void OnInspectorGUI()
{
base.OnInspectorGUI();
ImageDoScale script = target as ImageDoScale;
EditorGUILayout.BeginHorizontal();
script.MyEase = (Ease)EditorGUILayout.EnumPopup("Ease:", script.MyEase);
EditorGUILayout.EndHorizontal();
if (GUILayout.Button("Test Ease"))
{
script.DoScale();
}
}
}
这样你的Inspector里的Image Do Scale 就有了两个按钮
这样ImageDoScale::Update()里的逻辑就可以先注释掉了。因为我们有测试按钮,并且还可以动态选择DoTween的EaseType。
今天的内容就这么多。祝大家61快乐。如果你喜欢我的风格请关注一下我的公众号。关不出吃亏,关不出上当。