Maya .NET API と Maya C++ API の違い

重要: .NET API は、Visual Studio 2015 でのみサポートされています。

Maya .NET API と Maya C++ API の主な違いは次のとおりです。

getter 関数は、値を返し、引数は持たず、アプリケーションの状態に対する識別可能なエフェクトを持たない関数です。getter 関数名は get、is、has、または can のプリフィックスから始まるか、C++ ヘッダー ファイルでは「const」関数として修飾されます。setter 関数は、単一の引数を持ち、set のプリフィックスで始まり、getter 関数と同じルート名を持つ void 関数です。対応する setter 関数(同じルート名)を持つ getter 関数は、読み書き可能なプロパティにマップされますが、setter 関数を持たない getter 関数は、読み取り専用プロパティにマップされます。プロパティの名前は getter 関数と同じですが、プリフィックスが除去されています。

場合によっては、新しいプロパティが既存のメソッド名と重複するため、プロパティの名前を変更しなければならい場合があります。Property という語が、新しいプロパティ名に追加されました たとえば、index()indexProperty になりました。

C# のプロパティに関する詳細については、MSDN (http://msdn.microsoft.com/ja-jp/default.aspx)および「C# プロパティ」を参照してください。

たとえば、MDagMessage::addParentAddedCallback(callback) の代わりに、MDagMessage.ParentAddedEvent += callback を実行します。

MSceneMessage クラスでは、enum Message の値で指定された各メッセージに独自のイベント ハンドラが含まれるようになったため、enum は有効ではなくなりました。たとえば、MSceneMessage::addCallback( MSceneMessage::kSceneUpdate, callback ) の代わりに、MSceneMessage.SceneUpdate += callback を実行します。

オブジェクトのインスタンスに関連するコールバック(MDagPathMPlug など)の場合、イベント ハンドラはそのオブジェクトのクラスで直接見つけることができます。たとえば、MModelMessage::addNodeAddedToModelCallback(obj, callback) の代わりに obj.NodeAddedToModel += callback (MObject 型の obj)を実行します。

メモリ リークが発生しないように、コールバックが不要になった場合は、コールバックを登録解除する(対応するイベント ハンドラからコールバックを除去する)必要があります。プラグインが Maya からアンロードされると自動的にコールバックの登録を解除する新しいメカニズムが追加されました。

イベントの使用方法を確認するには、Developer Kit インストールの devkit\dotnet\examples フォルダの pluginCallbacks サンプルを参照してください。C# イベントの詳細については、MSDN の「C# イベント」を参照してください。