AmanatsuKnit’s CG-note

Autodeskの3DCGソフト「Maya」について学んだことをまとめていきます。

スクリプト入門中 〜その1〜

はじめに

私は初めてMELを使ってみようと思ったときに、実行方法が分からず困ったことがありました。

とりあえず拾ってきたMELの中身をスクリプトエディタにそのままコピペして実行してみるも何も起こらず、どうして?って感じでした。

(おとなしくREADME読めよっていうツッコミは置いといて・・・)

ということで、今回はソースコードをそのまま実行しても何も起きないタイプのMELの実行方法についての記事です。

これさえ読めばREADMEがなくても自力で実行できるようになる!!
・・・とは言い切れませんが、殆どの場合で実行できるようになるでしょう。

MELを実行するまでの流れ

Mayaを立ち上げる前の準備

MELを実行するためにはまず最初にやらなければいけないことがあります。

それが、以下のディレクトリにMELを格納することです。

Windowsの場合

C:\ Users \ <ユーザー名> \ Documents \ maya \ <version> \ scripts

Macの場合

~ / ライブラリ / Preferences / Autodesk / maya / <version> / scripts

この「scripts」フォルダの中にMELを格納していないと、Mayaが起動時にMELを読み込んでくれず、実行することが出来ません。
(後から読み込ませる方法も一応ありますが、ここでは割愛します。)

なので、MELを拾ってきたらまずはここに格納しましょう。

MELの実行の仕方

先ほどのscriptsフォルダにMELを格納してMayaを起動したら、次はいよいよMELを実行します。

もちろん、今回は冒頭でも説明したソースコードをそのまま実行しても何も起きないタイプのMEL」を実行します。

実は、こういったタイプのMELの実行方法には1つのシンプルなルールのようなものがあります。
それは、コマンドラインに「MELのファイル名();」と打てば実行出来るということです。

例えば仮に「HelloWorld.mel」があったとしたら、これで実行出来ると思います。

HelloWorld();

中には例外もありますが、殆どの場合はこれで実行出来るでしょう。
なんなら、();をつけずにファイル名をそのまま打っても実行できます。

やったね!

なぜ実行できるのか

勘違いを招かないために最初に説明しておきますが、「ファイル名が実行するためのトリガーになる」というわけではありません。
むしろMELを実行するうえでは殆ど関係ないと言ってもいいでしょう。

では、なぜ実行できたのでしょうか?

それは「ソースコードをそのまま実行しても何も起きないタイプのMEL」の正体であるプロシージャというものの中に秘密が隠されています。

プロシージャ

で、この「プロシージャ」とはいったいどういったものなのかというと、Maya上で実行したい処理内容を纏めたコマンドです。

先ほどの例でも使った架空のMEL「HelloWorld.mel」がプロシージャを定義するためのMELだったとしたら、きっと中身はこうなっているでしょう。

global proc HelloWorld(){
    print "Hello World!";
}

解説していきます。

まず最初の行に出てきた「global proc」がグローバルプロシージャの宣言をするためのもので、それに続く「HelloWorld()」がプロシージャ名になります。
そして、2行目の{}で囲われた「print "Hello World!";」という文章が処理内容となっております。

これらを纏めてMayaに読み込むことで、プロシージャ名でつけた「HelloWorld」という名の、「print "Hello World!"」という処理を実行できるがコマンドがMaya上で使えるようになるのです。

まとめるとこうです。

global proc [プロシージャ名=Mayaで実行するためのコマンド](){
    [実際に実行される処理];
}

これでMayaでMELが実行される原理がわかりました。 それでは最後に、ファイル名で実行できた理由についてです。

ファイル名で実行できた理由

実は、MELを書く人・配布する人の間では「ファイル名=実行用のコマンド名」にするのが暗黙の了解となっているのです。

それが、ファイル名でMELを実行できた謎の答えです。

何故かというと理由は単純で、どうすれば実行出来るか分かりやすいからです。

このルールを知っている人ならREADMEを読まなくても大体のMELは実行できるでしょう。

まとめ

この「ファイル名=実行コマンド名」ルールは以外と有名な話だったりするのですが、知らない人からすればどうでしょう?
だれもファイル名をコマンドラインに打ち込めば実行できるなんて思わないでしょう。

なので、皆さんには今回の記事で以下のことを知ってもらえれば幸いです。

  • MELのソースコードをそのまま実行しても何も起きないのは、そのMELがプロシージャを定義するためのものだから
  • そういったMELは大体「ファイル名」をコマンドラインに打てば実行できる
  • 何故なら、MELには「ファイル名=実行コマンド名」にするという暗黙のルールがあるから

これでも実行できなかったら、面倒臭いですがもうファイルの中身を見て何が実行するためのコマンドか探すしかないです・・・

おわりに

というわけで、「MELを実行したいならとりあえずファイル名をコマンドラインに打て」という話でした。

私はこのルールを知ってから大体のMELは起動に困ったことがありません。
むしろ、ソースコードそのまま打って実行できるほうが怖いとすら思っています・・・

なので、自分でMELを書くときも「ファイル名=実行用コマンド名」にするように気をつけています。 そうしたことで人に自分の作ったMELの実行方法を説明をするときも「コマンドラインにファイル名打ったら起動します!」というだけで伝わるので便利です。

これからMELを始める人はぜひ試してください。

以上です。