スクリプト プラグインの更新

MAXScript では、3ds Max での作業中にスクリプト プラグインを再定義し、現在のシーン内やロードするシーン内の古いインスタンスを、自動的に新しい定義に更新できます。これは、スクリプト プラグインを再定義するスキーム移行と呼ばれる機能です。MAXScript では、古いバージョンのインスタンスと新しい定義間のローカル変数名、パラメータ ブロック名、パラメータ名を一致させることによって、この機能を実行します。同じ名前の変数、パラメータ ブロック、パラメータをそのまま保持し、新しい定義に存在しない名前を削除し、必要に応じて変数、パラメータ ブロック、パラメータを新規作成して既定値を入力します。

サポートされる変更の種類には制限があります。特に、次の制限が挙げられます。

シーン ファイルに保存されたスクリプト プラグイン オブジェクトの古いバージョンを更新するために、これと同じメカニズムが採用されています。これは、3ds Max が classID: によってシーン ファイル内のオブジェクトとクラス定義を一致させるため、シーンが保存されたときに有効となったスクリプト プラグインの定義で指定した classID: が定義内の現行の classID: と同じである場合にのみ機能することに注意してください。

スクリプト プラグイン内の update イベント ハンドラを指定することができます。これは、オブジェクトがこのスキーム移行メカニズムによって更新されるたびに呼び出されます。これをさらに使いやすくするために、MAXScript ではスクリプト プラグインのバージョン番号がサポートされています。プラグインの特定インスタンスのバージョンには、任意のプラグイン ローカル関数やハンドラにある特別なローカル変数 version を介してアクセスできます。 update イベント ハンドラがスキーム移行時に呼び出される場合、古いバージョン番号はそのままで有効ですが、更新後ただちに現行のバージョン番号に変更されます。

例:

plugin helper lightMaster
name:"Light Master"
classID:#(12345,54321)
extends:Dummy
invisible:true
replaceUI:true
version: 3 -- set current version to 3
(
parameters main rollout:params
...
on update do
(
if version == 1 then ... -- do something special for v1 instances
)
...
)
注:前述の自動移行のほかに、特別な手動変換を行う場合にのみ、このように明示的にバージョンにアクセスし、更新する手法を使用する必要があります。

3ds Max 7 で導入されたオプションの remap: キーワードでは、既存定義の更新時に定義内のパラメータ名を変更できます。

このキーワードは 2 要素配列を引数にとります。それぞれの要素には、文字列リテラルまたは名前値の配列が含まれます。2 つの配列のサイズは同じにする必要があります。

最初の配列内の名前は既存のパラメータ名で、2 番目の配列内の名前は新しいパラメータ名になります。既存のプラグイン インスタンスの移行中にパラメータ名が読み込まれるため、パラメータ名は最初の配列内で検索されます。名前が見つかった場合、このパラメータに関連するデータは、2 番目の配列内の対応する場所にあるパラメータ名に移されます。パラメータ名が最初の配列内で見つからなかった場合、パラメータ名は再マップされません。2 番目の配列内のパラメータ名が、新しい定義のパラメータ名に一致しない場合、このパラメータ データは、新しい定義には移されません。

現行のシーンまたはその他のシーンに既存のプラグインのインスタンスが存在しない場合は、単にプラグインを削除し、スクリプト プラグインの定義を自由に変更します。上記のバージョン更新における注意事項は、使用するスクリプト プラグインの古いバージョン オブジェクトをサポートする場合にのみ適用されます。

関連事項