アニメーション
MaxScript チートシート の章一覧
アニメーションの操作です。キーを打つには、UI の[オート キー]をオンにするのと同じ働きをする animate on ( ... ) の中でプロパティを変える のが基本です(with animate on とも書けます)。キーやコントローラへは .controller 経由でアクセスします。
キーを打つ(animate on)
animate on
(
at time 0 $.pos = [0,0,0]
at time 30 $.pos = [100,0,0]
at time 60 $.pos = [100,100,0]
)
animate onの 中だけ プロパティ変更がキーになります。外で変えても現在値が変わるだけです。- 整数はフレーム数として扱われます。
30fは時間値のリテラルです。 at timeを付けずにanimate onの中で値を変えると、今のタイム スライダの時間 に打たれます。- キーの無いトラックに 0 以外の時間で最初のキーを打つと、フレーム 0 にも元の値のキーが自動で作られます(
preferences.autoKeyDefaultKeyOn)。 animate onなしでat timeだけを使って値を変えると、キーのあるトラックでは 全キーがまとめてずれます。
時間(タイムスライダ)を操作する
sliderTime = 30 -- タイムスライダを30フレームへ
sliderTime -- 現在フレームを読む(30f のような時間値)
animationRange = interval 0 100 -- アニメーション範囲を 0〜100 に
animationRange.end -- 終了フレーム
frameRate -- フレームレート(fps)
ある時間の値を読む
at time 30 $.pos -- 30フレームの位置を読む(キーは打たれない)
- 読むだけなら
animate onは不要です。
コントローラにアクセスする
$.pos.controller -- 位置コントローラ
$.rotation.controller -- 回転コントローラ
$.pos.x_position.controller -- X座標のコントローラ(リーフ)
$.rotation.controller = TCB_rotation() -- 回転を TCB 補間にする(既存のキーは消える)
- 既定では位置が
Position_XYZ、回転がEuler_XYZで、その下に X/Y/Z ごとのBezier_Floatがあります。この末端をリーフ(葉)コントローラと呼びます。classOf $.pos.controllerで確かめられます。 - コントローラを差し替えると既存のキーは消えます。
- ⚠️ アニメート可能なプロパティには
.controllerでアクセスします。$.posだけでは現在値しか取れません。
キーを読む / 追加する / 消す
ctrl = $.pos.x_position.controller
ctrl.keys -- キー配列
ctrl.keys.count -- キー数
ctrl.keys[1].time -- キー1の時間
ctrl.keys[1].value -- キー1の値
addNewKey ctrl 45 -- 45フレームにキー追加(値はその時間の補間値。戻り値がキー。既にキーがあれば追加しない)
deleteKey ctrl 1 -- 1番目のキーを削除(1始まり。以降の番号は詰まる)
deleteKeys ctrl #allKeys -- 全キー削除
- キーは リーフコントローラ(
pos.x_positionなど末端)に並びます。Position_XYZのような親(複合)コントローラは自分ではキーを持たず、X/Y/Z のサブコントローラがキーを持ちます。キーを読むときは末端のx_position.controllerを指してください。 deleteKeys $ #allKeysでノードの全トラックのキーをまとめて消せます。
接線タイプ(補間)を変える
ctrl = $.pos.x_position.controller
ctrl.keys[1].inTangentType = #linear -- #smooth #linear #step #fast #slow #custom #auto
ctrl.keys[1].outTangentType = #linear
-- 全キーをリニアに
for k in ctrl.keys do (k.inTangentType = #linear; k.outTangentType = #linear)
inTangentType/outTangentTypeは既定のBezier_Floatなど、ベジェ系コントローラのキーで使えます。TCB のキーはテンション/連続性/バイアスで、このプロパティはありません。
よく使う形
-- 選択全体に同じ往復アニメをつける
animate on for o in selection do
(
at time 0 o.pos.z = 0
at time 25 o.pos.z = 50
at time 50 o.pos.z = 0
)
落とし穴まとめ
- キーは
animate onの中で値を変えたときだけ打たれる。at timeなしだと今のタイム スライダの時間に打たれる。 at timeの値はフレーム。fサフィックスでも書ける。- アニメート可能プロパティへは
.controller経由。$.posだけだと現在値のみ。 - キーは末端(リーフ)コントローラに並ぶ。
$.pos.x_position.controller.keys。
関連
- コントローラのプロパティを調べる: 「デバッグ・調査」章
- 動かす対象を集める: 「選択・取得」章
コメント