次のセクションでは、複雑なモーションおよびフォース(力)を制御するための方法を説明します。
インパルスのオン/オフをキー設定することにより、たとえばバットで打ったボールを表現するときなどで、リジッド ボディの速度を瞬間的に切り替えることができます。
インパルスをキー設定するには
たとえば、タイム スライダでキーフレームを選択してから、チャネル ボックス(Channel Box)でアトリビュートを選択します。次に、タイム スライダを右クリックして接線 > ステップ(Tangents > Stepped)を選択します。それぞれのキーフレームに対してこの操作を繰り返します。
パッシブ リジッド ボディの場合、移動(Translate)および回転(Rotate)アトリビュートにキーを設定することによって、それをアニメートすることができます。アクティブ リジッド ボディの場合、フィールドや衝突のようなダイナミクスを使用してそれをアニメートすることができます。場合によってはキーとダイナミクスを組み合わせて使用したいこともあります。こうすることにより、たとえばキーを使用してテーブル上でボールを転がし、次に重力を使用してボールを落下させることができます。
キー設定後、ダイナミクスを使用するには
これにより、アクティブ アトリビュートがオフに設定され、オブジェクトの現在の移動(Translate)および回転(Rotate)アトリビュートの値にキーが設定されます。
これにより、アクティブ アトリビュートがオンに設定され、オブジェクトの現在の移動(Translate)および回転(Rotate)アトリビュートの値にキーが設定されます。
後続フレームでは、ソフト/リジッド ボディ > パッシブ キーの設定(Soft/Rigid Bodies > Set Passive Key)を選択し、コントロールをダイナミクスから移動(Translate)キーと回転(Rotate)キーに制御を切り替えることができます。
ダイナミクスの後でキー設定を使用するには
これにより、アクティブ アトリビュートがオンに設定され、オブジェクトの現在の移動(Translate)および回転(Rotate)アトリビュートの値にキーが設定されます。
これにより、アクティブ アトリビュートがオフに設定され、オブジェクトの現在の移動(Translate)および回転(Rotate)アトリビュートの値にキーが設定されます。
後続フレームでは、ソフト/リジッド ボディ > アクティブ キーの設定(Soft/Rigid Bodies > Set Active Key)を選択し、コントロールを移動(Translate)キーと回転(Rotate)キーからダイナミクスに切り替えることができます。
キーの後でダイナミクスを使用してリジッド ボディのモーションをアニメートする場合、ダイナミクスへの切り替えが発生する前に存在していた速度がダイナミック モーションへ加えられます。ダイナミクスに続けてキーを使用してリジッド ボディのモーションをアニメートする場合、キーへの切り替えが発生すると、キー設定された位置が即座にリジッド ボディに取り込まれます。その前のダイナミック速度は、キー設定された位置に加えられません。
リジッド ボディには、現在の速度、適用されているフォースや衝突を含む、読み取り専用アトリビュートがあります。このセクションでは、これらのアトリビュートについて説明します。
リジッド ボディを選択すると、速度(Velocity)、回転(Spin)、フォース(Force)、およびトルク(Torque)に対する現在の X、Y、および Z コンポーネント値がアトリビュート エディタ(Attribute Editor)に表示されます。次の表に示すアトリビュート名を使用して、MEL コマンドやエクスプレッションでこれらのアトリビュートを問い合わせることができます。
print (velocityX + "\n");
この結果、スクリプト エディタ(Script Editor)にそれぞれのフレームの velocityX の内容が表示されます。
リジッド ボディには、衝突によって発生するコンタクト(接触)に関するデータを格納する読み取り専用アトリビュートがあります。次の表に示すアトリビュート名を使用して、MEL コマンドやエクスプレッションでこれらのアトリビュートを問い合わせることができます。
これらのアトリビュートにデータを蓄積するには、まずリジッド ボディを制御するソルバを選択します。次に、アトリビュート エディタ(Attribute Editor)でリジッド ソルバの状態(Rigid Solver States)セクションを表示し、コンタクト データ(Contact Data)をオンに設定します。コンタクト データ(Contact Data)をオンに設定するごとに、アトリビュート値はゼロになります。コンタクト データ(Contact Data)をオンに設定すると、再生スピードは遅くなります。
print (rigidBody1.contactCount +"\n");
この結果、それぞれのフレームの接点の数が表示されます。