MEL合宿 -11日目-は、「MEL合宿 -10日目 –」にやった「if文」に「その他」についてやって、もっともっとifを使いこなせるようにしていきたいと思います!(`・ω・´)ゞ
その他って?
前回の「if文」は「条件が成立したら、この処理をする!」っとしましたが、条件が合わなかった時に処理したい場合に困ってしまいますね(´・ω・`)
例えば、「ダイスの出目が6なら成功、それ以外なら失敗」としたい時です。ここで登場するのが「else」です!日本語にすると「他、その他」という意味です(`・ω・´)ゞ
else
MELでのelseは、以下のように記述します。
if(条件式){ 条件が成立した場合の処理 }else{ 条件が成立しなかった場合の処理 }
「if文」の後に続けて書くようなイメージです!
elseを実際に試してみるために、新しいコマンドを使ってみましょう!
objExists
指定した名前のノードが存在するかどうか調べることができます。戻り値は、存在する場合はtrue、存在しない場合はfalseになります。
elseを使ってみる!
シーンにrootがあるか調べて、存在の有無で処理を分岐させてみたいと思います!
まずは、ifとobjExistsを使ってシーンに「root」という名前のノードがあるか調べます。
if(`objExists "root"`){ }
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."; }
まとめ!
- 条件が成立しなかった場合の処理をしたい場合は「else」を使う!
- elseを単体で書いたり、ifより前に書くことはできない!
- 戻り値がtrue、falseなら比較演算子がなくても条件式が書ける場合がある!
- if文は入れ子(ネスト)できる!
それでは次回もお楽しみに!(`・ω・´)ゞ