オブジェクトにカスタム アトリビュートを追加し、エクスプレッション内で使用すると効果的な場合があります。カスタム アトリビュートを使用して、他の複数のアトリビュートを制御することができます。また、他のアトリビュートによって読み取られる値を保存するための一時変数として、カスタム アトリビュートを使用することもできます。
カスタム アトリビュートは、オブジェクトの特性に対しては直接的な影響を及ぼしません。
パーティクルへのカスタム アトリビュートの追加と使用方法の詳細については、 カスタム アトリビュートに代入するを参照してください。
次のエクスプレッションを使用して、Planet という NURBS 球体を XY 平面上の円周軌道に沿って動かすと仮定します。
Planet.tx = sin(time);
Planet.ty = cos(time);
Planet の軌道は、ワールド座標の原点を中心とし、半径の大きさは 1 単位です。
次の手順で、distance というカスタム アトリビュートを作成し、時間の経過に伴って Planet の軌道の半径を大きくします。
最小と最大は、アトリビュート エディタまたはチャンネル ボックス(Channel Box)に入力できるアトリビュート値の最大値と最小値を設定します。
エクスプレッションは、最小と最大の値によって制限されるわけではありません。エクスプレッションで指定する値が、アトリビュートに代入されます。
エクスプレッションでは、アトリビュート エディタまたはチャンネル ボックスに入力された値あるいはデフォルト(Default)値を読み取ることができます。
エクスプレッション エディタ(Expression Editor)のアトリビュート(Attributes)リストに Planet の距離(Distance)アトリビュートが表示されます。これで、どのエクスプレッションでも距離アトリビュートの値を設定または参照できるようになりました。
Planet.tx = distance * sin(time);
Planet.ty = distance * cos(time);
sin(time) と cos(time) の値に距離アトリビュートの値を掛けることにより、Planet の円形軌道の半径は距離アトリビュートを使用して計算される値になります。正弦関数と余弦関数の詳細については、 便利な関数を参照してください。
Planet に距離アトリビュートを追加した場合、そのデフォルト値を 4 と指定したため、アニメーションを再生すると、Planet はワールド座標の原点から 4 グリッド単位の半径の円形軌道を描きます。
distance = time;
Planet.tx = distance * sin(time);
Planet.ty = distance * cos(time);
距離に時間(time)の値を代入することにより、アニメーションの再生時間が増加するのに伴い、Planet の円形軌道の半径が増加します。アニメーションを再生すると、Planet は一定の割合で外側へ広がる螺旋状の軌道を描きます。
エクスプレッションを使用して距離アトリビュートを制御する代わりに、時間の経過に伴って距離アトリビュートの値にキーフレームを設定することもできます。
たとえば、距離アトリビュートに対し、フレーム 1 において 1、フレーム 200 において 10 というキーフレーム値を設定すると、1~200 フレームまで再生する間に、Planet は一定の割合で外側に広がる螺旋状の軌道を描きます。アニメーション時間の経過に伴い、Planet の距離アトリビュートの値がリニア補間され、1 から 10 まで増加します。
距離アトリビュートのアニメートに使用できるのは、キーフレームまたはエクスプレッションのどちらか一方であり、両方を使用することはできません。
反対に、キーフレームで制御しているアトリビュートを、エクスプレッションで制御できるように変更するには、チャンネル ボックス(Channel Box)でそのアトリビュートのテキスト フィールドをクリックし、チャンネル > 選択項目の削除(Channels > Delete Selected)を選択します。次にエクスプレッションを使用して、アトリビュートに値を代入します。