Analyze ツール
Analyze は、プロジェクトの Addressables レイアウトの情報を収集するツールです。状況によっては、プロジェクトの状態をクリーンアップするために Analyze が適切なアクションを実行する場合があります。それ以外の状況では、Analyze は純粋な情報収集ツールであり、Addressables レイアウトについて、より多くの情報に基づいた意思決定を可能にします。
Analyze の使用
エディターで Addressables Analyze ウィンドウ (Window > Asset Management > Addressables > Analyze) を開きます。または、Addressables Groups ウィンドウで Tools > Window > Analyze ボタンをクリックして開くこともできます。
Analyze ウィンドウには、Analyze ルールのリストと、以下の操作が表示されます。
- Analyze Selected Rules (選択したルールの分析)
- Clear Selected Rules (選択したルールの消去)
- Fix Selected Rules (選択したルールの修正)
分析操作
分析操作では、ルールに必要な情報が収集されます。このアクションを、1 つのルールまたはルールのセットで実行して、ビルド、依存関係、マップなどに関するデータを収集します。各ルールでは、必要なあらゆるデータが収集され、AnalyzeResult オブジェクトのリストとしてレポートされる必要があります。
分析ステップの実行中は、データやプロジェクトの状態を変更するアクションを実行しないでください。このステップで収集されたデータに基づいて、最適なアクションとして [修正] 操作を実行できる場合があります。ただし、分析ステップしか含まれていないルールもあります。これは、収集された情報に基づいて合理性に適切で汎用的なアクションを実行することができないためです。このようなルールの例として、Check Scene to Addressable Duplicate Dependencies や Check Resources to Addressable Duplicate Dependencies があります。
純粋に情報収集のみを実行し、修正操作を含まないルールは、Unfixable Rules として分類されます。修正操作を含むルールは、Fixable Rules として分類されます。
消去ステップ
消去操作では、分析で収集されたすべてのデータが削除され、それに従って TreeView
が更新されます。
修正操作
Fixable Rules では、修正操作を実行できます。修正操作は、分析ステップで収集されたデータを使用して、必要な変更を実行して問題を解決します。
用意されている Check Duplicate Bundle Dependencies ルールは、修正可能ファイルの例です。このルールの分析で検出される問題は、解決するために実行できる合理的に適切なアクションが存在するため、修正可能です。
用意されている Analyze ルール
Fixable Rules
Check Duplicate Bundle Dependencies
このルールでは、すべてのグループを BundledAssetGroupSchemas でスキャンし、アセットグループレイアウトを推定して、重複している可能性のあるアセットを確認します。これには、原則としてフルビルドの発生が必要となるため、この確認には時間がかかり、高いパフォーマンスが求められます。
問題: 重複アセットの原因は、複数のグループ内のアセットが依存関係を共有していることです。例えば、2 つのプレハブが、複数の Addressable グループに存在するマテリアルを共有する場合です。このマテリアル (およびすべての依存関係) は、このプレハブを含んでいる両方のグループに取り込まれます。これを防ぐには、マテリアルが、いずれかのプレハブによって、またはそれ自体のスペースで Addressable としてマークされる必要があります。これにより、マテリアルとその依存関係が別個の Addressable グループに置かれます。
** 解決策**: この検証で問題が検出された場合は、このルールの修正操作を実行して、新しい Addressable グループを作成し、すべての依存アセットをそこに移動します。
例外: 複数のオブジェクトを含むアセットがある場合、別々のグループにアセットの一部のみ取り込まれ、実際には重複していない場合があります。例えば、多数のメッシュを含む FBX が当てはまります。1 つのメッシュが "GroupA" にあり、別のメッシュが "GroupB" にある場合、このルールでは、FBX が共有されていると見なされます。修正操作を実行すると、FBX は独自のグループに抽出されます。この例外的な状況では、FBX アセット全体はどちらのグループにも含まれていないため、修正操作の実行によって実際には弊害が生じます。
また、重複アセットが必ずしも問題ではないことにも注意してください。アセットが、同じ一群のユーザーによってリクエストされることがない場合 (例えば、地域固有のアセット)、重複する依存関係が望ましい、または、少なくとも重要な問題にならない可能性があります。プロジェクトはそれぞれ異なるため、重複アセット依存関係の修正は、ケースバイケースで評価する必要があります。
Unfixable Rules
Check Resources to Addressable Duplicate Dependencies
このルールでは、ビルドした Addressable データと、Resources
フォルダーにあるアセットに、重複しているアセットまたはアセット依存関係があるかどうかを検出します。
問題: この重複は、アプリケーションビルドと Addressables ビルドの両方にデータが含まれることを意味します。
** 解決策**: 適切なアクションが存在しないため、このルールは修正できません。このルールは純粋に情報収集のみを行い、冗長性を警告します。続行方法や取るべきアクション (ある場合) は、開発者が決定する必要があります。手動修正の一例として、問題のアセットを Resources
フォルダーから移動し、Addressable としてマークすることが考えられます。
Check Scene to Addressable Duplicate Dependencies
このルールでは、エディターのシーンリスト内のシーンと Addressables の間で共有されているアセットまたはアセット依存関係を検出します。
問題: この重複は、アプリケーションビルドと Addressables ビルドの両方にデータが含まれることを意味します。
** 解決策**: このルールは純粋に情報収集のみを行い、冗長性を警告します。続行方法や取るべきアクション (ある場合) は、開発者が決定する必要があります。可能な手動修正の一例として、重複した参照を含むビルトインのシーンをビルド設定から取り出し、Addressable シーンにすることが考えられます。
Bundle Layout Preview
このルールでは、明示的に Addressable としてマークされているアセットが、Addressable ビルドでどのように配置されるかを表示します。これらの明示的なアセットを基に、暗示的に参照され、ビルドに取り込まれるアセットも示します。
このルールによって収集されるデータは、特定の問題を示すものではありません。 このルールは純粋に情報収集のみを行います。
Analyze の拡張
個々の独自のプロジェクトでは、事前にパッケージ化されているルール以外に、追加の Analyze ルールが必要になることがあります。Addressable Asset System では、独自のカスタムルールクラスを作成できます。
例については、Addressables-Sample リポジトリ内の [カスタム分析ルールプロジェクト] を参照してください。
AnalyzeRule オブジェクト
AnalyzeRule クラスの新しい子クラスを作成し、以下のプロパティをオーバーライドします。
さらに、以下のメソッドをオーバーライドする必要もあります。詳細についてはこの後で説明します。
- List<AnalyzeResult> RefreshAnalysis(AddressableAssetSettings settings)
- void FixIssues(AddressableAssetSettings settings)
- void ClearAnalysis()
Tip
ルールが修正不可と指定されている場合は、FixIssues
メソッドをオーバーライドする必要はありません。
RefreshAnalysis
これは分析の操作です。このメソッド内で、必要な計算を実行し、今後の修正に必要と思われるデータをキャッシュします。戻り値は List<AnalyzeResult>
リストです。データを収集したら、分析のエントリーごとに AnalyzeResult を作成します。このとき、最初のパラメーターに文字列のデータが含まれ、2 番目のパラメーターに MessageType が含まれます。作成したオブジェクトのリストを返します。
特定の AnalyzeResult オブジェクトの TreeView
に子要素を作成する必要がある場合は、kDelimiter を使用して親アイテムと子アイテムを区切ることができます。この区切り文字を、親アイテムと子アイテムの間に入れてください。
FixIssues
これが修正の操作になります。分析ステップに応答して実行する適切なアクションがある場合は、ここで実行します。
ClearAnalysis
これが消去操作になります。分析ステップでキャッシュしたあらゆるデータは、この関数で消去または削除することができます。TreeView
が更新され、データの消去が反映されます。
GUI へのカスタムルールの追加
カスタムルールを Analyze ウィンドウに表示するには、AnalyzeSystem.RegisterNewRule<RuleType>()
を使用して、カスタムルール自体を GUI クラスに登録する必要があります。以下に例を示します。
using UnityEditor;
using UnityEditor.AddressableAssets.Build;
using UnityEditor.AddressableAssets.Build.AnalyzeRules;
class MyRule : AnalyzeRule
{
// Rule code...
}
// Register rule
[InitializeOnLoad]
class RegisterMyRule
{
static RegisterMyRule()
{
AnalyzeSystem.RegisterNewRule<MyRule>();
}
}
AnalyzeRule クラス
よりすばやくカスタムルールを設定できるように、Addressables には、AnalyzeRule から継承される以下のクラスが含まれています。
- BundleRuleBase は、AnalyzeRule タスクを処理する基本クラスです。このクラスには、バンドルとリソースの依存関係の情報を取得する基本メソッドがいくつか含まれます。
- Check bundle duplicates 基本クラスは、バンドルの依存関係の重複を確認するために役立ちます。カスタムアクションを実行するには、FixIssues メソッドの実装をオーバーライドします。
- CheckBundleDupeDependencies は BundleRuleBase から継承されます。このクラスには、AnalyzeRule でバンドルの依存関係の重複を確認するためのその他のメソッドと、それらの重複の解決を試みるメソッドが含まれます。
- CheckResourcesDupeDependencies も同じですが、リソースの依存関係が対象です。
- CheckSceneDupeDependencies も同じですが、シーンの依存関係が対象です。