アドレス可能なリソース管理ソリューション

1. アドレッサブルとは何ですか

Unity Addressable Asset systemプログラミングを行わずに AssetBundle 管理リソースを置き換え、プロジェクトに合わせて拡張できるシステムを提供します。
アドレスを自己割り当てする機能があり、必要なときに自動アドレス指定とロードを使用し、ローカルのモバイル リソースを自動的に追跡し、依存関係を処理します。

2. アドレス可能なものをインポートする

1. クリックします。2.プラグインを検索してインポートします。 3. Unity には 2019 以降のバージョンが必要です。Windows > PackageManager
Addressables

ここに画像の説明を挿入

Addressables.CN注: 実際のプロジェクトでは、バージョンをダウンロードすることをお勧めします。
ここに画像の説明を挿入

3. Addressables 設定アセット パッケージ管理の作成

1.クリックWindows > Asset Management > Addressables > Groups
ここに画像の説明を挿入

2.ポップアップAddressables Groupウィンドウの作成Create Addressables Settingsボタンをクリックします。このとき、デフォルトでグループが作成され、デフォルトで** ** を押すとアセットバンドルがパッケージ化されます。つまり、このインターフェイスで複数のリソースを作成し、を押すことで生成されるリソースを保存できます。AddressablesAssetsData
Default Local Group (Default)AddressableGroup
GroupGroupAssetBundle.
ここに画像の説明を挿入

3.プロジェクトを作成するとフォルダーAddressable Settingsも生成され、その中に多数の設定ファイルが存在します。AddressableAssetsData
ここに画像の説明を挿入

4. 資源回収グループ(資源委託)の基本業務

1. でAddressables Group、空白スペースをクリックして新しいグループを作成しGroup、パッケージ外のリソース グループ (リモート リソース パッケージ) として使用できます。
ここに画像の説明を挿入

2.右クリックして名前Renameを変更できます。Group
ここに画像の説明を挿入

Inspector3. 次に、リソース ウィンドウをドラッグするかチェックしてリソースを追加できますAddressable
ここに画像の説明を挿入

4. を作成するとGroup、リソースのコンテンツとガイダンスを記録するためのAssetGroups対応するYAML形式ファイルも生成されます。
ここに画像の説明を挿入

5. リモート リソース パッケージをセットアップする

1.Groupまたは対応するYAMLフォーマット ファイルを選択すると、インスペクター ウィンドウにビルド パスBuild Pathとロード パスが表示されます 2.に変更すると、以下の対応するアドレスも変更されたことがわかります。このようにして、ビルドしてロードすると、上記の対応するアドレスに移動します。Load Path.
ここに画像の説明を挿入
RemoteBuildPathRemoteLoadPath
ここに画像の説明を挿入

3. リモート リソース パッケージのアドレスをクリックするAddressables GroupsManager Profilesボタン
ここに画像の説明を挿入
をクリックします。Windows > Asset Management > Addressables > Profiles
ここに画像の説明を挿入

4.Addressables Profiles以下に示すように、変更するウィンドウを開きます。ここに画像の説明を挿入

現時点では変更せずにそのままにしておいて、このアドレスが最初に使用されます。

6.梱包方法

1. 実行してみましょうBuild / New Build / Default Build ScriptAddressableリソース パックを開いて、クリックしてしばらく待つと、完了するとログ プロンプトが表示されます。
ここに画像の説明を挿入

Library2.次の図に示すように、構築されたローカル リソース バンドルは指定されたアドレスに保存されます。
ここに画像の説明を挿入

3. 構築されたリモート リソース プロジェクトは、根目录下次の図に示すように、ServerData の下の指定されたアドレスに保存されます。
ここに画像の説明を挿入

4. 注目に値します:
ローカル リソースは APK とともにパッケージにパッケージ化されます。
ただし、リモート リソースはパッケージ化されないため、ロードするには指定された場所に配置する必要があります。

7. 装填方法

7-1. Mono スクリプトの仕様とインスタンス化:

Monoスクリプトのpublic AssetReference仕様とインスタンス化:タイプの代わりにタイプを
宣言すると、シーンはプリセットに直接依存し、このプリセットはシーンに入力されますが、ここで使用しているのは、シーンが実際には Sphereプリセットに依存しておらず、弱い参照であるということです。AssetReferenceGameObjectAssetReference

