
今回は、93さんのTA-Trackに含まれるTA-Normalとスクリプト制御の組み合わせについて、TA標準登場を使った小技という動画から学んだことを試してみたので紹介したいと思います。
TA標準登場を使った小技(ニコニコ動画)
TA-Normalが導入されている前提で説明するので、未導入の方はTA-Trackの記事を参考に導入してみてください。
TA-Trackを使ったテキストの動き(過去記事)
目次
文字毎に個別オブジェクト

TA-Normalとスクリプト制御でテキストアニメーションを作るときに知っておくと良いことがいくつかあります。
まず、TA-Normalをかけるテキストは文字毎に個別オブジェクトにチェックを入れておきます。こうすることで一文字ずつ別のオブジェクトとして扱われます。

テキストは中央揃え[中]にしています。基準座標(設定ダイアログのXYZ座標)は特にいじらなければ(0,0)になっていると思います。

相対座標は基準座標から見た各オブジェクトの相対的な座標です。

TA-Normalはin/outが-100から0への移動で登場、0から100への移動で退場の動きをします。
パラメータ設定の座標 in{x座標,y座標,z座標}で登場位置を、同様に座標 out{x座標,y座標,z座標}で退場位置を設定します。
今回はこの座標 in/outの{}の中で変数や関数を使うというのがポイントです。

変数や関数の一覧はlua.txtに書いてあるので一読してみてください。
TA-Normal
一文字ずつその場でフェードイン、フェードアウト

ベースとなるかたちです。オブジェクトの長さは3秒程度。
まずはテキストオブジェクトにTA-Normalをかけ、in/outを-100から100へ移動させます。続いて座標in/outともに{0, 0, 0}として座標の移動をなしの状態にします。
フェードにチェックを入れることで、登場時にフェードイン、退場時にフェードアウトします。
obj.wとobj.h


座標 in/outのx座標に変数obj.wを入れます。
個別オブジェクトとなった文字はひとつひとつ幅と高さを持ちます。obj.wは文字の幅です。
{obj.w, 0, 0}とすることで、文字の幅の分だけ横にずれます。
orderを{0,1}とし、登場は前から、退場は後ろからにしています。
登場位置や退場位置は、フェードのチェックを外して確認することができます。
文字が横から登場、退場するテキストアニメーションになります。


obj.hは文字の高さです。
{0, obj.h, 0}と座標 in/outのy座標にobj.hを入れます。
文字の高さの分だけ下から登場、退場します。
obj.oxとobj.oy


変数のobj.oxはそれぞれの文字の相対座標です。
{obj.ox, 0, 0}とx座標にobj.oxを入れことで文字は両側に広がります。
あわせてorderを{2, 3}としました。これで登場時は内側から、退場時は両端から動き出します。
こんな感じ。外側から内側へ向かって移動します。


{-obj.ox, 0, 0}と値をマイナスにすると動きが反転します。
こんな感じで内側から外側へ移動します。


obj.oyは文字の相対的なy座標です。通常だと一行のテキストでは変化が見られないと思います。
obj.oyは複数行のテキストに有効です。

{obj.ox, obj.oy, 0}とすることで外側から内側に向かって移動するテキストアニメーションになります。
こんな感じ。


値をマイナスにして反転。中央から外側へ移動する動きになります。
こんな感じ。
rand()

関数randはrand(最小値, 最大値, seed, フレーム)のかたちをとります。seedとフレームは省略可。
rand(-50, 50, 0, 0)とすると-50から50の範囲内でランダムで値が出されます。

文字数が多いと小さな欄の中では操作しにくくなりますよね。そこでスクリプト制御を使ってみます。
テキストにスクリプト制御をかけます。
axのように任意の文字列をrand(-50, 50, 0, 0)と定義します。同じようにayとしてy座標用も定義します。
bx、byも同様に定義して退場用も用意しておきました。

座標in {ax, ay, 0}のように、x座標とy座標に先ほど定義した文字列axとayを入れます。
スクリプト制御で任意の文字列を定義することで、パラメータ設定を開き、小さな欄の中で操作しなくて済みます。
ランダムな値ではseed値を変えて変化を見ることが多いので、操作しやすくなると思います。
math.cos(math.pi*obj.index)

math.cos(math.pi*obj.index)ではインデックス順に1とー1を繰り返します。
距離*math.cos(math.pi*obj.index)とすることで奇数に正の値、偶数に負の値をとり文字が交互に逆の動きをします。

これも長いのでスクリプト制御を使ってみます。
こんどはcc={0, 30*math.cos(math.pi*obj.index), 0}と{}を含めて記述しました。y座標に入れたので縦の動きになります。

座標 in/outの欄にはccと書くだけで済みます。いろんなやり方がありますね。
文字が交互に移動して登場、退場します。
math.cos(math.pi/2*obj.index)とmath.sin(math.pi/2*obj.index)

math.cos(math.pi/2*obj.index)は文字が奇数番目のときに1とー1を繰り返します。
math.sin(math.pi/2*obj.index)は文字が偶数番目のときに1とー1を繰り返します。
これにより奇数番目の文字だけ+-で交互に動いたり、偶数番目の文字だけ+-で交互に動いたりといったことができます。

長いのでスクリプト制御に任意の文字を定義します。
距離*math.cos(math.pi/2*obj.index)、距離*math.sin(math.pi/2*obj.index)ですね。

x座標にmath.cos(math.pi/2*obj.index)を定義したdxを入れることで奇数番目の文字が+-で横からの移動になります。
y座標にmath.sin(math.pi/2*obj.index)を定義したdyを入れることで偶数番目の文字が+-で縦の移動をします。
{-dx, -dy, 0}のようにマイナスを付けると右から動いたものが左から動くといった具合で反転します。
また、{dy, dx, 0}のようにdxとdyを入れ替えると奇数番目の文字が縦に移動し、偶数番目の文字が横に移動するようになります。
ランダムとはまた違った動きのテキストアニメーションになりますね。
応用

ポイントは素材の個別オブジェクト化です。
・画像や図形にオブジェクト分割をかける
・画像ループで個別オブジェクト化する
・アルファチャンネルを付けたSceneに素材を置いてRootでシーンオブジェクトを呼び出し、rikkyさんのパーツ分割(ライト版)スクリプトをかける
など素材を個別オブジェクト化できればテキストと同じようにTA-Normalで登場、退場を工夫することができます。
いずれもアルファチャンネルありのシーンオブジェクトにrikkyさんのパーツ分割(ライト版)をかけて個別オブジェクト化したもの。そこにTA-Normalをかけて登場の動きを付けてみました。
いかがだったでしょうか。
変数や関数を使ってこんな動きが付けられるんだと勉強になり、また一つ引き出しが増えました。
TA-normalとスクリプトを使ったテキストアニメーション、機会があれば是非試してみてください。
