このトピックは、初めて Maya Python プラグインを作成して実行する場合の手順について説明します。
既定では、Maya は 次のディレクトリに配置されたプラグインをロードしようとします。
Maya がプラグインをロードする既定の場所は複数存在する場合があります。詳細については、Maya ユーザ ガイドの「環境変数」セクションの「ファイル パス変数」を参照してください。また、この環境変数を設定するディレクトリのリストのコマンド ラインに getenv MAYA_PLUG_IN_PATH と入力することもできます。
オプションで、MAYA_PLUG_IN_PATH 環境変数の追加ディレクトリを定義し、これらのディレクトリからプラグインをロードすることができます。
Windows 7 の場合は、スタートメニューを開き、検索ボックスに「env」と入力し、Enter を押します。ユーザ変数(User variables)セクションで、新規(New)ボタンをクリックし、変数名として「MAYA_PLUG_IN_PATH」と入力します。選択するパスに変数値を設定します。後でこのパスにスクリプトを格納します。たとえば、変数値「%USERPROFILE%¥Documents¥scripts」は現在のユーザの My Documents¥scripts ディレクトリに対応します。複数のパスを指定するには、変数値をセミコロン「;」で区切ります。
Maya を起動すると、MAYA_PLUG_IN_PATH に含まれるディレクトリがウィンドウ > 設定/プリファレンス > プラグイン マネージャ(Window > Settings/Preferences > Plug-in Manager)に別のセクションとして表示されます。
Python および MEL Script Editor (Python and MEL Script Editor)ウィンドウは、ウィンドウ > 一般エディタ > スクリプト エディタ(Window > General Editors > Script Editor)にあります。Python プラグインは任意の外部テキスト エディタを使用して作成することもできますが、このトピックでは Maya にビルトインされた対話型スクリプト エディタを使用した手順を説明します。
スクリプト エディタの Python タブに、以下のプラグイン コードをペーストしてください。このコードは、呼び出されると「Hello World!」をスクリプト エディタに出力する単純なコマンドを作成します。その他の Python プラグインのサンプル(以下を含む)は、Developer Kit インストールの devkit/plug-ins/scripted フォルダにあります(「ビルド環境を設定する: Windows 環境(64 ビット)」を参照してください)。2.0 API を使用するプラグインの名前は、pyHelloWorldCmd.py などのように、'py' ではじまります。次のトピックでは、プラグインのプログラム構造を説明します。ここでは、最初のプラグインの実行に焦点を置きます。
import sys import maya.api.OpenMaya as om def maya_useNewAPI(): """ The presence of this function tells Maya that the plugin produces, and expects to be passed, objects created using the Maya Python API 2.0. """ pass # command class PyHelloWorldCmd(om.MPxCommand): kPluginCmdName = "pyHelloWorld" def __init__(self): om.MPxCommand.__init__(self) @staticmethod def cmdCreator(): return PyHelloWorldCmd() def doIt(self, args): print "Hello World!" # Initialize the plug-in def initializePlugin(plugin): pluginFn = om.MFnPlugin(plugin) try: pluginFn.registerCommand( PyHelloWorldCmd.kPluginCmdName, PyHelloWorldCmd.cmdCreator ) except: sys.stderr.write( "Failed to register command: %s\n" % PyHelloWorldCmd.kPluginCmdName ) raise # Uninitialize the plug-in def uninitializePlugin(plugin): pluginFn = om.MFnPlugin(plugin) try: pluginFn.deregisterCommand(PyHelloWorldCmd.kPluginCmdName) except: sys.stderr.write( "Failed to unregister command: %s\n" % PyHelloWorldCmd.kPluginCmdName ) raise
import sys import maya.OpenMaya as OpenMaya import maya.OpenMayaMPx as OpenMayaMPx # command class HelloWorldCmd(OpenMayaMPx.MPxCommand): kPluginCmdName = "spHelloWorld" def __init__(self): OpenMayaMPx.MPxCommand.__init__(self) @staticmethod def cmdCreator(): return OpenMayaMPx.asMPxPtr( HelloWorldCmd() ) def doIt(self,argList): print "Hello World!" # Initialize the script plug-in def initializePlugin(plugin): pluginFn = OpenMayaMPx.MFnPlugin(plugin) try: pluginFn.registerCommand( HelloWorldCmd.kPluginCmdName, HelloWorldCmd.cmdCreator ) except: sys.stderr.write( "Failed to register command: %s\n" % HelloWorldCmd.kPluginCmdName ) raise # Uninitialize the script plug-in def uninitializePlugin(plugin): pluginFn = OpenMayaMPx.MFnPlugin(plugin) try: pluginFn.deregisterCommand(HelloWorldCmd.kPluginCmdName) except: sys.stderr.write( "Failed to unregister command: %s\n" % HelloWorldCmd.kPluginCmdName ) raise
スクリプト エディタ(Script Editor)ウィンドウで、ファイル > スクリプトの保存(File > Save Script)を選択します。ファイル名を myFirstPlugin.py (拡張子 .py は省略可能。自動的に追加されます)に設定し、スクリプトを C:¥Users¥<username>¥Documents¥maya¥<version>¥plug-ins ディレクトリまたは MAYA_PLUG_IN_PATH 環境変数で定義したディレクトリの 1 つに保存します。
新規保存したスクリプトを Maya が認識しているか確認するには、プラグイン マネージャ(Plug-in Manager)ウィンドウに、ウィンドウ > 設定/プリファレンス > プラグイン マネージャ(Window > Settings/Preferences > Plug-in Manager)でアクセスし、更新(Refresh)ボタンを押します。プラグイン ファイルはここに表示されます。ロード(Loaded)または自動ロード(Auto load)チェックボックスはここではオンにしないでください。
新規作成されたプラグインを Maya にロードするには、2 つの方法があります。
import maya.cmds maya.cmds.loadPlugin("myFirstPlugin.py")
ここで作成したのは、「Command」プラグインです。つまり、このプラグインは、呼び出されたときに「Hello World!」を出力する新しいコマンドを定義します。プラグインが適切にロードされると、新しい MEL コマンドとして表示されます。また、Python モジュール maya.cmds 内の新しい関数として表示されます。このモジュールはすべての利用可能な Maya Python コマンド(利用可能な MEL コマンドのサブセット)を定義します。コマンドを実行するには、スクリプト エディタ内で次のコードを実行します。
import maya.cmds as cmds cmds.spHelloWorld()
スクリプト エディタには次の行が表示されます。ここには、「Hello World!」という出力とともにコマンドがエコーされます。
import maya.cmds as cmds cmds.spHelloWorld() Hello World!