public AssetReference spherePrefabRef;
void Start()
{
    
    
    spherePrefabRef.LoadAssetAsync<GameObject>().Completed += (obj) =>
    {
    
    
        // 预设
        GameObject spherePrefab = obj.Result;
        // 实例化
        GameObject sphereObj = Instantiate(spherePrefab);
    };
}

7-2. 指定したオブジェクトを直接インスタンス化する

AssetReference指定されたオブジェクトを直接インスタンス化します。
同様に、1 ステップでインスタンス化を容易にするメソッドAssetReferenceも提供されています。InstantiateAsync

spherePrefabRef.InstantiateAsync().Completed += (obj) =>
{
    
    
  // 已实例化的物体
  GameObject sphereObj = obj.Result;
};

7-3. 非同期コールバックロード

たとえばAddressables.LoadAssetAsyncCompletedコールバックをリッスンし、コールバック内のリソースを取得してから操作します。
リソースをロードするときにGroup、どのリソースがどこにあるかを知る必要はありません。ただ知っておく必要がありますAddressable Name
これをロードの基礎として使用します。たとえば、次のようになります。
ここに画像の説明を挿入

図に示すリソース名: Map1Bulid

Addressables.LoadAssetAsync<GameObject>("Map1Bulid").Completed += (handle) =>
{
    
    
    // 预设物体
    GameObject prefabObj = handle.Result;
    // 实例化
    GameObject cubeObj = Instantiate(prefabObj);
};

7-4. 非同期直接インスタンス化

AddressablesInstantiateAsync直接の 1 ステップのインスタンス化を容易にするインターフェースも提供されています。次に例を示します。

Addressables.InstantiateAsync("Map1Bulid").Completed += (handle) =>
{
    
    
    // 已实例化的物体
    GameObject cubeObj = handle.Result;
};

7-5. asyncとawaitの使い方

の使用方法async、例:await

private async void InstantiateCube()
{
    
    
    // 虽然这里使用了Task,但并没有使用多线程
    GameObject prefabObj = await Addressables.LoadAssetAsync<GameObject>("Map1Bulid").Task;
    // 实例化
    GameObject cubeObj = Instantiate(prefabObj);
    // 也可直接使用InstantiateAsync方法
    // GameObject cubeObj = await Addressables.InstantiateAsync("Map1Bulid").Task;
}

7-6. シーンの読み込み

Addressables.LoadSceneAsyncシーンをロードします

StartCoroutine(LoadScene());
private IEnumerator LoadScene()
{
    
    
    var sceneHandle = Addressables.LoadSceneAsync("NewScene");
    if (sceneHandle.Status == AsyncOperationStatus.Failed)
    {
    
    
        Debug.LogError("场景加载异常:" + sceneHandle.OperationException.ToString());
    }
    while (!sceneHandle.IsDone)
    {
    
    
        //监控进度0~1
        float progress = sceneHandle.PercentComplete;
        Debug.Log("加载进度:" + progress);
        yield return null;
    }
    Debug.Log("加载完毕:");
}

8. 積載環境シミュレーション

次の 3 つの Addressables リソース読み込みモードがあります。デフォルトは [Use Asset Database (最速)] です。
ここに画像の説明を挿入

1. アセット データベースを使用する (最速)

リソースはパッケージ化プロセスを回避して AssetDatabase から直接ロードできるため、ロード速度は非常に高速です。ただし、Addressables システムではリソースをパッケージ化する必要がないため、AssetBundle キャッシュ情報は生成されないため、この方法で取得されるプロファイラー情報は少なくなります。したがって、プロジェクト開発段階では、この非パッケージ化方法を使用してリソースを迅速にロードすることをお勧めします。

2. グループをシミュレートする (上級)

このモードでは、AssetBundle の動作をシミュレートして、パッケージ化方法と同様のプロファイラー情報を取得します。ただし、AssetDatabase からリソースを直接ロードするのとは異なり、AssetBundle のキャッシュ情報をシミュレートし、この情報を分析してプロファイラー データを取得します。Addressable リソース バンドルをパッケージ化する必要がないため、Build 操作を実行する必要はありません。したがって、このモードは高速で豊富なプロファイラー情報を取得できるため、開発やデバッグに適しています。

3. 既存のビルドを使用する(ビルドされたグループが必要)

