スタジオブロス TECH BLOG

スタジオブロススタッフからの最新ツール情報やチュートリアル・TIPSなどを紹介します

文系デザイナーのためのmaya MEL/Python基礎の基礎⑫

では、前回の続きで「if」をMayaでやってみましょう。

前回のコメントアウトしたMaya命令をALT+4で元に戻して、最後のifの処理内に「#m プレーンを表示する」というコメントを入れます。

MayaでPlaneプリミティブを出す命令をMELで探します。

例によってコンバータでPython化します。

pm.polyPlane(cuv=2, sy=10, sx=10, h=1, ch=1, w=1, ax=(0, 1, 0))

pm.cmds.scale(5, 1, 5, r=1)

pm.cmds.move(9, 0, 0, r=1, ls=1, wd=1)

これをPython IDLEへペーストします。move命令のYをtyに変更します。

では、それをMayaへコピペして実行してみましょう!

あれ?・・・・なんか大変なことになってます!でも各階のフロアはできてますね。

実はこれはダメなんです。ちょっとイジワルしました。ごめんなさい・・・

下の箇所を見てください。

「コピーする」という命令を書きましたね。この場合のコピー元は、上にあるCubeです。

しかし、今回はその下のif命令でPlaneを作ってしまったので、コピーする対象が変わってしまった、なのでこういう結果が出るのです。

でも、ちゃんと螺旋状にPlaneが並ぶのも美しいじゃありませんか・・・

では。ちゃんと直しましょう。

どこが変わったかよく見てください。コピーをやめて毎回Cubeを作成しているように改造しました。

「#m コピーする」を削除し、上にあったCubeを作成して移動、グループ化に入れ替えただけです。

では実行してみましょう。

できました!

これで完成でもいいのですが、上にCubeが2個中途半端に作られています。

階段なのですから、段数をしていするより、階数の方が人間側としてはやりやすいですね。このように使いやすさも追求すべきです。

★階段は30度づつ回転している→360/30=12で12回の繰り返しで1階分

であれば、下のように書き換えます。

kaiとdanという変数を作り、kaiを12倍した値をdanに入れます。

1足しているのは0から始まるからです。復習ですが、プログラムでは数学でやったように、右の計算結果を左に入れる、という方式なので注意です。

では、実行すると・・・

いい感じですが、3階なのに4階めの床が出てしまっています。

またもバグ(エラー)・・・落ち着いて考えてみましょう。

プログラムは上から下に処理しますね?

その前までの処理は、

 1.ブロックを作って、Y移動、Y回転する

 2.tyを0.5倍する

 3.ryを30倍する

 4.もしryが360の倍数なら、床を作る

 5.繰り返す

どうですか?何かおかしいですよね?

ryを30倍してから、床を作る確認をしています。ということは、30倍増えた値でifが判断するので間違った結果になるのは当然です!

 1.もしryが360の倍数なら、床を作る

 2.ブロックを作って、Y移動、Y回転する

 3.tyを0.5倍する

 4.ryを30倍する

 5.繰り返す

が正しいですね。では書き換えてみます。

実行すると・・・

今度は正しい結果になりました!おめでとうございます!

このようにプログラムはエラーとの戦いです。コンピュータに正しく指示しないと、思った通りに動いてくれないのです。

焦らず冷静に流れを読み返して修正していけば、必ずできるようになります。

では今日はここまでです。