[mel] scriptEditorから覚えるmel講座 最終回 関数化 そして まとめ

長く続いたシリーズも今回で終わりです。
予想以上にながくなり 気がついたら8回目(汁
前回でコマンドが無事出来上がりました。
あれはあれで良いのですが、毎回あのコマンドをコピペするのは非常に不便ですね。
なので、あれを 関数化 して、より手軽に使えるようにしてみます。

関数とは何かというと、
なにかしら値や文字などを与えると、なにかしらかの処理をして、望む結果を返してくれるもの のことを関数と呼びます。
いままで使ってきたMayaのコマンドなども、基本この関数と呼ばれるものです。

Melで関数を作る場合は↓のように書きます。

global proc (返り値のタイプ)関数名 (引数){

本文

}

使うときは
関数名 引数;

引数 というのは、関数に与える値のことです。

簡単な例

整数を足して、結果を返す関数

global proc int AplusB(int $A , int $B){
return ($A + $B);
}

この場合、結果(int の返り値)があるので proc のうしろにintと入れます。
引数は、AとB2つ 複数ある場合は , で区切ります。
結果がある場合は return ~ で帰ってきて欲しい値を(あるいは帰ってきて欲しい値が入っている変数を)
書きます。

という感じで、前回作ったコマンドを関数化してみると

こんな感じになりました。
前回、1行目で
string $curve = "curve1";
こんな風に、ロケーターを付けたいカーブを変数に入れていたのは、関数化を見越してのことでした。

私がコマンドを作るときは、関数にまとめる前に 一度引数を変数に入れた上で
1行づつ あるいは 1処理づつ実行し、きちんと動くことを確認してから関数化します。
引数を変数にいれておくと、動作テストがやりやすくなります。

これで完成!!でもいいのですが
ここからもう1つ改造してみます。

改造

今回は 引数に、コントローラーを付けたいカーブの名前をいれるようにしましたが
それ+選択しているカーブすべてにロケーターをつける ようなコマンドを作ってみます。

前回のコマンドの、グループ作成部分 で グループ名にカーブの名前をいれるように修正(複数あるとごっちゃになるため)
+ 選択しているノードに対して先ほど作ったコマンドを実行する関数を1つ作ります。
好みの問題ではありますが、選択している複数のものにたいして何かの処理をする場合、繰り返し部分と
本体を別に書いておくと色々と便利なこともあるのでオススメです。

というわけで、完成!
ちょっとお題が難しかったかなーと途中後悔しましたが(後半ぶっとばしたものの)何とか終わりました。はい。

いままでのまとめ

1 まず、手で作ってみる そのコマンドをコピペ
2 コピペしておいたコマンドを整理して 手順を日本語でまとめる
3 繰り返す部分 分岐部分を明確にする
4 お約束事に法って Melコマンドに置き換え(そのときコピペしておいたコマンドを参考に)
  わからないところはぐぐる
5 テストしながらちゃんと動くことを確認する
6 動いたら関数にまとめる

おおむね、私の作業手順もこんなかんじです。

はじめのうちはどうしたらいいのかわからないことも多いと思うのですが
まずは 手でやってみて スクリプトエディタをじっくり眺めてみる
その後、日本語でやろうとしていることを整理して書いてみるようにすると
だいぶとっつきやすいんじゃないかなーと思います。
日本語がかけたらとにかくわからないところをググる!

今後も、自前のスクリプトで公開しても差し支えないものなんかは
ポツポツと追加していきますので
書く時の参考にしてみてください(参考になるのか?)

長くなってしまいましたが、最後まで読んで下さった方 ありがとうございました!

コメントを残す

メールアドレスが公開されることはありません。


*