MEL合宿の4日目は「オリジナルのコマンド」を用意して、簡単に実行できるようにしてみたいと思います!
なぜオリジナルのコマンドを作るのか?
以前に作った雪だるまを作るMELファイルは「5つのコマンドの組み合わせ」で作りました。雪だるまのように、ツールを作る場合は複数のコマンドを組み合わせて作ります!複数のコマンドを何度も実行するような場合、名前をつけておくと大変便利なのです!
MELでは、複数のコマンドに名前をつけるのに「プロシージャ」と言うものを使って作っていきます。一般的なプログラミング用語だと「関数」とも言います。
sourceと何が違うの?
「前回の「source」と何が違うの?」っと思った方もいるかもしれません。「source」を使ってツールを実行していると、毎回ファイルを読み込むので「ファイル読み込みの時間」が発生してしまいます。サーバーに設置したり、膨大なツールになってくると、どーしてもファイルの読み込みに時間がかかるようになります(´・ω・`)
例えば、MELファイルを読み込むのに10秒かかれば、ツールを実行するたびに10秒以上またなくては行けなくなります。モデリングのツールとかで、頻繁に使うのなら見過ごせない問題ですよね!
プロシージャにしておくと!
「内容に変更がなければ、MELファイルを読み込むのは1度だけ」になります。すると、無駄なファイルの読み込みがなくなります!
それ以外にもたくさんのメリットがありますが、詳しくはもう少しMELに慣れた頃に改めてご紹介したいと思います(`・ω・´)ゞ
プロシージャの作り方!
またまた、雪だるまのコードを使ってプロシージャを作ってみたいと思います!前回のコードは、こんな感じですね!
polySphere; scale 1.5 1.5 1.5; move 0 1.5 0; polySphere; move 0 3.5 0;
プロシージャは、以下のルールになっています。
global proc プロシージャ名(){
プロシージャの中身
}
これを、雪だるまコードに当てはめると以下のようになります!
global proc snowMan(){ polySphere; scale 1.5 1.5 1.5; move 0 1.5 0; polySphere; move 0 3.5 0; }
現段階で抑えておいてほしいポイントは、3つあります!
ポイント1
プロシージャの名前は「MELファイルの名前と同じ」にします!でないと、後々面倒なことになってしまいます。。。また、大文字小文字も一致させるようにしてください(`・ω・´)ゞ
ポイント2
プロシージャの中身は「{」から「}」の中に書かれた部分になります。それ以外に書いてしまうと、プロシージャとは無関係のコードになってしまいます!
ポイント3
プロシージャの中身を見ると、右側にずれていますね。プログラミングではコレを「インデント」と言います。インデントを入れると、目で見たときのプロシージャの範囲がわかりやすくなります。MELでは必須ではありませんが、インデントを入れるようにしてコードを見やすくするように心がけましょう!
Mayaを起動して試してみよう!
Mayaを起動したら、Script Editorに以下のコードを記述して実行してみましょう!
snowMan();
それ以外のエラーについては、「MEL合宿 -2日目-」を参考に修正しましょう!
すると、「source」していないのに雪だるまが作成されました!
これで、オリジナルのコマンド「snowMan」が組み込めたっということになります!無性に雪だるまが作りたくなったら「snowMan」っと叩けば、雪だるまがどんどん生成されています(*´ω`*)
ファイルを更新した場合の注意!
この方法でツールを作成していると、「MELファイルを更新したのにMayaに反映されない!」という現象が置きます。(´・ω・`)
でも、しょうが無いですよね!!ファイルを読み込むのは1度だけにすることで、無駄な読み込まないようにしているからです。
MELファイルを更新するたびにMayaを再起動しては時間かかってしょうが無いので、ロードされたMELファイルを更新する方法を覚えておきましょう!(`・ω・´)ゞ
MELファイルの更新
ロードされたMELファイルを更新するには、以下のように「source」してファイルを読み込み直します。
source "snowMan.mel";
以前と異なり、「source」しても雪だるまは作成されません。
なぜ!?
プロシージャを作ると、オリジナルのコマンド「snowMan」をMayaに覚えておけ!という状態になります。プログラミング的に言うと「定義」と言います。プロシージャは、書いただけでは実行されず明確に呼び出して上げる必要があります。
これを踏まえて修正すると、以下のようになります。
source "snowMan.mel"; snowMan();
1行目でMELファイルを更新して、2行目でプロシージャを実行っという意味になります(*´ω`*)v
しかし!
これを毎回していては、結局ファイルを読み込みまくるので、人に渡す時や、ツールが完成したときは「source」の部分は消すようにしましょう!
まとめ!
- プロシージャを使うと、複数のコマンドに名前をつけてオリジナルのコマンドが作れる!
- プロシージャの書き方は、「global proc プロシージャ名(){プロシージャの中身}」
- プロシージャの名前は、ファイル名と一緒にする。
- プロシージャの中身は「{」から「}」の中に書かれた部分。
- インデントを入れて、コードを見やすくしよう!
- 一度ロードされたMELファイルは更新されないので、再読込したい場合は「source」を使う!
それでは、次回もお楽しみに!!(`・ω・´)ゞ