いくつかの動きのパターンをキーフレームによって管理する方法をご紹介します。イメージとしては格闘ゲーム等のキャラクターアニメーションが近いです。
とりわけ高度なことではありませんが、汎用性が高そうなのと調べ直すのに苦労したので順を追って説明します。
一つ手前のキーフレーム番号を取得する
nearestKey(time)を用いてキーを取得するのですが、「前後に関わらず一番距離の近いキー」を取得してしまうため不便です。残念ながら代替できそうな手段もありません。そこでまずは「直前のキーのインデックス」を常に取得するため、下記のように現在時間と対象のキーの時間を比較し値を補正します。サンプルはこれをソーステキストに適用したものです。
nKey = effect("control")("スライダー").nearestKey(time); if(time < nKey.time){ cIndex = nKey.index-1; } else { cIndex= nKey.index; } cIndex |
同様にマーカーに対しても使えます。
nKey = marker.nearestKey(time); if(time < nKey.time){ cIndex = nKey.index-1; } else { cIndex= nKey.index; } cIndex |
これだけでも例えば長尺モノのカット番号など、タイムコード的に使うことができるかと思います。
タイムリマップによって再生ヘッドを呼び出す
直前キーインデックスの取得さえできてしまえばあとは算数です。動きのパターンを等間隔のタイミングで並べたコンポを作り、スライダー(”control”)をつけた上でそのコンポのタイムリマップに対し下記のエクスプレッションを適用します。
motionDuration = 5; // 一つのモーションの尺 nKey = effect("control")("スライダー").nearestKey(time); if(time < nKey.time){ cIndex = nKey.index-1; } else { cIndex= nKey.index; } if(cIndex > 0){ cKey = effect("control")("スライダー").key(cIndex); time-cKey.time+cKey*motionDuration } else {0} |
こうすることで、スライダーの数によってコンポ内の「n番目の動き」が擬似的に呼びだされます。なお動作中に次のキーがあると無視して次の動きを始めます。
動きのパターンは開始点が等間隔でさえあれば良いので、十分な間隔をとってしまえば個々の動きの長さの差は問題になりません。パターン追加が必要な際もコンポそのものを伸ばしてしまえばそのまま対応できます。
注意点としてはスライダーのキーに少数が入ると半端なタイミングが呼び出されます。好きな人は端数の処理とかすると良いと思います。
sample_cc
Licence: Free for all
AE Version: CC
The genius store cadlle, they’re running out of you.
I never thought I would find such an everyday topic so engitallhnr!