userSetupスクリプト
自分で独自に作ったスクリプトを、Maya起動時に実行して欲しい場合はuserSetupスクリプトを用意してやります。Windowsの場合は
ユーザー名¥(マイ)ドキュメント¥maya¥バージョン¥scripts
の下にuserSetup.melまたはuserSetup.pyファイルを作成し、その中に実行したいコマンドを記述すると、Mayaを起動した時に実行してくれます。
例えば、Maya上でPythonを使用する場合、毎度毎度
userSetup.melとuserSetup.pyは実は実行するタイミングが全然違うんですよね・・・userSetup.pyの方が全然早い段階で実行してしまいます。
感覚的ですが、たぶん全体の流れはこんな感じだとおもいます。
何が困るって、Maya立ち上げた時に自分用メニューを追加したくても、そもそもGUIがないから作れないと言う、恐ろしい仕打ちを受けます。
でも今更melで書き直すなんてナンセンスですし、userSetup.melの方でpythonコマンドを使うのも美しくない・・・どうしたものかと困ってマニュアル読んだら、こんなコマンドが載ってました。
このコマンドはMayaがアイドル状態(つまり何も処理がない状態)になるまでこれで指定したコマンドの実行を遅らせてくれるというシロモノです。executeDeferred()の中には呼び出し可能オブジェクト(要は関数)を入れておけばOK!
一見すると大変面倒な仕様ですが、これはこれでメリットがあります。例えば環境変数を指定する場合(MentalRayシェーダのパスとか)をuserSeteup.pyで環境変数を設定しれやれば、バッチで指定するような感覚で環境変数を設定できそうです。(細かく試してないから違うかも)
上記コマンドをMaya起動後に実行すると、mentalrayカスタムシェーダを手動でロードする必要があるのですが、userSetup.pyに記述しておけばMaya起動時に自動的に上記で指定したパスに格納されているカスタムシェーダをロードしてくれます。
(上記コマンドの実行 → Maya起動 → プラグインのロードの順番のため)
逆に、mrFactoryコマンドなどはプラグインがロードされるまで使えないようで、userSetup.py中に使用するとエラーではじかれてしまいます。
色々ややこしいですねー
ユーザー名¥(マイ)ドキュメント¥maya¥バージョン¥scripts
の下にuserSetup.melまたはuserSetup.pyファイルを作成し、その中に実行したいコマンドを記述すると、Mayaを起動した時に実行してくれます。
例えば、Maya上でPythonを使用する場合、毎度毎度
import maya.cmds as mcと打つのが面倒い人も多数いるんではないでしょうか。そんな時に上記コマンドをuserSetup.pyに記述してやれば、Mayaを起動してすぐに使えるようになります。
■実行するタイミングが違う・・・
さて、ここまでは基本としてサラっと終了、問題はここから。userSetup.melとuserSetup.pyは実は実行するタイミングが全然違うんですよね・・・userSetup.pyの方が全然早い段階で実行してしまいます。
感覚的ですが、たぶん全体の流れはこんな感じだとおもいます。
Maya本体 ↓ userSetup.py ↓ GUIの構築 ↓ userSetup.melそう、なんとGUI構築よりも前にuserSetup.pyが実行されているのです!
何が困るって、Maya立ち上げた時に自分用メニューを追加したくても、そもそもGUIがないから作れないと言う、恐ろしい仕打ちを受けます。
でも今更melで書き直すなんてナンセンスですし、userSetup.melの方でpythonコマンドを使うのも美しくない・・・どうしたものかと困ってマニュアル読んだら、こんなコマンドが載ってました。
maya.utils.executeDeferred()
このコマンドはMayaがアイドル状態(つまり何も処理がない状態)になるまでこれで指定したコマンドの実行を遅らせてくれるというシロモノです。executeDeferred()の中には呼び出し可能オブジェクト(要は関数)を入れておけばOK!
import maya.cmds as mc def buildMyMenu(): mc.menu( l='My Menu', p='MayaWindow' ) mc.menuItem( l='test' ) import maya.utils maya.utils.executeDeferred( buildMyMenu )これをuserSetup.pyで指定しておけば、ちゃんとMayaの初期動作が終了してからこのコマンドが実行されるため、しっかりGUIにメニューが追加されます。よかった良かった(^^)・・・って昔これやったなぁ。やっぱメモっとかないと忘れますわ・・・
■モチロンメリットもありますよ
一見すると大変面倒な仕様ですが、これはこれでメリットがあります。例えば環境変数を指定する場合(MentalRayシェーダのパスとか)をuserSeteup.pyで環境変数を設定しれやれば、バッチで指定するような感覚で環境変数を設定できそうです。(細かく試してないから違うかも)
import os os.environ['MI_CUSTOM_SHADER_PATH'] = 'C:/mentalray/include' os.environ['MI_LIBRARY_PATH'] = 'C:/mentalray/lib'
上記コマンドをMaya起動後に実行すると、mentalrayカスタムシェーダを手動でロードする必要があるのですが、userSetup.pyに記述しておけばMaya起動時に自動的に上記で指定したパスに格納されているカスタムシェーダをロードしてくれます。
(上記コマンドの実行 → Maya起動 → プラグインのロードの順番のため)
逆に、mrFactoryコマンドなどはプラグインがロードされるまで使えないようで、userSetup.py中に使用するとエラーではじかれてしまいます。
色々ややこしいですねー
スポンサーサイト