四种iTween, HOTween, DOTween, LeanTween 不专业比较

发表于2017-03-23
评论0 1.54w浏览
  最近因为将自己的小专案从 NGUI 转到  uGUI,转换的过程中没有遇到特别的问题,但是注意到在 NGUI  里有个非常好用的 Tweener 类别,TweenPosition, TweenRotation, TweenColor, TweenAlpha…等,考虑有些人不是很能区分,下面就给大家比较下这四种 Tween Plugin。

  Tween 事实上就是一种数学库
  能够让使用者更加方便的处理数学动画
  这里就不对 Tween 做详细介绍

  而在 uGUI 里因为没有内建的 Tween 类别可以使用
  所以大致上分析了四种 Tween 的差别与方便性来作为往后选择时的取舍

  会以这四种 Tween 来做比较是因为这四种 Tween Plugin 都是免费的
当然还有许多 Tween Plugin 都是免费的但在这边就不列入讨论了
大家可以在 AssetStore 里收寻 Tween 关键字就可以找到这四种 Tween Plugin


将四种 Tween Plugin 都下载并汇入到专案中


在这个比较范例中
我撰写了简单的测试脚本
这裡所做的测试是让物体可以做循环移动
并且移动方式都设定为线性移动
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
using UnityEngine;
using System.Collections;
using Holoville.HOTween;//For HOTween
using DG.Tweening;//For DOTween
  
public class TweenPositionTest : MonoBehaviour
{
    public enum TweenType
    {
        iTween,
        HOTween,
        DOTween,
        LeanTween
    }
  
    public TweenType tweenType;
  
    public Vector3 from;
    public Vector3 to;
    public float duration;
  
    void Awake()
    {
        switch(tweenType)
        {
        case TweenType.iTween:
            iTweenPosition();
            break;
        case TweenType.HOTween:
            HOTweenPosition();
            break;
        case TweenType.DOTween:
            DOTweenPosition();
            break;
        case TweenType.LeanTween:
            LeanTweenPosition();
            break;
        }
    }
  
    private void iTweenPosition()
    {
        Hashtable hash = new Hashtable();
        hash.Add("position", to);
        hash.Add("isLocal", true);
        hash.Add("loopType", iTween.LoopType.pingPong);
        hash.Add("easetype", iTween.EaseType.linear);
        iTween.MoveTo(gameObject, hash);
    }
  
    private void HOTweenPosition()
    {
        HOTween.Init();
        TweenParms parms = new TweenParms().Prop("localPosition", to).Loops(-1,Holoville.HOTween.LoopType.Yoyo).Ease(EaseType.Linear);
        HOTween.To(transform, duration, parms);
    }
  
    private void DOTweenPosition()
    {
        transform.DOLocalMove(to, duration).SetLoops(-1,DG.Tweening.LoopType.Yoyo).SetEase(DG.Tweening.Ease.Linear);
    }
  
    private void LeanTweenPosition()
    {
        LeanTween.moveLocal(gameObject, to, duration).setLoopPingPong().setEase(LeanTweenType.linear);
    }
}

将脚本赋予场上的 Unity 内建 Cube 后就可以进行测试
测试环境是场景中有一百个相同物件
开始游戏后使用 Unity Profilier 观察 CPU Usage1.iTween


最大值为1.29ms最小值为0.51ms

2.HOTween


最大值为1.26ms最小值为0.71ms

3.DOTween


最大值为0.58ms最小值为0.27ms

4.LeanTween


最大值为0.62ms最小值为0.25ms

以上的测试数据仅供参考,最大最小值为目测不一定准确

以效能来看的话
LeanTween ≈ DoTween > iTween > HOTween

再来回到上面分析一下代码使用方便性

1.iTween
使用 Hashtable 来作为输入依据
在使用上需要去注意对应参数的 Key 才能做有效输入

2.HOTween
使用 TweenParms 来作为输入依据
但在设定 LoopType 及 EaseType 等特定参数时使用函式设定

3.DoTween
使用函式设定,并且支援了扩充方法

4.LeanTween

使用函式设定,但不支援扩充方法

个人依照使用方便性的排列为
DOTween > LeanTween > iTween > HOTween

结论
性能:LeanTween ≈ DoTween > iTween > HOTween
使用性:DOTween > LeanTween > iTween > HOTween
普及率:iTween > LeanTween > HOTween > DOTween

如社区发表内容存在侵权行为,您可以点击这里查看侵权投诉指引