在使用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 access 512 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 access 638 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 access 741 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 }
接下来是一个工具类:
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 }
项目里经常会用到一些小计时。比如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 }
第一个按钮是顺数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 }