0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

Mayaでシーンイベントに駆動するプラグインを作成する

Posted at

環境

  • 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 という名前で実装する必要があります。

今回の例はイベントに合わせて駆動する処理を設定するプラグインであるため、ロード時にはどのイベントに対して何の処理が動くかを登録し、アンロード時にはロード時に登録した情報を解除することになります。その処理を実装するのが initializePluginuninitializePlugin となります。

コールバックの登録と削除

Maya にはシーン関連のコールバックを登録・解除するクラスとして MSceneMessage クラスがあります。登録用のメソッドはイベントに応じて使用するメソッドが異なるので注意してください。(今回の例ではファイルを開いた後に実行する処理を登録出来る addCallback メソッドを使用します)

addCallback メソッドの引数については messagefunctionclientData の3つがあります。

  • message はコールバック関数をトリガーするタイミング (シーンメッセージの指定)
  • function はコールバック関数
  • clientData はコールバック関数に渡すユーザー定義データ

戻り値については登録IDが返されます。

また削除に関しては removeCallback メソッドを使用し登録時のIDを指定して削除します。

コールバック関数

_after_open_callback 関数の箇所です。イベント時に実行したい処理を実装します。コールバック関数では登録時に設定するclientDataを受け取って利用することも可能です。

参考

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?