見出し画像

MayaのMELを使おう!基礎編第4回~if文・比較演算子・論理演算子・for文~

こんにちは!G2 Studiosで3Dアニメーターをやっている嶽本(タケモト)です!
MayaのMELの基礎講座第4回です。

▼これまでの連載はこちら
第1回~作業準備~
第2回~コマンド入力と四則演算~
第3回~変数と配列~

今回は、基礎編の最終回として、処理の流れの制御について解説します。



処理の流れを制御する ~ってなに?~

例えば、「〇〇が△△だったら☆☆する、▽▽だったら★★する」これがif文です。条件を付けてやる・やらないを決めます。
「〇〇が△△になるまで☆☆を繰り返し行う」これがfor文です。条件に達するまで繰り返します。

実際にコードを見ながら学んでいきましょう。

※他の人のコードを見るとカッコの位置等が違う場合がありますが気にしないで大丈夫です。
気に入った書き方を探してみてください。

if文

if文の基本的な形はこうです。

if(条件){処理内容}

先頭に「if」があり、小カッコで条件を囲み、中カッコで処理内容を書きます。
もし  (条件)を満たしたら  {処理内容}を実行する
分解するとこういうことです↑。

実際に使ってみましょう。

{
  float $kazu = 5;
  if($kazu>4){print ($kazu + "は4より大きい");}
}
//結果:5は4より大きい

まず整数変数$kazuに5を入れ、3行目は、もし$kazuが4より大きかったら($kazuと「は4より大きい」)を連結して表示する
という処理です。$kazuに入れる数字が4より小さいと何も結果を返しません。

※「;」のついている位置に注意!if文自体には「;」がつきません。

次に条件を増やしてみましょう。その場合の書き方はこうです。

if(条件){処理内容}
else if(条件){処理内容}

2つ目以降の条件には「else if」を使います。間に半角スペースが入っています。
「else if」は、「そうでなかったら」というような意味ですね。

では使ってみましょう。

{
  float $kazu = 3;
  if($kazu>4){print ($kazu + "は4より大きい");}
  else if($kazu>2){print ($kazu + "は2より大きく4以下である");}
}
//結果:3は2より大きく4以下である

3行目のif文の条件により、4より大きくはない、とわかりました。
条件を増やすにはこのelse ifをどんどん増やせばOKです。

では最後に、「それ以外全部!」という書き方です。

if(条件){処理内容}
else{処理内容}

3行目の「else」を使います。これは「それ以外」という意味なので、条件は不要です。

if(条件){処理内容}
else if(条件){処理内容}
else{処理内容}

else ifを足す場合は間に入ります。elseは必ず最後です。

では使ってみましょう。

{
  float $kazu = 0;
  if($kazu>4){print ($kazu + "は4より大きい");}
  else if($kazu>2){print ($kazu + "は2より大きく4以下である");}
  else{print ($kazu + "は2以下である");}
}
//結果:0は2以下である

$kazuの数値をいろいろ変えてみましょう。小数でもマイナスでもいいですよ。マイナスは数値の前に「-」を書きます。

ちなみに、if文はelse ifやelseの文まで含めてひとつなので、条件に当てはまったら後の文は無視されます。
条件に合ったひとつだけが実行されるのです。

さて、急に「>」なんて記号を使ってしまいましたが、これは比較演算子といいます。
この記号は「等しい・等しくない」、「以上・以下」「より大きい・小さい」などの意味です。

これを使って条件を作ります。ここで、比較演算子について軽く説明しておきます。

比較演算子

MELで使うのは、「==」「!=」「>」「<」「>=」「<=」です。以下その意味。

 A==B: AとBは等しい
 A!=B: AとBは等しくない
 A>B: AはBより大きい
 A<B: AはBより小さい
 A>=B: AはB以上
 A<=B: AはB以下

これが正しいか正しくないかで判定されます。正しい正しくない、というのは別の表現もあって、
正しいは「1」「true」、正しくないは「0」「false」とも表現できます。
条件のところは別にこの比較演算子を使った形でなくてもよくて、
例えば条件のところに「0」と書いておけば必ず「正しくない」という結果になります。
※正しい正しくないは、「真」「偽」と表現されることが多いです。

論理演算子

