プロシージャーの作り方
プロシージャーとは
複数のコマンドを何度も実行するような場合に、それらのコマンドに名前をつけておいて
その名前で実行できるようにしておくと便利です。
そのために MEL では、ひとまとまりのコマンドをプロシージャーとして定義・実行できます。
プロシージャーにしておくことによって、
プロシージャーに変更点がなければ、
MEL スクリプトを読み直さなくても、
何回でも同じスクリプトをプロシージャ名で実行できます。
プロシージャーは他のプロシージャーから呼んで使うこともできます。
プロシージャーを作るということは自分用のコマンドを作るということだと覚えておいてください。
プロシージャーの形式
プロシージャーの書式は以下のようになっています。
[ ] で囲まれた部分は省略可能です。
[global] proc [返り値の型] プロシージャー名([引数...])
{
[MEL文;]
}
プロシージャーの書式における各要素の説明は以下のとおりです。
わからない用語は、とりあえず無視して後から必要なときに見直してください。
- global
- この宣言があるとプロシージャーをどこからでも呼んで実行できます。
逆にこの宣言が無いと、そのプロシージャーはプロシージャが記述してあるファイルの内部からしか実行できません。
- proc
- プロシージャーであることの宣言です。
プロシージャーを定義するときに必ず必要です。
- 返り値の型
- プロシージャーが返り値を返す場合は、返り値の型を記述します。
返り値を返すには return 文を使用します。
- プロシージャー名
- プロシージャーの名前は英数字と _ (アンダースコア)の組合せで作られます。
ただし、名前の先頭文字は英字または _ でなければなりません。
- 引数
- プロシージャーに渡す引数(パラメータ)がある場合は、引数の型と変数名を並べて記述します。
2 つ以上の引数がある場合は , (カンマ)で区切って並べます。
- MEL 文
-
MEL コマンドや制御構造などを記述します。
C 言語の経験がある人のために、以下に MEL のプロシージャが C 言語の関数と異なる点を中心に解説しておきます。
- プロシージャー名の前に global proc が必要です。
C 言語のように void などとは書きません。
- 引数の書き方は C 言語とほぼ同じです。
引数が無い場合は C 言語のように void は必要ありません。
- C 言語における main() に相当するものはありません。
main() が無くても実行でます。
Tips
プロシージャの名前は他のコマンド・プロシージャ名と同じものでなければ、どんなものでも好きな名前でかまいませんが、
プロシージャの内容をわかりやすく表現するためにも、
少し長めの名前をつけることを推奨します。
プロシージャの名前が、
すでに存在しているコマンド・プロシージャの名前と同じかどうかは
whatIs コマンドで調べることができます。
whatIs sphere
// Result: Command //
whatIs makeSphere1
// Result: Mel procedure found in: Z:\mel\makeSphere1.mel //
whatIs makeSphere1000
// Result: Unknown //
上の例のように //Result: の後ろに Command または Mel procedure の表示があれば、その名前はすでに使われているので違う名前を考える必要があります。
それ以外の表示や Unknown という表示があれば、その名前でだいじょうぶです。
プロシージャーの作り方と実行例
最初に引数の無い簡単なプロシージャーを作ってみましょう。
- gvim を起動して、以下のようにファイルに記述します。
global proc makeSphere1()
{
sphere;
scale 1 3 1;
}
- makeSphere1.mel という名前で保存します。
ここでプロシージャーの名前とファイル名の前半が同じ(makeSphere1)であることに注意しておいてください。
- ファイルを保存してください。
- Script Editor から によって makeSphere1.mel を読み込みます。
ここで、読み込んだだけでは実行できないことに注意してください。
- Script Editor のインプットウインドウに makeSphere1() と打ち込んで実行します。
- スケールされた球が作成されました。
- もしエラーがでた時は makeSphere1.mel をエディタを使い修正してから保存し、
再実行してください。
この場合は、もう一度 Script Editor の によって読み込み直さないと書き直したものが実行されません。
上の例で、 の代わりに
によって Script Editor のインプットウインドウに表示してから Enter で実行しても良いでしょう。
Maya におけるプロシージャーの実行方法
上の実行例でわかったように
MEL のプロシージャーは Script Editor で読み込んだだけでは実行されません。
それがなぜかを実行例を参考に説明してみましょう。
- makeSphere1.mel が Script Editor などから Maya に読み込まれます。
- Maya は makeSphere1 という名前の手続き(プロシージャー)を覚えておきます。
この時点では Maya は makeSphere1 というプロシージャ名と中身のコマンドを覚えただけでコマンド自体は実行されません。
- Script Editor などで makeSphere1() 打ち込んで実行します。
- すると始めて makeSphere1 の中身のコマンド
(sphere と scale 1 3 1)
が実際に実行されます。
MEL スクリプトを実行する場合は、それがプロシージャかどうかで実行方法が少し違うことを覚えてくおいてださい。
Tips
プロシージャーを実行する時は
makeSphere1()
で実行できますが、引数が無い場合は
makeSphere1
のように () を省略しても実行できます。
逆に今まで () 無しで実行してきた sphere コマンドを
sphere()
として実行することもできます。
MEL スクリプト(プロシージャー)の自動読み込み
もし、普段よく使用するプロシージャーがある場合、Maya を立ち上げるごとにいちいち MEL スクリプトを読み込んでいたのでは面倒です。
そのような場合には、 MELスクリプトをスクリプトパスと呼ばれる特定のフォルダー(ディレクトリ)にコピーなどしておけば
などで読み込む必要が無くなります。
ただし、ファイル名の .mel 以前の名前とプロシージャ名が一致していることが必要です。
また、Maya の使用中にスクリプトパス内の MEL スクリプトの内容を書き換えた場合は、もう一度読み込み直す必要があります。
スクリプトパスを調べるには internalVar コマンドを使用します。
internalVar -usd
// Result: //galaxy4/user/yg050000/myDocument/maya/7.0/scripts/ //
//Result: の後ろに表示されたフォルダー(ディレクトリ)に MEL スクリプトをコピーして Maya を立ち上げ直せば、
その MEL スクリプトに記述してあるプロシージャが
Script Editor から読み込まないでも実行できるはずです。
練習
- makeSphere2.mel という MEL スクリプトの中に makeSphere2 という名前のプロシージャーを作り、
makeSphere2 と実行すると、前回の課題のように NURBS の球が X軸上に接しながら3個並ぶようにしてみましょう。
まとめ
- プロシージャーを定義した MELスクリプトを読み込むとプロシージャー名で実行できます。
- プロシージャーのある MELスクリプトのファイル名は
プロシージャー名.mel
という名前にしておきます。
- どんな場合も MEL スクリプトを書き換えた時は、Script Editor などによって読み込み直さなければ変更点が反映されません。
- スクリプトパスにある MEL スクリプトは自動的に読み込まれます。
課題
参考
Prev | Next
Home | Contents
Mail