デフォルトでは、Unity はメインエディタープロセスでアセットを 1 つずつ順番にインポートします。しかし、Unity は一部のアセットタイプに対して並行インポートもサポートしています。並行インポートは複数のプロセスを使用してアセットを同時にインポートするため、デフォルトの順番にインポートする方法よりも高速です。
並行インポートを有効にするには、Edit > Project Settings > Editor の順に移動し、Asset Pipeline セクションの下にある Parallel Import チェックボックスを有効にします。
Unity の Parallel Import 機能は、特定の種類のアセットのみをサポートしています。これは、標準的なアセットデータベースの更新を実行する場合 (エディターが Project フォルダー内の新しいまたは変更されたアセットを検出し、自動的にそれらをインポートする) にのみ適用されます。
Unity が並行インポートできる具体的なアセットの種類は以下の通りです。
その他の種類のアセットは、アセットデータベースの更新時に常に順番にインポートされます。
一部の Asset Database API メソッドでも、Texture または Model アセットのインポート、更新、作成の際にそのメソッドを使用する場合には、この設定が適用されます。例えば、以下のメソッドです。
並行インポートは Unity エディターの別個のワーカーインスタンスで動作するため、テクスチャやモデルのインポートを処理する AssetPostprocessors も、メインエディタープロセスではなくそのインスタンスで有効になります。
これらのプロセッサーの副作用は、予期しない問題を引き起こす可能性があります。例えば、ポストプロセスの実行中に C# クラスの静的変数を変更した場合、その変更はエディターで実行されるコードには影響を及ぼしません。
ポストプロセッサーのために書いたコードは常に自己完結型で決定論的である必要があり、これにより、実行中のコンテキストが変更されるべきではありません。例えば、エディターの設定が変更されたり、ディスク上に新しいアセットが作成されたりしてはなりません。
これらのルールに従うことで、プロセッサーコードの並列スレッドの問題を回避でき、結果が常に一貫したものになります。
Asset Pipeline の設定には、インポートワーカープロセスの動作を制御するための 3 つの設定があります。これらの設定は、プロジェクトごとに異なります。
| 設定名 | 説明 |
|---|---|
| Desired Import Worker Count | インポートパイプラインが並列で実行するのに最適なインポートワーカープロセスの数。 |
| Standby Import Worker Count | アイドル状態であっても維持するワーカープロセスの最小数。 この数より多くのワーカープロセスがある場合、Unity は一定時間アイドル状態が続いたインポートワーカーをシャットダウンしてシステムリソースを解放します。このプロパティを使用すると、アイドル状態のプロセスがある場合に、新しいインポートワーカープロセスの起動にかかる時間と比較して、システムリソースのバランスをどのようにするかを管理できます。 モデル、アニメーション、テクスチャ作業を頻繁に繰り返し、そのためモデルや画像ファイルのバッチを頻繁にインポートする場合は、この値を上げるとインポートのパフォーマンスが向上する場合があります。 |
| Idle Import Worker Shutdown Delay | アイドル状態のワーカーをシャットダウンするまでの待機時間 (秒) です。 |
Unity によって新しいプロジェクトに設定される Desired Import Worker Count のデフォルト値を制御することもできます。これを行うには、Preferences > Asset Pipeline > Import Worker Count % の順に移動します。
新しいプロジェクトを作成するとき、Unity は Import Worker Count % 値を使用して、システムで利用可能な論理コア数のパーセンテージに対応するプロジェクトの Desired Import Worker Count 値を割り当てます。
例えば、システムに 16 個の論理コアがあり、この設定が 25% に設定されている場合、新しいプロジェクトの Desired Import Worker Count は 4 になります。この値をあまり高く設定すると、インポートワーカープロセスは、ファイルの読み書きなど、他のプロセスやシステムリソースとの競合の必要性が生じます。25% のデフォルト値は、ほとんどの状況に適しています。