このトピックは、初めて 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 プラグインを作成する 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' ではじまります。 次のトピックでは、プラグインのプログラム構造を説明します。ここでは、最初のプラグインの実行に焦点を置きます。 Python API 2.0: Python API 1.0: スクリプト エディタ(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") プラグイン マネージャ(Plug-in Manager)ウィンドウを表示したときに、プラグインのロード(Loaded)チェックボックスがオンになっていることを確認します。 ここで作成したのは、「Command」プラグインです。つまり、このプラグインは、呼び出されたときに「Hello World!」を出力する新しいコマンドを定義します。プラグインが適切にロードされると、新しい MEL コマンドとして表示されます。また、Python モジュール maya.cmds 内の新しい関数として表示されます。このモジュールはすべての利用可能な Maya Python コマンド(利用可能な MEL コマンドのサブセット)を定義します。コマンドを実行するには、スクリプト エディタ内で次のコードを実行します。 スクリプト エディタには次の行が表示されます。ここには、「Hello World!」という出力とともにコマンドがエコーされます。 これで 初めての Maya Python プラグインが実行されました。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
import maya.cmds as cmds
cmds.spHelloWorld()
import maya.cmds as cmds
cmds.spHelloWorld()
Hello World!