では、前回の続きで「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.繰り返す
が正しいですね。では書き換えてみます。
実行すると・・・
今度は正しい結果になりました!おめでとうございます!
このようにプログラムはエラーとの戦いです。コンピュータに正しく指示しないと、思った通りに動いてくれないのです。
焦らず冷静に流れを読み返して修正していけば、必ずできるようになります。
では今日はここまでです。