3ds Max を初めて起動すると、MAXScript によってスタートアップ スクリプト ファイルが検索され、自動的にロードされ、実行されます。この機能は、常に使用する関数ライブラリを事前にロードしておく場合、カスタム UI 設定を行う場合、スクリプト プラグインを定義する場合、またはスクリプト ユーティリティ ロールアウトをロードする場合などに便利です。
3ds Max が起動すると、常に以下で説明する手順通りにスクリプトがロードされます。ソフトウェアの一部はまだアップできておらず、スタートアップ プロセスの別の段階にあります。スタートアップ プロセスの手順とその理由を理解するとコードの作成に役立ち、すべての関数とUI の自動ロードが正常に作動するようにできるようになります。
.ms
、.mcr
、.mse,
、および .mzp
のスクリプトを検索します。自動的にロードしないスクリプトがある場合は(他のスクリプトで明示的にロードするライブラリ スクリプトなど)、.mxs
拡張子を指定することができます。 この拡張子の付いたファイルは、MAXScript エディタによって実行可能ファイルとして認識されます。getMaxscriptStartupState()
関数を使用して、標準スクリプトまたはスタートアップ スクリプトが現在ロードされているのか、あるいはロード済みであるのかを判別します。システムのセキュリティを強化するため、隠しファイルやシステム アトリビュートが設定されたスタートアップ スクリプトはロードされません。隠しフォルダまたはシステム フォルダ(%LocalAppData%
および %ProgramData%
以外)にあるスクリプトもロードされません。これらの条件に一致するスクリプトが見つかった場合は、スクリプトのパスと名前、ファイル属性、および「アクション: ロードされていません」というメッセージとともにシステム ログに記録されます。
3ds Max 2021.3 Update 以降で使用可能です。
3ds Max 2022.3 Update 以降: 3ds Max インストール ディレクトリ ツリー内にあるスタートアップ スクリプトは、3ds Max のインストール ディレクトリまたはその上のディレクトリが非表示になっている場合でもロードされます。インストール ディレクトリの下のディレクトリ(C:\Program Files\3ds Max\scripts
など)が非表示になっている場合、そのディレクトリ内のスタートアップ スクリプトはロードされません。このポリシーは、プラグイン パッケージ内のスタートアップ スクリプトにも適用されます。この場合は、プラグイン パッケージのディレクトリまたはその上にあるディレクトリを非表示に設定しても、その中のスタートアップ スクリプトはロードされます。
3ds Max は stdplugs\stdscripts にある初期状態のスクリプトの評価を行います。これらのスクリプトでは、3ds Max ソフトウェアのベースとなるスクリプト化された要素に必要な関数を定義しています。
独自の MacroScript での使用のためにいくつかの関数やグローバル変数を定義する必要がある場合は、stdplugs\stdscripts の .ms ファイルに格納してください。これにより関数やグローバル変数を最初に定義できます。
次に、3ds Max は、[カスタマイズ...] (Customize...) > [パスを設定...](Configure Paths...) > [プラグイン] (Plug-Ins)で定義されたディレクトリとプラグイン パッケージ、およびそのサブディレクトリ内のスクリプト ファイルをロードします。通常のプラグインのロード方法とは異なる点に注意してください。この方法は通常のプラグインをロードする方法と異なります。 プラグインは指定したパスからのみロードされ、サブディレクトリは検索しません。その他のスクリプト、 特に MacroScripts で使用する関数、メソッド、構造体を定義できます。
この時点では、3ds Max シーンは作成されず、ビューポートも作成されていません。 これらのスクリプトでは、シーン オブジェクトは作成できず、また UI 関連の作業は何もできません。もちろん、これらの操作を実行する関数を定義できますが、この時点ではこれらの関数の呼び出しはできません。
このとき startup.ms という名前のスクリプト ファイルが無視されます。こうしておくと、スクリプト プラグインのスクリプトを プラグイン フォルダに配置して自動的にロードされるようにすることができます。これらのスクリプトは DLL プラグインのように管理でき、管理しやすいようにスタートアップ スクリプトを独自のディレクトリ内でグループ別に構成することができます。ネストされたディレクトリが検索されないようにするには、「(old-versions)」のように、名前をカッコ()で囲みます。こうすると、ディレクトリ ベースのグループに対して、スクリプトを有効または無効に設定できます。
次に、プラグイン パッケージ内に見つかったスクリプトが評価されます(Autodesk App Store の AppBundle など)。プラグイン パッケージ内のスクリプトは、この手順の実行中は、PreStartupScript (PackageContents.xml
ファイル内の「pre-start-up scripts parts」)として指定されたスクリプトのみが実行されます。この手順では、3ds Max のUI はまだ表示されないことに注意してください。
次に、ui\macroscripts にある MacroScript .mcr ファイルが評価されます。これらのファイルは UI に表示できるアクション項目を定義します。この時点では、まだ UI は作成されておらず、MacroScripts はその関連ボタンを埋め込む際に必要です。
最後に、startup フォルダにある startup.ms および任意のスクリプトが評価されます。この時点で、シーン、ビューポート、および UI が表示されます。ここでは、必要に応じて操作できます。
3ds Max 9 以降では、3ds Max システム スタートアップ スクリプト ディレクトリにあるスタートアップ スタートアップ スクリプトが最初に実行され、次に ユーザ スタートアップ スクリプト ディレクトリ内のスタートアップ スクリプトが実行されます。この動作により、Max システムのスタートアップ スクリプト ディレクトリとは別にユーザのスタートアップ スクリプト ディレクトリを設定することができます。最後に、PostStartupScript (PackageContents.xml ファイル内の「post-start-up scripts parts」)として指定されたプラグイン パッケージのスクリプトが実行されます。
MAXScript では、まず以下のディレクトリで startup.ms ファイルが、以下の順序で検索されます。
3ds Max 2022.1 Update 以降、これらのフォルダは検索されなくなりました。
startup.ms が検索されるディレクトリのリストについては、「ファイル アクセス関数の検索動作」を参照してください。
MAXScript は最初に startup.ms が見つかったところで検索を停止します。
スタートアップ スクリプト ファイルの自動ロードを非アクティブにするには、[基本設定] (Preferences)ダイアログ ボックスの [MAXScript]ページにある [MAXScript オート スタート](Auto Start MAXScript)オプションをオフにします。詳細については、主要製品オンライン ヘルプの「MAXScript 基本設定」を参照してください。
次の 2 つの場合について考えてみましょう。
3dsmax.exe somefile.max
3dsmax.exe somefile.max -U MAXScript somescript.ms
.MAX
ファイルをデスクトップの 3ds Max ショートカットにドラッグするいずれの場合も、3ds Max は上記の説明どおりに開始され、ファイルをロードします。
スクリプト フォルダとコールバックの実行順序は次のとおりです。
フォルダ/コールバックの処理 | コメント |
---|---|
stdplugs\stdscripts\ |
3ds Max シーンおよび UI はまだ作成されていません。 |
plugin paths |
3ds Max シーンおよび UI はまだ作成されていません。 |
MacroScripts |
UI はまだ作成されていません。 |
\Startup |
UI が作成されます。コールバックの前にスタートアップ スクリプトがロードされます。 |
#filePreOpenProcess |
シーンが作成されます。 |
#filePreOpen |
ファイル オブジェクトにはまだアクセスできません。 |
.MAX File |
コマンド ライン/ドロップされたファイルをロード |
#filePostOpen |
シーン オブジェクトにはこの後アクセスできます。 |
#filePostOpenProcess |
ファイルのロードが完了 |
Command Line -U MAXScript script |
コマンド ライン スクリプトを実行 (存在する場合) |