MEL合宿 -10日目-は、いくつかある「制御構造」の「条件分岐」について見ていきたいと思います!∠( ゚д゚)/
条件分岐って?
ゲームで例えると、、、「HPが0になったらキャラクターを死んだ状態にする」「経験値が一定以上になったらLVアップする」といった、状況に応じて処理を分岐させることを「条件分岐」といいます!
条件は、「変数の数値が100以上の場合」「配列の数が0個の場合」「文字列がperspの場合」などといった「条件式」というものが成り立つかどうかで判断されます。判断は「yes」 か「 no」だけでです!曖昧な判断はありません!(´・ω・`)
MELでの条件分岐は、「if文」と「switch文」の2種類があります!まずは、if文からやってみたいと思いまーす(*´ω`*)b
if文
MELでのif文は、以下のように記述します。
if(条件式){ 条件が成立した場合の処理 }
条件が成立した場合に実行したいことを「{」から「}」の中に記述します。もし、条件式が成立しない場合は、無視されます!
if文を実際に試して見るために、新しいコマンドをいくつか使ってみましょう!
ls
コマンド「ls」は、シーンにあるオブジェクトの一覧を取得したりできますが、もっとも使うのはフラグ「sl」を併用したものです。
「ls -sl」とすることで、Mayaで選択されたノードの一覧を取得することができるんです(*´ω`*)
size
コマンド「size」は、配列の要素数を調べることができます!「ls -sl」で取得した「Mayaで選択されたノードの一覧」は、文字列の配列なので要素の数=選択した数と考えることができます!配列の要素が0個の場合は、何も選択してないからエラーさせる!といった具合ですね!
error
コマンド「error」は、「print」のようにメッセージを表示させることができますが、背景の色が赤くなります。ツールを実行したらエラーしちゃったっという時によく見るアレです!
if文を使ってみる!
以下のコードをScript Editorに記述して、ノードを選択した状態で実行したり、何も選択しない状態で実行したりしてみましょう!
まずは、選択したノードの一覧を取得して、変数に代入します!
string $selection[] = `ls -sl`;
早速if文の登場です。sizeを使って配列の数を調べて0個であるか調べてみます。「~が~の場合」と調べたい場合は、「==」を使います。詳しくは後ほど!
string $selection[] = `ls -sl`; if(`size $selection` == 0 ){ }
続いて「error」を使って、選択した者がない場合、エラーメッセージを表示するようにします。「if文」の「{」「}」の中に書くようにしましょう!
string $selection[] = `ls -sl`; if(`size $selection` == 0 ){ error "Select the node and then execute it!"; }
何も選択しない状態で実行すると、以下のようになります!
条件式
if文の条件は、「条件式」と言われるものが成立するか、成立しないかで判断されます。条件式の評価は、boolean型(ブーリアン)と言われるもので表されます。成り立つものを1、成り立たないものを0で表します。他にも成り立つものを「true」「on」、成り立たないものを「false」「off」で表すこともできます。
比較演算子
「~が~の場合」と調べたい場合は、「==」を使うと言いましたが、こういったデータを比較するために使うのが「比較演算子」というものです。同じか、違うか、大きいか、小さいかなどといった比較をして条件を作ります。
比較演算子 | 使い方 | 内容 |
---|---|---|
== | $a == $b | $aと$bが同じ場合はtrue、それ以外はfalse |
!= | $a != $b | $aと$bが同じでない場合はtrue、それ以外はfalse |
< | $a < $b | $aが$bより小さい場合はtrue、それ以外はfalse |
> | $a > $b | $aが$bより大きい場合はtrue、それ以外はfalse |
<= | $a <= $b | $aが$b以下の場合はtrue、それ以外はfalse |
>= | $a >= $b | $aが$b以上の場合はtrue、それ以外はfalse |
論理演算子
「~が~の場合 で! ~が~じゃない場合」と、複数の比較を組み合わせたい時に使うのが「論理演算子」というものです。Aの条件とBの条件が成り立つか、AかBのどちらかの条件が成り立つかといったものを作り、より複雑な条件を作れるようになります。
論理演算子 | 使い方 | 内容 |
---|---|---|
&& | $a == $b && $c == $d | 左辺と右辺がどちらもtrueならtrue、それ以外はfalse |
|| | $a == $b || $c == $d | 左辺と右辺がどちらかがtrueならtrue、それ以外はfalse(左辺と右辺どちらもtrueならtrue) |
! | ! $a ==$b | 右辺がtrueならfalse、falseならtrue(trueとfalseを反転させる) |
まとめ!
- 状況に応じて処理を振り分けることを「条件分岐」という!
- 条件分岐は、「if文」「switch文」でできる!
- if文は、「条件式が成り立つ」か「成り立たないか」で分岐する!
- 「比較演算子」を使うと、値を比較することができる!
- 「論理演算子」を使うと、複数の比較をミックスして複雑な条件が作れるようになる!
それでは次回もお楽しみに!(`・ω・´)ゞ