環境
- Windows
- Autodesk Maya 2025.3
イベントに駆動する処理の作成
Mayaではファイルを開くなどの特定のイベントに合わせて駆動する処理を設定することが可能です。scriptJob コマンドを使用してスクリプトとして作成することも可能ですが、ここではユーザーがON, OFFできるプラグインとして作成する方法を記載します。
DevKit にC++での実装例として pluginCallbacks.cpp がありますので、こちらを参考にPython版のプラグインの作成例を示します。
プラグインの例
以下に「ファイルを開く」というイベントの「後」に、「"After Open"とprintする」処理を行うプラグインの例を記載します。
なお、以下のコードは説明のわかりやすさを重視したものです。コーディングのベストプラクティスを示したものではありませんのでご注意ください。
from typing import Any
import maya.api.OpenMaya as om
_AFTER_OPEN_ID = None
def initializePlugin(plugin: om.MObject) -> None:
global _AFTER_OPEN_ID
if _AFTER_OPEN_ID is not None:
return
_AFTER_OPEN_ID = om.MSceneMessage.addCallback(
om.MSceneMessage.kAfterOpen,
_after_open_callback,
None,
)
def uninitializePlugin(plugin: om.MObject) -> None:
global _AFTER_OPEN_ID
if _AFTER_OPEN_ID is None:
return
om.MSceneMessage.removeCallback(_AFTER_OPEN_ID)
_AFTER_OPEN_ID = None
def _after_open_callback(client_data: Any = None) -> None:
print("After Open")
プラグインのエントリポイント
Mayaではプラグインのエントリポイントとして、ロード用に initializePlugin
, アンロード用に uninitializePlugin
という名前で実装する必要があります。
今回の例はイベントに合わせて駆動する処理を設定するプラグインであるため、ロード時にはどのイベントに対して何の処理が動くかを登録し、アンロード時にはロード時に登録した情報を解除することになります。その処理を実装するのが initializePlugin
、uninitializePlugin
となります。
コールバックの登録と削除
Maya にはシーン関連のコールバックを登録・解除するクラスとして MSceneMessage
クラスがあります。登録用のメソッドはイベントに応じて使用するメソッドが異なるので注意してください。(今回の例ではファイルを開いた後に実行する処理を登録出来る addCallback
メソッドを使用します)
addCallback
メソッドの引数については message
、function
、clientData
の3つがあります。
-
message
はコールバック関数をトリガーするタイミング (シーンメッセージの指定) -
function
はコールバック関数 -
clientData
はコールバック関数に渡すユーザー定義データ
戻り値については登録IDが返されます。
また削除に関しては removeCallback
メソッドを使用し登録時のIDを指定して削除します。
コールバック関数
_after_open_callback
関数の箇所です。イベント時に実行したい処理を実装します。コールバック関数では登録時に設定するclientDataを受け取って利用することも可能です。