UITTweener


公式サイトを参照:http://www.tasharen.com/forum/index.php?topic=6760.0
参考記事:http://dsqiu.iteye.com/blog/1974528
NUID 3.0.7に基づく
NGUIはアニメーションスクリプトセットを持参しています.個人的にはiTweenよりも使いやすいと思います.一見使えるアニメーションの脚本は多いですが、彼らの役割は特定のパラメータを設定するだけです. (from->>to)本当にアニメーションの変換を実行しているのは、その父親であるUITTweenerです.
UITweener_第1张图片
TweenPositionスクリプトを例にとって、このスクリプトは2つのパラメータ設定を提供します.fromとto(右図)、つまりアニメーションの開始位置です.
まず台本を見てください.
using UnityEngine;

public class TweenPosition : UITweener
{
    //      
    public Vector3 from;
    //      
    public Vector3 to;

    
    //    Transform  
	public Transform cachedTransform 
    {
        get { if (mTrans == null) mTrans = transform; return mTrans; } 
    }
    //      
	public Vector3 position 
    {
        get { return cachedTransform.localPosition; }
        set { cachedTransform.localPosition = value; } 
    } 


	Transform mTrans;


    //    :        value      localPosition (OnUpdate     , UITweener-Update-Sample  , factor      value)
	protected override void OnUpdate (float factor, bool isFinished) 
    { 
        cachedTransform.localPosition = from * (1f - factor) + to * factor; 
    }


    //   ,   go  duration        -> pos
	static public TweenPosition Begin (GameObject go, float duration, Vector3 pos)
	{
		TweenPosition comp = UITweener.Begin(go, duration);
		comp.from = comp.position;
		comp.to = pos;

        //  duration<0,          pos      
		if (duration <= 0f)
		{
			comp.Sample(1f, true);
			comp.enabled = false;
		}
		return comp;
	}
}
UITTweenerのシナリオを簡単に見てください.
    void Update ()
	{		
        //          (   )          
        mFactor += amountPerDelta * delta;
		//.............(  Play Style    mFactor  )
 
		// Play Style Once       ,disable                
        if ((style == Style.Once) && (mFactor > 1f || mFactor < 0f))			
            enabled = false;		
        else Sample(mFactor, false);	
    }	
    public void Sample (float factor, bool isFinished)	
    {
        float val = Mathf.Clamp01(factor);	
        //.............(   factor        ,            val)	
        //     OnUpdate,      
        OnUpdate((animationCurve != null) ? animationCurve.Evaluate(val) : val, isFinished);
    }
 
   
   
   
  

知道了动画播放的原理之后,看下TweenPosition继承UITweener脚本中控制动画的设置:UITweener_第2张图片

Animation Curve  动画曲线,控制动画的播放。需要注意的是UITweener已经帮你转换好数值,其中X轴(0 ~ 1)表示(0 ~ Duration),Y轴(0 ~ 1)表示(from - to)。

Play Stype  动画的播放方式

Once  只播放一次。播放完成后该脚本自动disable

Loop  循环,也就是从头开始播放。

PingPong  来回播放,像乒乓球一样

Star Delay  n秒后才播放动画

Tween Group  把当前脚本归类到特定组,然后用UIPlayTween控制该组播放

Ignore TimeScale  不会因为TimeScale而改变动画播放速度。(TimeScale在Edit - Project Setting - Time 或 Time.timeScale设置,通常用于加减速或暂停游戏)

除了手动设置播放动画外,还能通过UITweener提供的方法控制:

	public void PlayForward () { Play(true); }
	public void PlayReverse () { Play(false); }
	public void Play (bool forward)
	{
		mAmountPerDelta = Mathf.Abs(amountPerDelta);
		if (!forward) mAmountPerDelta = -mAmountPerDelta;
		enabled = true;
		Update();
	}  
                 
	public void ResetToBeginning ()
	{
		mStarted = false;
		mFactor = (mAmountPerDelta < 0f) ? 1f : 0f;
		Sample(mFactor, false);
	}
Playメソッドは、動画の再生方向を設定し、TweenPositonなどのサブクラスをアクティブにし、Updateでアニメーション変換を行います.
ReetToBeginningは直接原点にジャンプします.Forwardはfromにジャンプし、Reverseはtoにジャンプします.
PS:もし何度も同じ方向のアニメーションを行う必要があるならば(以上の位置は基礎です)、例えば何度もPlayForward、先にReetToBeginningの方法でリセットしなければならなくて、さもなくば物体は直接fromからtoまでジャンプしてアニメーションを放送しません.