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です.
TweenPositionスクリプトを例にとって、このスクリプトは2つのパラメータ設定を提供します.fromとto(右図)、つまりアニメーションの開始位置です.
まず台本を見てください.
参考記事:http://dsqiu.iteye.com/blog/1974528
NUID 3.0.7に基づく
NGUIはアニメーションスクリプトセットを持参しています.個人的にはiTweenよりも使いやすいと思います.一見使えるアニメーションの脚本は多いですが、彼らの役割は特定のパラメータを設定するだけです. (from->>to)本当にアニメーションの変換を実行しているのは、その父親であるUITTweenerです.
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脚本中控制动画的设置:
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提供的方法控制:
Playメソッドは、動画の再生方向を設定し、TweenPositonなどのサブクラスをアクティブにし、Updateでアニメーション変換を行います.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); }
ReetToBeginningは直接原点にジャンプします.Forwardはfromにジャンプし、Reverseはtoにジャンプします.
PS:もし何度も同じ方向のアニメーションを行う必要があるならば(以上の位置は基礎です)、例えば何度もPlayForward、先にReetToBeginningの方法でリセットしなければならなくて、さもなくば物体は直接fromからtoまでジャンプしてアニメーションを放送しません.