首页 > 代码库 > iTween扩展

iTween扩展

在使用iTween时,由于参数很多,作者引入了Hashtable。我们再使用时基本都是用iTween.Hash(...)来添加参数。但是连续的字符串写起来确实有点麻烦。

首先我是看到了tkokof1的这篇博客:iTween那些事儿(二)

里面添加了iTweenHashtable这个类型,用来对iTween做改进。

我在他的基础上做了修改和完善。代码如下:

技术分享
  1 public class iTweenHashtable  2 {  3     public delegate void iTweenCallback();  4   5     //public delegate void iTweenCallbackParam(Object param);  6   7     public delegate void iTweenCallbackParam(params object[] args);  8   9     public delegate void iTweenIntCallback(int param); 10  11     public delegate void iTweenFloatCallback(float param); 12  13     public delegate void iTweenDoubleCallback(double param); 14  15     private Hashtable m_innerTable = new Hashtable(); 16  17     public iTweenHashtable AudioSource(AudioSource source) 18     { 19         m_innerTable["audiosource"] = source; 20  21         return this; 22     } 23  24     public iTweenHashtable AudioClip(AudioClip audioclip) 25     { 26         m_innerTable["audioclip"] = audioclip; 27  28         return this; 29     } 30  31     public iTweenHashtable Volume(float volume) 32     { 33         m_innerTable["volume"] = volume; 34  35         return this; 36     } 37  38     public iTweenHashtable Volume(double volume) 39     { 40         m_innerTable["volume"] = volume; 41  42         return this; 43     } 44  45     public iTweenHashtable Pitch(float pitch) 46     { 47         m_innerTable["pitch"] = pitch; 48  49         return this; 50     } 51  52     public iTweenHashtable Pitch(double pitch) 53     { 54         m_innerTable["pitch"] = pitch; 55  56         return this; 57     } 58  59     public iTweenHashtable Color(Color color) 60     { 61         m_innerTable["color"] = color; 62  63         return this; 64     } 65  66     public iTweenHashtable R(float r) 67     { 68         m_innerTable["r"] = r; 69  70         return this; 71     } 72  73     public iTweenHashtable R(double r) 74     { 75         m_innerTable["r"] = r; 76  77         return this; 78     } 79  80     public iTweenHashtable G(float g) 81     { 82         m_innerTable["g"] = g; 83  84         return this; 85     } 86  87     public iTweenHashtable G(double g) 88     { 89         m_innerTable["g"] = g; 90  91         return this; 92     } 93  94     public iTweenHashtable B(float b) 95     { 96         m_innerTable["b"] = b; 97  98         return this; 99     }100 101     public iTweenHashtable B(double b)102     {103         m_innerTable["b"] = b;104 105         return this;106     }107 108     public iTweenHashtable A(float a)109     {110         m_innerTable["a"] = a;111 112         return this;113     }114 115     public iTweenHashtable A(double a)116     {117         m_innerTable["a"] = a;118 119         return this;120     }121 122     public iTweenHashtable NamedColorValue(iTween.NamedValueColor value)123     {124         m_innerTable["namedcolorvalue"] = value;125 126         return this;127     }128 129     public iTweenHashtable NamedColorValue(string value)130     {131         m_innerTable["namedcolorvalue"] = value;132 133         return this;134     }135 136     public iTweenHashtable IncludeChildren(bool includechildren)137     {138         m_innerTable["includechildren"] = includechildren;139 140         return this;141     }142 143     public iTweenHashtable Alpha(float alpha)144     {145         m_innerTable["alpha"] = alpha;146 147         return this;148     }149 150     public iTweenHashtable Alpha(double alpha)151     {152         m_innerTable["alpha"] = alpha;153 154         return this;155     }156 157     public iTweenHashtable LookTarget(Transform looktarget)158     {159         m_innerTable["looktarget"] = looktarget;160 161         return this;162     }163 164     public iTweenHashtable LookTarget(Vector3 looktarget)165     {166         m_innerTable["looktarget"] = looktarget;167 168         return this;169     }170 171     public iTweenHashtable Axis(string axis)172     {173         m_innerTable["axis"] = axis;174 175         return this;176     }177 178     public iTweenHashtable OrientToPath(bool orienttopath)179     {180         m_innerTable["orienttopath"] = orienttopath;181 182         return this;183     }184 185     public iTweenHashtable LookTime(float looktime)186     {187         m_innerTable["looktime"] = looktime;188 189         return this;190     }191 192     public iTweenHashtable LookTime(double looktime)193     {194         m_innerTable["looktime"] = looktime;195 196         return this;197     }198 199     public iTweenHashtable Name(string name)200     {201         m_innerTable["name"] = name;202 203         return this;204     }205 206     public iTweenHashtable From(float val)207     {208         m_innerTable["from"] = val;209 210         return this;211     }212 213     public iTweenHashtable From(double val)214     {215         m_innerTable["from"] = val;216 217         return this;218     }219 220     public iTweenHashtable From(Vector3 val)221     {222         m_innerTable["from"] = val;223 224         return this;225     }226 227     public iTweenHashtable From(Vector2 val)228     {229         m_innerTable["from"] = val;230 231         return this;232     }233 234     public iTweenHashtable From(Color val)235     {236         m_innerTable["from"] = val;237 238         return this;239     }240 241     public iTweenHashtable From(Rect val)242     {243         m_innerTable["from"] = val;244 245         return this;246     }247 248     public iTweenHashtable To(float val)249     {250         m_innerTable["to"] = val;251 252         return this;253     }254 255     public iTweenHashtable To(double val)256     {257         m_innerTable["to"] = val;258 259         return this;260     }261 262     public iTweenHashtable To(Vector3 val)263     {264         m_innerTable["to"] = val;265 266         return this;267     }268 269     public iTweenHashtable To(Vector2 val)270     {271         m_innerTable["to"] = val;272 273         return this;274     }275 276     public iTweenHashtable To(Color val)277     {278         m_innerTable["to"] = val;279 280         return this;281     }282 283     public iTweenHashtable To(Rect val)284     {285         m_innerTable["to"] = val;286 287         return this;288     }289 290     public iTweenHashtable Amount(Vector3 amount)291     {292         m_innerTable["amount"] = amount;293 294         return this;295     }296 297     public iTweenHashtable X(float x)298     {299         m_innerTable["x"] = x;300 301         return this;302     }303 304     public iTweenHashtable X(double x)305     {306         m_innerTable["x"] = x;307 308         return this;309     }310 311     public iTweenHashtable Y(float y)312     {313         m_innerTable["y"] = y;314 315         return this;316     }317 318     public iTweenHashtable Y(double y)319     {320         m_innerTable["y"] = y;321 322         return this;323     }324 325     public iTweenHashtable Z(float z)326     {327         m_innerTable["z"] = z;328 329         return this;330     }331 332     public iTweenHashtable Z(double z)333     {334         m_innerTable["z"] = z;335 336         return this;337     }338 339     public iTweenHashtable Space(Space space)340     {341         m_innerTable["space"] = space;342 343         return this;344     }345 346     public iTweenHashtable Position(Vector3 position)347     {348         m_innerTable["position"] = position;349 350         return this;351     }352 353     public iTweenHashtable Position(Transform position)354     {355         m_innerTable["position"] = position;356 357         return this;358     }359 360     public iTweenHashtable Path(Vector3 path)361     {362         m_innerTable["path"] = path;363 364         return this;365     }366 367     public iTweenHashtable Path(Transform path)368     {369         m_innerTable["path"] = path;370 371         return this;372     }373 374     public iTweenHashtable Lookahead(float lookahead)375     {376         m_innerTable["lookahead"] = lookahead;377 378         return this;379     }380 381     public iTweenHashtable Lookahead(double lookahead)382     {383         m_innerTable["lookahead"] = lookahead;384 385         return this;386     }387 388     public iTweenHashtable MoveToPath(bool movetopath)389     {390         m_innerTable["movetopath"] = movetopath;391 392         return this;393     }394 395     public iTweenHashtable Rotation(Vector3 rotation)396     {397         m_innerTable["rotation"] = rotation;398 399         return this;400     }401 402     public iTweenHashtable Rotation(Transform rotation)403     {404         m_innerTable["rotation"] = rotation;405 406         return this;407     }408 409     public iTweenHashtable Scale(Vector3 scale)410     {411         m_innerTable["scale"] = scale;412 413         return this;414     }415 416     public iTweenHashtable IsLocal(bool isLocal)417     {418         m_innerTable["islocal"] = isLocal;419 420         return this;421     }422 423     public iTweenHashtable Time(float time)424     {425         m_innerTable["time"] = time;426 427         return this;428     }429 430     public iTweenHashtable Time(double time)431     {432         m_innerTable["time"] = time;433 434         return this;435     }436 437     public iTweenHashtable Speed(float speed)438     {439         m_innerTable["speed"] = speed;440 441         return this;442     }443 444     public iTweenHashtable Speed(double speed)445     {446         m_innerTable["speed"] = speed;447 448         return this;449     }450 451     public iTweenHashtable Delay(float delay)452     {453         m_innerTable["delay"] = delay;454 455         return this;456     }457 458     public iTweenHashtable Delay(double delay)459     {460         m_innerTable["delay"] = delay;461 462         return this;463     }464 465     public iTweenHashtable EaseType(iTween.EaseType easeType)466     {467         m_innerTable["easetype"] = easeType;468 469         return this;470     }471 472     public iTweenHashtable LoopType(iTween.LoopType loopType)473     {474         m_innerTable["looptype"] = loopType;475 476         return this;477     }478 479     public iTweenHashtable OnStart(iTweenCallback onStart)480     {481         m_innerTable["onstart"] = onStart.Method.Name;482 483         MonoBehaviour target = onStart.Target as MonoBehaviour;484 485         if (target == null)486         {487             Debug.LogError("onStart target cannot be null");488             return this;489         }490 491         m_innerTable["onstarttarget"] = target.gameObject;492 493         return this;494     }495 496     public iTweenHashtable OnStart(iTweenCallbackParam onStart, Object param)497     {498         m_innerTable["onstart"] = onStart.Method.Name;499 500         MonoBehaviour target = onStart.Target as MonoBehaviour;501 502         if (target == null)503         {504             Debug.LogError("onStart target cannot be null");505             return this;506         }507 508         m_innerTable["onstarttarget"] = target.gameObject;509 510         // NOTE: seems iTween can not handle this correct ...511         // in iTween.CleanArgs, it just do raw element access512 513         if (param == null)514         {515             Debug.LogError("onStart param cannot be null");516             return this;517         }518 519         m_innerTable["onstartparams"] = param;520 521         return this;522     }523 524     public iTweenHashtable OnStart(iTweenIntCallback onStart, int param)525     {526         m_innerTable["onstart"] = onStart.Method.Name;527 528         MonoBehaviour target = onStart.Target as MonoBehaviour;529 530         if (target == null)531         {532             Debug.LogError("onStart target cannot be null");533             return this;534         }535 536         m_innerTable["onstarttarget"] = target.gameObject;537 538         m_innerTable["onstartparams"] = param;539 540         return this;541     }542 543     public iTweenHashtable OnStart(iTweenFloatCallback onStart, float param)544     {545         m_innerTable["onstart"] = onStart.Method.Name;546 547         MonoBehaviour target = onStart.Target as MonoBehaviour;548 549         if (target == null)550         {551             Debug.LogError("onStart target cannot be null");552             return this;553         }554 555         m_innerTable["onstarttarget"] = target.gameObject;556 557         m_innerTable["onstartparams"] = param;558 559         return this;560     }561 562     public iTweenHashtable OnStart(iTweenDoubleCallback onStart, double param)563     {564         m_innerTable["onstart"] = onStart.Method.Name;565 566         MonoBehaviour target = onStart.Target as MonoBehaviour;567 568         if (target == null)569         {570             Debug.LogError("onStart target cannot be null");571             return this;572         }573 574         m_innerTable["onstarttarget"] = target.gameObject;575 576         m_innerTable["onstartparams"] = param;577 578         return this;579     }580 581     public iTweenHashtable OnUpdate()582     {583         m_innerTable["onupdate"] = string.Empty;584         return this;585     }586 587     public iTweenHashtable OnUpdate(iTweenCallback onUpdate)588     {589         m_innerTable["onupdate"] = onUpdate.Method.Name;590 591         MonoBehaviour target = onUpdate.Target as MonoBehaviour;592 593         if (target == null)594         {595             Debug.LogError("onUpdate target cannot be null");596             return this;597         }598 599         m_innerTable["onupdatetarget"] = target.gameObject;600 601         return this;602     }603 604     public iTweenHashtable OnUpdate(iTweenFloatCallback onUpdate)605     {606         m_innerTable["onupdate"] = onUpdate.Method.Name;607 608         MonoBehaviour target = onUpdate.Target as MonoBehaviour;609 610         if (target == null)611         {612             Debug.LogError("onUpdate target cannot be null");613             return this;614         }615 616         m_innerTable["onupdatetarget"] = target.gameObject;617 618         return this;619     }620 621     public iTweenHashtable OnUpdate(iTweenCallbackParam onUpdate, Object param)622     {623         m_innerTable["onupdate"] = onUpdate.Method.Name;624 625         MonoBehaviour target = onUpdate.Target as MonoBehaviour;626 627         if (target == null)628         {629             Debug.LogError("onUpdate target cannot be null");630             return this;631         }632 633         m_innerTable["onupdatetarget"] = target.gameObject;634 635 636         // NOTE: seems iTween can not handle this correct ...637         // in iTween.CleanArgs, it just do raw element access638 639         if (param == null)640         {641             Debug.LogError("onUpdate param cannot be null");642             return this;643         }644 645         m_innerTable["onupdateparams"] = param;646 647         return this;648     }649 650     public iTweenHashtable OnUpdate(iTweenIntCallback onUpdate, int param)651     {652         m_innerTable["onupdate"] = onUpdate.Method.Name;653 654         MonoBehaviour target = onUpdate.Target as MonoBehaviour;655 656         if (target == null)657         {658             Debug.LogError("onUpdate target cannot be null");659             return this;660         }661 662         m_innerTable["onupdatetarget"] = target.gameObject;663 664         m_innerTable["onupdateparams"] = param;665 666         return this;667     }668 669     public iTweenHashtable OnUpdate(iTweenFloatCallback onUpdate, float param)670     {671         m_innerTable["onupdate"] = onUpdate.Method.Name;672 673         MonoBehaviour target = onUpdate.Target as MonoBehaviour;674 675         if (target == null)676         {677             Debug.LogError("onUpdate target cannot be null");678             return this;679         }680 681         m_innerTable["onupdatetarget"] = target.gameObject;682 683         m_innerTable["onupdateparams"] = param;684 685         return this;686     }687 688     public iTweenHashtable OnUpdate(iTweenDoubleCallback onUpdate, double param)689     {690         m_innerTable["onupdate"] = onUpdate.Method.Name;691 692         MonoBehaviour target = onUpdate.Target as MonoBehaviour;693 694         if (target == null)695         {696             Debug.LogError("onUpdate target cannot be null");697             return this;698         }699 700         m_innerTable["onupdatetarget"] = target.gameObject;701 702         m_innerTable["onupdateparams"] = param;703 704         return this;705     }706 707     public iTweenHashtable OnComplete(iTweenCallback onComplete)708     {709         m_innerTable["oncomplete"] = onComplete.Method.Name;710 711         MonoBehaviour target = onComplete.Target as MonoBehaviour;712 713         if (target == null)714         {715             Debug.LogError("onComplete target cannot be null");716             return this;717         }718 719         m_innerTable["oncompletetarget"] = target.gameObject;720 721         return this;722     }723 724     public iTweenHashtable OnComplete(iTweenCallbackParam onComplete, Object param)725     {726         m_innerTable["oncomplete"] = onComplete.Method.Name;727 728         MonoBehaviour target = onComplete.Target as MonoBehaviour;729 730         if (target == null)731         {732             Debug.LogError("onComplete target cannot be null");733             return this;734         }735 736         m_innerTable["oncompletetarget"] = target.gameObject;737 738 739         // NOTE: seems iTween can not handle this correct ...740         //in iTween.CleanArgs, it just do raw element access741 742         if (param == null)743         {744             Debug.LogError("onComplete param cannot be null");745             return this;746         }747 748         m_innerTable["oncompleteparams"] = param;749 750         return this;751     }752 753     public iTweenHashtable OnComplete(iTweenIntCallback onComplete, int param)754     {755         m_innerTable["oncomplete"] = onComplete.Method.Name;756 757         MonoBehaviour target = onComplete.Target as MonoBehaviour;758 759         if (target == null)760         {761             Debug.LogError("onComplete target cannot be null");762             return this;763         }764 765         m_innerTable["oncompletetarget"] = target.gameObject;766 767         m_innerTable["oncompleteparams"] = param;768 769         return this;770     }771 772     public iTweenHashtable OnComplete(iTweenFloatCallback onComplete, float param)773     {774         m_innerTable["oncomplete"] = onComplete.Method.Name;775 776         MonoBehaviour target = onComplete.Target as MonoBehaviour;777 778         if (target == null)779         {780             Debug.LogError("onComplete target cannot be null");781             return this;782         }783 784         m_innerTable["oncompletetarget"] = target.gameObject;785 786         m_innerTable["oncompleteparams"] = param;787 788         return this;789     }790 791     public iTweenHashtable OnComplete(iTweenDoubleCallback onComplete, double param)792     {793         m_innerTable["oncomplete"] = onComplete.Method.Name;794 795         MonoBehaviour target = onComplete.Target as MonoBehaviour;796 797         if (target == null)798         {799             Debug.LogError("onComplete target cannot be null");800             return this;801         }802 803         m_innerTable["oncompletetarget"] = target.gameObject;804 805         m_innerTable["oncompleteparams"] = param;806 807         return this;808     }809 810     public iTweenHashtable IgnoreTimeScale(bool ignoreTimeScale)811     {812         m_innerTable["ignoretimescale"] = ignoreTimeScale;813 814         return this;815     }816 817     public void Clear()818     {819         m_innerTable.Clear();820     }821 822     public static implicit operator Hashtable(iTweenHashtable table)823     {824         return table.m_innerTable;825     }826 }
iTweenHashtable

 

接下来是一个工具类:

技术分享
  1 public static class iTweenEx  2 {  3     /// <summary>  4     /// 计时委托  5     /// </summary>  6     /// <param name="target">脚本所在对象</param>  7     /// <param name="time">计时时长(秒)</param>  8     /// <param name="onComplete">计时结束要执行的委托</param>  9     public static void CountExecute(GameObject target, float time, iTweenHashtable.iTweenCallback onComplete) 10     { 11         iTweenHashtable hash = new iTweenHashtable(); 12         hash.From(0).To(time).Time(time).OnComplete(onComplete).OnUpdate(); 13         iTween.ValueTo(target, hash); 14     } 15  16     /// <summary> 17     /// 计时委托 18     /// </summary> 19     /// <param name="target">脚本所在对象</param> 20     /// <param name="time">计时时长(秒)</param> 21     /// <param name="onStart">计时开始要执行的委托</param> 22     /// <param name="onComplete">计时结束要执行的委托</param> 23     public static void CountExecute(GameObject target, float time, iTweenHashtable.iTweenCallback onStart, 24         iTweenHashtable.iTweenCallback onComplete) 25     { 26         iTweenHashtable hash = new iTweenHashtable(); 27         hash.From(0).To(time).Time(time).OnComplete(onComplete).OnStart(onStart).OnUpdate(); 28         iTween.ValueTo(target, hash); 29     } 30  31     /// <summary> 32     /// 计时委托 33     /// </summary> 34     /// <param name="target">脚本所在对象</param> 35     /// <param name="time">计时时长(秒)</param> 36     /// <param name="onStart">计时开始要执行的委托</param> 37     /// <param name="onComplete">计时结束要执行的委托</param> 38     /// <param name="onUpdate">计时中要执行的委托</param> 39     public static void CountExecute(GameObject target, float time, iTweenHashtable.iTweenCallback onStart, 40         iTweenHashtable.iTweenCallback onComplete, 41         iTweenHashtable.iTweenCallback onUpdate) 42     { 43         iTweenHashtable hash = new iTweenHashtable(); 44         hash.From(0).To(time).Time(time).OnComplete(onComplete).OnStart(onStart).OnUpdate(onUpdate); 45         iTween.ValueTo(target, hash); 46     } 47  48     /// <summary> 49     /// 计时委托 50     /// </summary> 51     /// <param name="target">脚本所在对象</param> 52     /// <param name="time">计时时长(秒)</param> 53     /// <param name="onStart">计时开始要执行的委托</param> 54     /// <param name="onComplete">计时结束要执行的委托</param> 55     /// <param name="onUpdate">计时中要执行的委托</param> 56     public static void CountExecute(GameObject target, float time, iTweenHashtable.iTweenCallback onStart, 57         iTweenHashtable.iTweenCallback onComplete, 58         iTweenHashtable.iTweenFloatCallback onUpdate) 59     { 60         iTweenHashtable hash = new iTweenHashtable(); 61         hash.From(0).To(time).Time(time).OnComplete(onComplete).OnStart(onStart).OnUpdate(onUpdate); 62         iTween.ValueTo(target, hash); 63     } 64  65     /// <summary> 66     /// 计时委托 67     /// </summary> 68     /// <param name="target">脚本所在对象</param> 69     /// <param name="time">计时时长(秒)</param> 70     /// <param name="onComplete">计时结束要执行的委托</param> 71     /// <param name="onUpdate">计时中要执行的委托</param> 72     public static void CountExecute(GameObject target, float time,iTweenHashtable.iTweenCallback onComplete, 73         iTweenHashtable.iTweenFloatCallback onUpdate) 74     { 75         iTweenHashtable hash = new iTweenHashtable(); 76         hash.From(0).To(time).Time(time).OnComplete(onComplete).OnUpdate(onUpdate); 77         iTween.ValueTo(target, hash); 78     } 79  80     /// <summary> 81     /// 计时委托 82     /// </summary> 83     /// <param name="target">脚本所在对象</param> 84     /// <param name="time">计时时长(秒)</param> 85     /// <param name="delay">延迟时长(秒),即开始计时之前的时长</param> 86     /// <param name="onStart">计时开始要执行的委托</param> 87     /// <param name="onComplete">计时结束要执行的委托</param> 88     public static void CountExecute(GameObject target, float time, float delay, iTweenHashtable.iTweenCallback onStart, 89         iTweenHashtable.iTweenCallback onComplete) 90     { 91         iTweenHashtable hash = new iTweenHashtable(); 92         hash.From(0).To(time).Time(time).Delay(delay).OnComplete(onComplete).OnStart(onStart).OnUpdate(); 93         iTween.ValueTo(target, hash); 94     } 95  96  97     ///// <summary> 98     ///// 计时委托 99     ///// </summary>100     ///// <param name="target">脚本所在对象</param>101     ///// <param name="time">计时时长</param>102     ///// <param name="onUpdate">计时委托</param>103     //public static void CountExecute(GameObject target, float time, iTweenHashtable.iTweenCallback onUpdate)104     //{105     //    iTweenHashtable hash = new iTweenHashtable();106     //    hash.From(0).To(time).Time(time).OnUpdate(onUpdate);107     //    iTween.ValueTo(target, hash);108     //}109 110     /// <summary>111     /// 计时委托112     /// </summary>113     /// <param name="target">脚本所在对象</param>114     /// <param name="time">计时时长</param>115     /// <param name="onUpdate">计时委托</param>116     public static void CountExecute(GameObject target, float time, iTweenHashtable.iTweenFloatCallback onUpdate)117     {118         iTweenHashtable hash = new iTweenHashtable();119         hash.From(0).To(time).Time(time).OnUpdate(onUpdate);120         iTween.ValueTo(target, hash);121     }122 }
iTweenEx

 

项目里经常会用到一些小计时。比如3秒后执行一个操作。比如先执行一个操作,完成后在执行一个操作。这里直接用我的工具类就方便多了。

测试类如下:

技术分享
 1 public class ItweenTest : MonoBehaviour 2 { 3     private float count; 4     private string tip; 5     private int complextCount; 6  7     private void OnGUI() 8     { 9         if (GUILayout.Button("Count up to 10"))10         {11             iTweenEx.CountExecute(gameObject, 10, Tick);12         }13 14         GUILayout.Label("Time elapsed: " + count);15 16         if (GUILayout.Button("Count down form 10"))17         {18             iTweenEx.CountExecute(gameObject, 10, OnStart, OnComplete, OnUpdate);19         }20 21         GUILayout.Label(tip);22 23         if (GUILayout.Button("Complex Count"))24         {25             iTweenEx.CountExecute(gameObject, 5, () =>26             {27                 complextCount = 0;28             }, () => iTweenEx.CountExecute(gameObject, 5, time =>29             {30                 complextCount = 5 - (int) time;31             }), time =>32             {33                 complextCount = (int) time;34             });35         }36 37         GUILayout.Label("Complex Count: " + complextCount);38     }39 40     private void OnUpdate(float time)41     {42         tip = "Time left: " + (10 - (int) time);43     }44 45     private void OnComplete()46     {47         tip = "Done!";48     }49 50     private void OnStart()51     {52         tip = "Started!";53     }54 55 56     private void Tick(float time)57     {58         //if ((float) tick - count >= 1)59         //{60         //    count++;61         //}62         count = (int) time;63     }64 }
ItweenTest

第一个按钮是顺数10秒,并显示已过去时间。这里Tick传入的time是从计时开始算起,已过的时间哦。转成整型即为数整秒。

第二个操作是倒数10秒,开始和结束都给出提示,并显示剩余时间。

第三个按钮是先顺数到5,再倒数到0。第三个例子用到了匿名委托和Lambda表达式,而且在iTween里进行了嵌套。是不是很方便?

 

CountExecute实际上用到的是iTween.ValueTo。在使用ValueTo时必须要有update,于是我在iTweenHashtable里添加了一个空Update

1     public iTweenHashtable OnUpdate()2     {3         m_innerTable["onupdate"] = string.Empty;4         return this;5     }

iTweenHashtable的使用可以参考上面的工具类。

1 public static void CountExecute(GameObject target, float time, iTweenHashtable.iTweenCallback onComplete)2     {3         iTweenHashtable hash = new iTweenHashtable();4         hash.From(0).To(time).Time(time).OnComplete(onComplete).OnUpdate();5         iTween.ValueTo(target, hash);6     }

 

iTween扩展