XSIユーザーから観たMELスクリプトについて 其の一七
ではでは続いてリジッドボディ
これもMELから操作が簡単にできます。
コード
global proc makeRigid1() { string $sname[] = `sphere`; string $pname[] = `nurbsPlane`; scale 10 30 20; rotate 0 0 115; move -r 3 -8 0; string $rname = `rigidBody -active -initialVelocity 10.0 0.0 0.0 -bounciness 0.5 -staticFriction 0.4 $sname[0]`; rigidBody -passive $pname[0]; string $gname[] = `gravity -pos 0 0 0`; connectDynamic -fields $gname[0] $rname; }
前回のコリジョンと似てますねw
では説明。
コリジョンと同じで、ターゲットが必要ですね。
string $rname = `rigidBody -active -initialVelocity 10.0 0.0 0.0 -bounciness 0.5 -staticFriction 0.4 $sname[0]`;
ここでアクテイブ側の設定を行なっています。
「-active」アクティブ宣言
「initialVelocity」初期スピードです。X方向に10飛ぶように設定
「-bounciness 0.5」弾性値が平均値になってますね。値が小さければ弾性が弱くなります。※跳ねなくなります。
「-staticFriction 0.4」摩擦力です。数値が大きくなれば摩擦は強くなります。
rigidBody -passive $pname[0];
パッシブ側の設定です。
string $gname[] = `gravity -pos 0 0 0`;
フィールド(フォース)を設定。
ボールをプロットする方法は
Edit→Keys→bake Simulationで可能。
一応下記にコードありますが、なんか動きません。
なんででしょうか?
string $sname[] = `sphere`; string $rname[] = `rigidBody -active $sname[0]`; string $gname[] = `gravity`; connectDynamic -fields $gname[0] $rname; bakeResults -simulation true -t "1:30" -sampleBy 1 -disableImplicitControl true -preserveOutsideKeys true -shape true $sname[0];
でこれの応用編。
作られるプリミティブのタイプの変更と弾性、摩擦の引数化
global proc makeRigid2(string $type , float $Bou , float $Static) { string $sname[] = `eval $type`; string $pname[] = `nurbsPlane`; scale 10 30 20; rotate 0 0 115; move -r 3 -8 0; string $rname = `rigidBody -active -initialVelocity 10.0 0.0 0.0 -bounciness $Bou -staticFriction $Static $sname[0]`; rigidBody -passive $pname[0]; string $gname[] = `gravity -pos 0 0 0`; connectDynamic -fields $gname[0] $rname; }
円錐になってますね。
ここで注目したいのが、引数で文字列を渡し、それをプリミティブで作成してるんですが、
そのまま引数を書くとエラーになります。なので以前使用した文字列をコードして返す「eval」
を使用します。
前に`eval書いてスペース $type`と書くことでコードとして評価されます。
とこんな感じで書きました。
この手のスクリプトはMAYA優秀ですね。
ほんと色々できそうです。
では…