これは条件を一度に複数つけるときに使い、MELでは「&&」「||」「!」を使います。以下その意味。

 A==B||C==D: A==BとC==Dのどちらかが正しい⇒正しい
 A==B&&C==D: A==BもC==D両方正しい⇒正しい
 !A==B: A==Bが正しくない⇒正しい

「!」はちょっとややこしいですね。
論理演算子は使えるとスマートになりますが、ifだけでも同じ内容は書けますので安心してください。
例えば「&&」なら、こう。

if(A==B){
  if(C==D){
  処理内容
  }
}

最初のifでA==Bを判定し、正しい場合は続けてC==Dを判定する。

こんなふうに書けば、ifだけでも「A==B&&C==D」が表現できます。

しれっと新しい書き方をしてますが、if文や次のfor文の処理内容が長い場合の書き方です。
これにはいろいろ派閥があるのですが、私はこう書くよ!というご紹介だけ。

if(条件){
  処理内容
}

処理内容は複数行にわたってもOKです。

for文

for文の基本形はこうです。
(書き方はもうひとつありますが、興味がある方は調べてください。別にこれだけでも困りません。)

for(初期設定;条件;再設定式){処理内容}

for文は処理内容が複数あることが多いので、改行してこのように書くことが多いです。

for(初期設定;条件;再設定式){
処理内容
}

聞きなれない言葉が出てきましたね。
初期設定とは、for文の処理を始める前に実行されます。
条件はif文と同じで、内容が正しければ処理を続行します。
再設定式は、for文の内容を一周処理した後に実行されます。
それぞれの区切りは「;」セミコロンなことに注意です。

このように、for文は条件が正しい限り何度でも処理を繰り返し、条件が正しくなくなったら止まります。
気を付けてほしいのは、いつか条件を満たさなくなるような内容になっていないと永久に繰り返すため、
Mayaが操作できなくなります。そうなったらタスクマネージャで終了するしかなくなるので、
作業中のデータで実験はしないようにしましょう。

では、具体的にはどんな感じになるのか。やってみます。

for($n = 0 ; $n < 10 ; $n = $n+1){
  print "abc";
}
//結果:abcabcabcabcabcabcabcabcabcabc

説明しますので、上のfor文の処理の流れと見比べてみてください。
まず初期設定で「$n = 0」としました。
これは、このforの中でだけ有効な変数$nを宣言して、0を入れました。
次に条件確認ですが、「$n < 10」$nが10より小さかったら処理に進みます。
今は$nには0が入っているので条件は正しいですね。
では処理を実行します。
そして再設定式。$nに$n+1を入れていますね。今までの$nに1を足したものを$nに入れる、これは$nに1を足した(※)ということです。
これで$nの中身は1になりました。
条件確認に戻ると、「$n < 10」$nは1なので、まだ条件は正しいですね。
また処理を実行します。
これを繰り返すと、やがて$nは10になりました。
すると条件確認「$n < 10」$nは10なので正しくなくなりました。これでこのfor文は終了します。

※$nに1を足すという処理にもいろいろな書き方があります。
 $n = $n+1 / $n += 1 / $n++
 この3つはどれも$nに1を足す、という意味です。
 よく使われるのは$n++です。書くのも楽なので覚えましょう。
 




終わりに

以上が、MayaのMELスクリプトの基礎です。英語の授業に例えるとおおよその文法が終わったくらいのところです。
あとは公式のドキュメントを活用して、使いたい単語(コマンド)を調べていけばだいたいのことはできるはずです。
読みやすさやメンテナンス性、処理スピード等を考えると違った書き方ややり方がまだありますが、
自分で使う分にはそれほど気にしなくてもいいでしょう。
期待通りに動いているなら、どんなに汚いコードでもそれが正義なのです。あくまで使うのが自分だけなら。

他人に渡す・見せる場合は読みやすくスマートでメンテナンスしやすいコードにしたいものですね。
 

▼G2 Studiosのクリエイター向けnoteはこちら
(ぜひマガジンをお気に入り登録して次回更新をお待ちください!)

▼更新情報はTwitterよりチェックしてください

▼G2 Studiosの採用情報はこちら



みんなにも読んでほしいですか?

オススメした記事はフォロワーのタイムラインに表示されます!

X(Twitter)にて最新のお知らせを配信しております。ぜひフォローしてください!