プロシージャーの作り方

プロシージャーのスクリプトを作ってみる

MELではC言語の関数のように、ひとまとまりのコマンドをプロシージャーとして実行できる。
プロシージャーにしておくことによって、変更点がなければファイルを読み直さなくても何回でも同じスクリプトを実行できる。
また、他のプロシージャーから呼んで使うこともできるようになる。

プロシージャーの形式

プロシージャーの中にはコマンド、プロシージャー、数式、制御構造などを必要なだけ書いてゆく。

global proc プロシージャー名(引数...)
{
	コマンドなど;
	.
	.
	.
}

以下にC言語と異なる点を中心に解説する。

プロシージャーの作り方と実行例

最初に引数の無い簡単なプロシージャーを作ってみよう。

  1. mel フォルダーへ移動しておく。
    % cd mel
    % pwd
    Z://mel
    
  2. まず、makeSphere1.melという名前のファイルをviなどのエディターを使って作る。
    % vi makeSphere1.mel
    ファイルの内容は、以下のように書いておく。
    global proc makeSphere1()
    {
    	sphere;
    	scale 1 3 1;
    }
    
    ここでプロシージャーの名前とファイル名の前半が同じであることに注意すること。
  3. viをファイルを書き込んで終了。(:wq)
  4. Script Editorの File → Source Script によってmakeSphere1.melを読み込む。
    前回と違って、読み込んだだけでは実行できないことに注意すること。
  5. コマンドラインまたはScript EditorからmakeSphere1()と打ち込んで実行する。
  6. スケールされた球が作成される。
  7. もしエラーがでた時はmakeSphere1.melを書き直して再実行する。
    この時、もう一度Script Editorの File → Source Script によって読み込み直さないと書き直したものが実行されないことに注意する。

上でFile → Source Script の代わりに File → Open ScriptによってScript Editorに表示してからEnterで実行しても良い。

プロシージャーの実行方法

MELのプロシージャーはC言語の関数に相当するものだが、C言語の関数はmainなど他の関数から呼んで実行しないと関数内の手続きは実行されない。 それと同じでMELのプロシージャーも Script Editor で読み込んだだけでは実行されない。
上の例を参考に説明すると、makeSphere1.melが読み込まれた時点ではspherescale 1 3 1というコマンドを順番に実行するmakeSphere1という名前の手続き(プロシージャー)をMayaに覚えさせるだけである。
その後、makeSphere1()と実行することによって初めてmakeSphere1の中のコマンドが実際に実行される。

また、上で説明したようにプロシージャーを実行する時はC言語風に makeSphere1() と打ち込んで実行できるが makeSphere1 のように()を省略しても実行できる。
() をつけないで実行した場合は、あたかもsphereのようにコマンドとして実行できている。
つまり、プロシージャーを定義するということは自分用のコマンドを作っているということでもある。

MELスクリプト(プロシージャー)の自動読み込み

もし、よく使用するプロシージャーがある場合、Mayaを立ち上げるごとにいちいちMELスクリプトを読み込んでいたのでは面倒である。
そのような場合には、 MELスクリプトをZ://maya/scriptsに入れておけば File → Source Script などで読み込む必要が無い。
ただし、Mayaの使用中にZ://maya/scripts内のMELスクリプトの内容を書き換えた場合は、もう一度読み込む必要がある。

練習

まとめ

参考


Prev | Next
Home | Contents
abe@injapan.net