MaxScriptを書こう ~その15
マクロスクリプトとは
MaxScriptで作ったツールは、メニューの「スクリプトを起動」から起動するか、またはスクリプトエディタに読み込んで評価(Ctrl+E)することで起動できます。が、これは普段使うにはあまり気軽な方法とは言えません。ボタンを押せば起動するとか、ショートカットで起動するとかしたいものです。
そのような、ボタンやメニュー、ショートカットなどから起動できるようにするのは、マクロスクリプトという形で記述する必要があります。「え?今まで作ってきたあれは書き直さないといけないの?」と思われるかもしれませんが、もちろんそんなことはありません。
マクロスクリプトというのは簡単に言ってしまうと、スクリプトとして書いたものにラベルをつけたもの、というような印象です。全体をブロックとして囲ってしまい、その外側にマクロスクリプトとして必要なものを書き足すだけでできてしまいます。
マズはマクロスクリプトの定型を見てみましょう。
macroscript マクロスクリプトの名前
ButtonText:"ボタン化したときボタンに表示される文字"
Category:"マクロスクリプトのカテゴリ"
(
スクリプトの中身
)
このような感じです。非常に簡単ですね。「スクリプトの中身」というところに、これまで作ってきた例のスクリプトを丸ごと書けばOKです。
マクロスクリプトは3dsmaxに認識させるためにまず一度評価する必要があります。評価するとそのときのユーザのユーザマクロフォルダ(#usermacros)に内容が.mcr形式のファイルとして保存されます。同じ名前、カテゴリのマクロスクリプトを評価するたびに、ユーザマクロフォルダ内の.mcrファイルが更新されていきます。
やってみましょう。
macroScript adjustPosTool
ButtonText: "AdjustPos"
Category:"MF_Tools"
(
FileIn "$userScripts\\ro_adjustPos.ms"
)
スクリプトの中身を書くところにはFileInでスクリプトファイルを実行するような処理を書いてみました。
これを実行するには、前回まで作ってきたツールをro_adjustPos.msというファイル名でユーザスクリプトフォルダに保存しておく必要があります。もちろんro_adjustPos.ms内でincludeしているcommonLib.msも同じくユーザスクリプトフォルダに入れておきます。
ここまでできたら上記のマクロスクリプトを評価(Ctrl+E)してみましょう。マクロスクリプトにエラーがなく、評価が成功した場合はリスナーに5桁の数字が表示されます。
数値自体は環境によって異なるので画像と違ってもなんら問題ありません。
評価が成功すると、このマクロスクリプトは3dsmaxからいつでも呼び出せるようになります。3dsmaxを終了して改めて起動しても継続して使うことができるのです。
マクロスクリプトの使い方
マクロスクリプトは一般に、何らかのメニューに登録して使います。メニューの「カスタマイズ→ユーザインタフェースのカスタマイズ」を開きます。
上部にタブがあり、さまざまなメニューにマクロを割り当てることができます。どのタブでも基本は同様で、「カテゴリ」でマクロスクリプト内に書いたカテゴリを探して指定します。するとそのカテゴリに属しているマクロだけがリストに残ります。
あとはそれにショートカットキーを割り当てたり、クアッドメニューやメインメニューに載せたり、ツールバーにボタンを置いたり、好きなように設定して使うことができます。
ここではためしにクアッドメニューに追加してみました。クアッドメニュー上での表記は、マクロスクリプト内で「ButtonText」として設定したものになります。このメニューを押すと私たちのadjustPosツールが起動します。
このように、スクリプトをマクロスクリプト化すると大変便利に使えるようになります。何かツールを作ったらどんどんマクロ化して登録していきましょう。
ちなみに、マクロスクリプトはボタンやメニューなどから呼び出されたときに中身が評価されるので、今回のように中の処理を全部ファイルにまとめてある場合、FileInで書いてもincludeで書いても同じ結果になります。
今回のまとめ
- スクリプトをメニューやボタンから起動するためにはマクロスクリプトにする必要がある
- マクロスクリプトとして一度評価するとユーザマクロフォルダに保存されて次回からも継続して使える(同じユーザのみ)
おわりに
以上でadjustPosツールは一旦完成です。
「MaxScriptを書こう」と題して15回に渡って簡単なツールを作ってみましたが、いかがでしたでしょうか。
このチュートリアルがスクリプトに親しむきっかけになることを願っています。
ディスカッション
コメント一覧
まだ、コメントがありません