MEL合宿 -11日目-




MEL合宿 -11日目-は、「MEL合宿 -10日目 –」にやった「if文」に「その他」についてやって、もっともっとifを使いこなせるようにしていきたいと思います!(`・ω・´)ゞ

その他って?

前回の「if文」は「条件が成立したら、この処理をする!」っとしましたが、条件が合わなかった時に処理したい場合に困ってしまいますね(´・ω・`)

例えば、「ダイスの出目が6なら成功、それ以外なら失敗」としたい時です。ここで登場するのが「else」です!日本語にすると「他、その他」という意味です(`・ω・´)ゞ

else

MELでのelseは、以下のように記述します。

if(条件式){
    条件が成立した場合の処理
}else{
    条件が成立しなかった場合の処理
}

「if文」の後に続けて書くようなイメージです!

「else」を単体で書いたり、ifより前に書くことはできません。

elseを実際に試してみるために、新しいコマンドを使ってみましょう!

objExists

指定した名前のノードが存在するかどうか調べることができます。戻り値は、存在する場合はtrue、存在しない場合はfalseになります。

elseを使ってみる!

シーンにrootがあるか調べて、存在の有無で処理を分岐させてみたいと思います!

まずは、ifとobjExistsを使ってシーンに「root」という名前のノードがあるか調べます。

if(`objExists "root"`){
}
戻り値がtrueかfalseの場合は、比較演算子を使わずそのまま使うことができます。丁寧に書くなら以下の様になります。

if(`objExists "root"` == true){
}

ifの中に「Rootは存在します」という旨のメッセージを表示するコードを追加します。

if(`objExists "root"`){
	print "Root exists.";
}

ここからが本題!

else」を追加して、rootが存在しない場合はエラーメッセージを表示するようにします。

if(`objExists "root"`){
	print "Root exists.";
}else{
	error "Root does not exist.";
}

何もないシーンでコードを実行してみましょう!画面右下が赤くなり「Root does not exist.」と表示されるはずです。

次に、グループを作成(ctrl+G)して、ノード名を「root」に変更してから実行してみます!すると、画面右下が黒くなり「Root exists.」と表示されます。

これで、アセットをpublishする時に決められたグループがあるかどうか処理することができますね!(*´ω`*)b

ifの入れ子

ごくごく単純なif文でしたが、if文を入れ子にして、rootのノードがtransformかきっちり調べてみましょう!入れ子は、プログラマー的?にいうと「ネスト」とも言います。

if文の入れ子を試すために、新しいコマンドを追加します。

objectType

指定されたノードの種類を調べることができます。戻り値は、ノードの種類名がstringで返ってきます。transformとかmeshとかlambertっていう感じです。

入れ子を試す!

rootが合った場合、ノードの種類がtransformであるか調べて、処理を分岐させたいと思います!

if(`objExists "root"`){
	if(`objectType "root"` == "transform"){
		print "Root exists.";
	}
}else{
	error "Root does not exist.";
}

このようにすると、rootがある場合にしかノードの種類を調べないので安全な処理になります!もし存在しないノードの種類を調べようとすると、、、、調べようがないのでエラーしてしまいます(;・∀・)

さらに「else」を追加して、「rootはTransformではありません。」という旨のエラーメッセージを表示するようにしてみます。

if(`objExists "root"`){
	if(`objectType "root"` == "transform"){
		print "Root exists.";
	}else{
		error "Root is not Transform.";
	}
}else{
	error "Root does not exist.";
}

まとめ!

  1. 条件が成立しなかった場合の処理をしたい場合は「else」を使う!
  2. elseを単体で書いたり、ifより前に書くことはできない!
  3. 戻り値がtrue、falseなら比較演算子がなくても条件式が書ける場合がある!
  4. if文は入れ子(ネスト)できる!

それでは次回もお楽しみに!(`・ω・´)ゞ







Maya x Pythonの技術書
たっきゅんのガチンコツール開発部 Maya Python 101
(CG Pro Insights)

もっとMayaを便利に使いませんか!?実用性のあるツールを例にPythonが学べるように、がんばって執筆させていただきました!是非、この機会によろしくお願いいたします!

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です

ABOUTこの記事をかいた人

たっくん

フリーランスのCG屋さん 兼 専門学校の非常勤講師。