このモードでも、リソースをアドレス指定可能なリソース バンドルにパッケージ化するためにビルド操作を実行する必要があります。実行時に、Addressables システムは実際の AssetBundle ファイルをロードし、ロード パスに従ってリソースを読み取ります。前の 2 つのモードとは異なり、このモードではリソースをパッケージ化する必要があるため、最初にビルド操作を実行する必要があります。最初にビルドしないと、実行時にリソースがロードされず、プログラムでエラーが報告されます。したがって、このモードは、リソースを正しくロードできるようにするために、プロジェクトがリリースまたは開始される前の段階に適しています。

9、参照分析パネルを表示します

1. メニューをクリックしますProject > AddressableAssetsData > AddressableAssetSettings
ここに画像の説明を挿入

2.ウィンドウをInspector見つけて確認します (バージョンによって場所が異なります)。Send Profiler Events
ここに画像の説明を挿入

3. 次に、 をクリックします。Windows > Asset Management > Addressables > Event Viewer
ここに画像の説明を挿入

4. ** Addressables Event Viewer** ウィンドウを開くと、リソースの使用状況、参照数などの情報が表示されます。

アナライザーでは、インスタンス化されたプリセットが依存するリソースを確認でき、参照カウントなどの情報も確認できます。AssetBundle パッケージを出力しませんでしたが、AssetBundle パッケージからリソースをロードする効果をシミュレートしました。これは、ロード戦略を迅速に分析するのに便利です

ここに画像の説明を挿入

10. ホスティングサービスのローカルサーバー

この機能は、ローカル環境でリモート サーバー リソースの読み込みをシミュレートするために使用できます (win11 システムでは注意して使用してください。不安定です)。
メニュー をクリックしWindow / Asset Management / Addressables / Hosting、 をクリックしてCreate / Local Hostingローカル Web サーバーを作成します。
ここに画像の説明を挿入

それからチェックしてくださいEnable
ここに画像の説明を挿入

このようにして、ローカル サーバーを開きました。IP アドレスはローカル エリア ネットワーク IP です。localhost 経由でアクセスできます。ここでのポート番号は 55716 であることに注意してください。
上で説明した 2 つのフォルダー ディレクトリが実行されていることがわかりますHosting
ここに画像の説明を挿入

11. 重複したリソースを表示する

1. この機能を使用して繰り返し参照されるリソースを表示し、 AddressablesGroup でTools > Window > AnalyzeOpen ** Addressables Analyze** windowを選択します。

2. 以下のように操作します
ここに画像の説明を挿入

3. 一定時間待つと、さまざまなパッケージで繰り返し参照されているリソースを表示できるため、配布とパッケージ化を簡単に調整できます。

十一、WebGLプラットフォームの問題

1. 外部パッケージを使用している場合、エディターは webgl リソースを正しく読み取れません2.
リソース グループの下のUse Asset Bundle Cacheチェックマークを削除します
ここに画像の説明を挿入

3. まだエディターには表示されません。webGl を公開するだけです。

12. Unityのバージョン選択

1. 公式が推奨する複数のバージョンを使用しないと、奇妙な問題が発生しやすい

13. リソースの解放

1. 以下は、リソースがロードされた後の対応する解放メソッドです。ロードされ、それAddressables.LoadAssetAsyncに伴ってAddressables.Releaseアンロードされます
。例:
//リソースを取得してインスタンス化します。

Addressables.LoadAssetAsync<GameObject>("ModelHero0").Completed += (res) =>{
    
    
    ThisObj = res.Result;
    GameObject sphereObj = Instantiate(ThisObj);
};
//销毁和释放资源
GameObject.Destroy(ThisObj);
Addressables.Release(ThisObj);

ロードして開くときに参照カウントがあり、破棄されるとクリアされることを見てみましょう。
ここに画像の説明を挿入

2. シーンのロードとAddressables.LoadSceneAsyncアンロードAddressables.UnloadSceneAsync

3.Addressables.InstantiateAsyncインスタンス化されたものは使用でき、サポートされているものはAddressables.ReleaseInstance直接アンインストールして参照をクリアできます
。例:

//加载并实例化
Addressables.InstantiateAsync("ModelHero0").Completed += (obj) =>
 {
    
     
 	ThisObj = obj.Result; 
 };
//卸载并清除引用
Addressables.ReleaseInstance(ThisObj);

おすすめ

転載: blog.csdn.net/ww1351646544/article/details/131461056