読者です 読者をやめる 読者になる 読者になる

(:3[kanのメモ帳]

個人ゲーム開発者kan.kikuchiのメモ的技術ブログ。月木更新でUnity関連がメイン。

Tweenをスクリプトから制御する【Unity】【NGUI】

Unity NGUI

このエントリーをはてなブックマークに追加

Tween

簡単に各種アニメーションが実装出来るNGUIのTween
今回はこれをスクリプトからあーだこーだしていきます!


Begin

まずはスクリプトからTweenを追加する方法です。

gameObject.AddComponent<TweenAlpha> ();

上記のように、AddComponentで追加することも可能ですが、Tweenには専用の追加メソッドBeginがあります!
Beginメソッドは以下の通りです。

TweenAlpha.Begin (gameObject, duration,  alpha);

Beginの利点の一つ目はアニメーションの時間(duration)やTweenAlphaなら透明度(alpha)などの設定値を同時に設定出来る事です。
シンプルなアニメーションであればこれだけで十分ですね。


利点の二つ目は既に同じ種類のTweenが設定されてる場合、上書きしてくれる事です。
例えば、AddComponentで追加し続けると…

f:id:kan_kikuchi:20141224064035p:plain

のように大量に同じスクリプトが追加されてしまいますが、Beginでは常に一つにしてくれます!便利!


その他の設定方法

Beginは便利ですが、下の画像でいうToとDurationしか設定出来ません。

f:id:kan_kikuchi:20141224064303p:plain

なので、その他の設定方法です。

From, To

FromとToの設定は以下の通り。

GetComponent<TweenAlpha> ().from = 0;
GetComponent<TweenAlpha> ().to = 1;

そのまんま!

Play Style

Play Styleはstyleから変える事ができます。

GetComponent<TweenAlpha> ().style = UITweener.Style.Once;
GetComponent<TweenAlpha> ().style = UITweener.Style.Loop;
GetComponent<TweenAlpha> ().style = UITweener.Style.PingPong;

なお、Onceが一度きり、LoopがFrom→To、From→To…と最初からの再生ループさせる、PingPongがFrom→To→From…と最後までいったら逆再生で初期状態にアニメーションしてループ、という感じですね。

Animation Curve

Animation Curveの設定はこんな感じ。

GetComponent<TweenAlpha> ().animationCurve = AnimationCurve.Linear(timeStart, valueStart, timeEnd, valueEnd);
GetComponent<TweenAlpha> ().animationCurve = AnimationCurve.EaseInOut(timeStart, valueStart, timeEnd, valueEnd);

Linearが直線的に変化させて、

f:id:kan_kikuchi:20141224070108p:plain

EaseInOutが最初と最後緩やかって感じですかね。

f:id:kan_kikuchi:20141224070239p:plain

EaseInやEaseOutは無い様子…これはInspectorからやった方が設定しやすそうな項目ですね。

Duration, Start Delay, Tween Group,

ここらへんもFromとTo同様そのままです。

GetComponent<TweenAlpha> ().duration  = 1;
GetComponent<TweenAlpha> ().delay  = 1;
GetComponent<TweenAlpha> ().tweenGroup = 1;

グループってどう使うかよく分かってなかったり…。


Ignore Time Scale

Time Scaleの影響を無視するか否かのIgnore Time Scaleの設定はこちら

GetComponent<TweenAlpha> ().ignoreTimeScale = true;

ストップボタンを押してTime.timeScale = 0;にした後にTweenでメニュー表示!みたいなのやる時に便利ですね。


onFinished

最後にアニメーションが終了した後に実行されるonFinishedの設定です。
これには二つ設定方法があるみたいなのでまとめて紹介!ちなみにTweenのスクリプトと同じスクリプト内のFinish()というメソッドを実行しようとしています。

EventDelegate.Set (GetComponent<TweenAlpha> ().onFinished, this.Finish);
TweenAlpha.Begin (gameObject, 0, 1).onFinished.Add (new EventDelegate (this, "Finish"));

下はメソッド名を文字列で指定するので、ミスを減らすためにも上の方が好みかなーっと。


終わりに

NGUIもTweenも便利ですねー遂に新GUIシステム、uGUIも登場しましたがNGUIに不満がない所かものすごい便利なのでuGUIは個人的には当分いいかなーといった状況です。公式ツールってのは魅力ですけどね(:3っ)∋〜