3ds Max 2012 では、スクリプト カスタム アトリビュートをシーン ファイルからロードするときにバージョン番号を処理できるようになりました。
スクリプト カスタム アトリビュートの定義は、ILoadImp::LoadDllDir に読み込まれる、「ScriptedCustAttribDefs」ストリーム内のシーン ファイルに保存されます。これは、ファイルのロード処理の早い段階、つまり使用済みクラスのリストを読み込む直前に呼び出されます。なぜなら、スクリプト カスタム アトリビュートのクラスが使用済みクラスに含められるからです。
3ds Max 2012 よりも前のバージョンの 3ds Max では、スクリプト カスタム アトリビュートの定義を読み込むときにスクリプト カスタム アトリビュートの定義と既存の定義が正確に一致しなかった場合、ロードされた定義が評価され、そのスクリプト カスタム アトリビュートの既存のインスタンスがすべて ロードされた定義に変換されました。
3ds Max 2012 では、ロードされた定義と既存の定義が正確に一致せず、かつロードされた定義のバージョン番号が既存のバージョン番号よりも大きい場合にのみ、ロードされた定義が評価されるようにします。
以前のバージョンの 3ds Max では、スクリプト カスタム アトリビュートの定義がロードされた定義に必ず更新されたため、シーン ファイルのロード中に作成されたインスタンスを既存の定義に移行する必要はありませんでした。ただし、3ds Max 2012 以降では、この移行を行う必要があります。
移行のための内部ロジックは既に存在していました。スクリプト プラグインに対して同じ処理が実行されるからです。
ただし、この移行を行うには、「Config」ストリームからロードされ、まだ読み込まれていないデータが必要になります。
3ds Max 2012 よりも前のバージョンのロード順序:
場合によっては、ステップ 3 でシーン評価が行われることがあります。この評価にスクリプト プラグインの評価が含まれる場合は、エラーが発生する可能性があります。この時点では、スクリプト プラグインのパラメータ ブロックがスクリプト プラグインの定義に一致していない可能性があるからです。
3ds Max 2012 以降のロード順序:
スクリプト カスタム アトリビュートの定義(またはスクリプト プラグインの定義)を評価した場合は、以前に存在していた定義のバージョン番号に関係なく、評価した定義が常に使用されるようになります。