Maya 2018 には、API に対する更新や追加機能がいくつか含まれていて、プラグインの再コンパイルが必要になります。また、プラグインの開発を効率化する新しい方法も取り入れられています。 更新内容は次のとおりです。
Maya 2018 には新しい OpenMaya ネームスペースが導入されています。この導入は、Maya プラグインの開発中断を最小化し、複数の更新にわたって Maya API のバイナリ互換性が維持されるように拡張する API を提供する取り組みの一環として行われています。OpenMaya ネームスペースは、すべての OpenMaya API モジュール(OpenMaya、OpenMayaUI、OpenMayaRender、OpenMayaFx、OpenMayaAnim)を対象としています。
OpenMaya ネームスペースを使用するには:
通常、プラグインに対して何らかのアクションを行う必要はありません。コンパイラはシンボルをネームスペース付きのシンボルに自動的に解決します。
LFLAGS += -Wl,-exported_symbol,__Z16initializePlugin7MObject \
-Wl,-exported_symbol,__Z18uninitializePlugin7MObject
VFX 参照プラットフォームをサポートするために、Maya 2018 API は C++ 11 の機能をサポートするようになりました。 nullptr、final、override など、ヘッダ ファイルで使用される C++11 の新しいキーワードなどが該当します。以前のバージョンの C++ を使用してこの API に対してプラグインをコンパイルすると、次のようなエラーが表示されることがあります。
エラー: ?nullptr? はこのスコープ内で宣言されていません
通常、このエラーは C++ 98 内に nullptr がない場合に表示されます。
Maya 2018 以降では、非推奨のメソッドは OPENMAYA_DEPRECATED C++ アトリビュートを使用してマークされています。例:
OPENMAYA_DEPRECATED(version, "message")
新しいマーキング システムでは、マークされたメソッドが呼び出されると、コンパイラに関する警告が生成されます。これにより、都合のいいときにプラグインから非推奨メソッドを除去することができます。このような警告の例:
警告 C4996: 'MPxTransform::validateAndSetValue': 代わりに validateAndSetValue(const MPlug&, const MDataHandle&) をオーバーライドしてください。 必要に応じて、MDGContext::current() を使用してコンテキストを取得してください。
コンパイラで警告をエラーとして扱う(treat warning as error)が有効になっていて、移行中に関連する構築エラーが発生した場合は、非推奨の警告を無効にすることができます。
非推奨の警告を非表示にするには、次の操作を実行します。
MSVC | /Wd"4996" |
ICC | -diag-disable 1786 |
Clang | -Wno-error=deprecated-declarations |
GCC | -Wno-error=deprecated-declarations |
非推奨をエラーとして扱うには、次の操作を実行します。
MSVC | /We"4996" (/D_CRT_NONSTDC_NO_DEPRECATE) |
ICC | -diag-error 1786 |
Clang | -Werror=deprecated-declarations |
GCC | -Werror=deprecated-declarations |
非推奨メソッドの下位互換性と非推奨メソッドのオーバーライドの詳細については、「Maya API を非推奨にする」を参照してください。
Maya 2018 では、Maya API に現在の評価コンテキストという概念が導入されています。新しいメソッドおよび新しい評価スキーマによって、コードのコンテキスト評価が効率化されます
以前のバージョンの Maya では、標準以外のコンテキストで評価する場合、そのコンテキストをメソッドに渡す必要があります。例:
MPxTransform::getTranslation( MSpace::Space, const MDGContext&, MStatus* );
これにより、コンテキストがさらに次のメソッドに渡されて、コンテキストを渡すメソッドが長いチェーンを形成することがあります。現在の評価コンテキストという概念と新しいユーティリティが導入されたことに伴い、このチェーンを作成する必要はなくなりました。次の操作を実行できるようになりました。
コンテキスト パラメータを含む既存のメソッドを引き続き使用することができますが、コンテキストに依存しないバリエーションを使用することをお勧めします。例:
return myTransform.getTranslation(MSpace::kTransform, myNewContext, &status);
機能的に以下と同等になりました。
{ MDGContextGuard ctxGuard( myNewContext ); return myTransform.getTranslation( MSpace::kTransform, &status ); }
ほとんどのコードは現在のコンテキストで評価する必要があるため、通常の場合、myNewContext は不要です。例外は、代わりのコンテキストで意図的に評価される時間ベースのキャッシュとゴースト化などです。
別のコンテキスト内で呼び出される長いシーケンスがある場合は、現在のコンテキストのスコープ付き変更を使用することができます。例:
{ MDGContextGuard tempContext( myDifferentContext ); firstPlug.getValue( value1 ); secondPlug.getValue( value2 ); thirdPlug.getValue( value3 ); … }
複数のメソッド内をコンテキストが通過しないようにします。マルチスレッド評価に対するコードの安全性を維持するには、常に現在のコンテキストを使用します。
Maya のワークスペース システム内でドラッグ、ドッキング、保存できるカスタム UI を作成するには、ワークスペース コントロールを使用します。ワークスペース コントロールは、workspaceControl コマンドを使用して作成することができます。ドッキング可能な UI を作成するために以前に使用されていた dockControl コマンドは、ワークスペース コントロールで置き換えられています。dockControl 機能はサポートされなくなりました。つまり、内部 UI を含むウィンドウを作成し、content フラグを介してこのウィンドウを dockControl コマンドにアタッチしてはなりません。
MEL、Python、および C++ を使用してワークスペース コントロールを作成することができます。詳細については、「ワークスペース コントロールを記述する」を参照してください。
Python のサンプルについては、Maya 開発キットの pythonScripts フォルダ内の dockableWorkspaceWidget.py のサンプルを参照してください。
C++ のサンプルについては、Maya API の workspaceControlCmd.cpp のサンプルを参照してください。
『Maya ビューポート 2.0 API ポーティング ガイド』が変更されて、Maya 2018 API に対する変更が追加されました。更新されたホワイトペーパーでは、プラグイン ロケータ(MPxLocatorNode)をビューポート 2.0 に移行するための方法についても解析しています。
Maya ビューポート 2.0 のホワイトペーパーは、http://www.autodesk.com/developmaya で参照できます。
Maya の API のバージョンが更新されました(現在の MAYA_API_VERSION は 20180000 です)。Maya 2018 に対してコンパイルされたすべてのプラグイン(Maya 2017 Update 1、2、3、または 4 を含む)は、このバージョンの Maya で認識されるように、Maya 2018 に対して再コンパイルする必要があります。
Windows および Mac OS X でプラグインとスタンドアロン アプリケーションをコンパイルするには、以下がインストールされている必要があります。