この記事では、AssetBundleに基づくAddressablesリソースの読み込みについて紹介します。AddressablesはUnity2018バージョンの後にリリースされます。Addressablesは、ウィンドウ1.>バージョン7.5に達したパッケージマネージャーで直接見つけることができます。
インストールが完了すると、プロジェクト内のリソースは「アドレス可能」と表示されます。
インストールが完了したら、「ウィンドウ」->「資産管理」->「アドレス可能」->「グループ」と入力します。
- リソースはグループ化できます。入力後の最初の場所はデフォルトのグループグループです
- 作成->グループ->パッケージアセットはグループグループを作成できます
- プロファイル:独自のリソースパッケージのアドレスを設定し、設定した場所を選択して、プロファイルの管理を入力し、複数のパッケージアドレス(テストサービス、開発サービス、オンラインサービス、VIPサービスなど)をセットアップします。ローカル/リモートパッケージ設定
は、テストサービス、公式サービス、VIPサービスなど、さまざまな設定を生成できます。
•ローカルビルドパス-ローカルエンドパッケージパス
•ローカルロードパス-ローカルエンドロードパス
•リモートビルドパス-リモートパッケージパス
•リモートロードパス-リモートロードパス - ツールには、リソース読み込み分析プロファイル、テストサービス、ホスティングサービス、ラベルタグなど、使用するツールが含まれます。
- プレイモードスクリプトには3つのオプションがあります。最初のオプションは高速で、Unityエディターでテストできます。2番目のオプションはロードのシミュレーション、Unityはリモートロードプロセスのシミュレーション、3番目のビルドロード(必要)、プログラムがパッケージ化されている場合、まずリソースをパッケージ化するために彼を選択する必要があります
- Bulidはパッケージ化されたリソースです
アドレス可能なリソースのパッケージ化プロセス
非同期で読み込む必要のあるリソースについては、[アドレス指定可能]をオンにして、デフォルトのグループグループまたはユーザーが作成したグループグループに直接ドラッグして
、リソース名のマーク1の場所を変更します。リソースの
マーク2 の場所を変更して、リソースのラベルを設定できます。
注:フォローアップタグまたは名前でリソースを読み込むことができます。
すべてのリソースを追加したら、リソースをビルド場所にパッケージ化します。リソースのパッケージ化は基本的に完了しています。詳細については、APIドキュメントを開くことができます。
リソースの読み込み方法
上記のリソースがパッケージ化された後、リソースは非同期に読み込まれます
InstantiateAsync()
•非同期インスタンスのインスタンス化
•システムは待機しません
•呼び出しが完了すると、呼び出しは戻って実行されます•大量のインスタンスのインスタンス化はシステムでスタックしません
LoadAssetAsync()
•非同期ロード
•リソースはローカルでも可能ですリモートサーバー上にあることができます
using UnityEngine;
using UnityEngine.AddressableAssets;
using UnityEngine.ResourceManagement.AsyncOperations;
public class Loading : MonoBehaviour
{
//直接选择拖入目标
public AssetReference box;
/// <summary>
/// 加载
/// </summary>
void LoadBox()
{
box.LoadAssetAsync<GameObject>().Completed += OnLoaded;
}
//加载完成的回调
void OnLoaded(AsyncOperationHandle<GameObject> obj)
{
GameObject cube = obj.Result;
}
}
名前でロード
using UnityEngine;
using UnityEngine.AddressableAssets;
using UnityEngine.ResourceManagement.AsyncOperations;
public class Loading : MonoBehaviour
{
/// <summary>
/// 加载
/// </summary>
void LoadBox()
{
Addressables.LoadAssetAsync<GameObject>("cube").Completed += OnLoaded;
//异步加载实例化
//Addressables.InstantiateAsync("cube");
}
//加载完成的回调
void OnLoaded(AsyncOperationHandle<GameObject> obj)
{
GameObject cube = obj.Result;
}
}
ラベル名でロード(マテリアルマップのロードなどに適しています)
Addressables.LoadAssetsAsync<GameObject>(new List<object> { "key", "label" }, null, Addressables.MergeMode.Intersection).Completed += (AsyncOperationHandle<IList<GameObject>> obj) => {
GameObject box = ((AsyncOperationHandle<IList<GameObject>>)obj).Result[0];
};
注:⚠️Resources
フォルダー内のリソースがアドレス可能としてマークされている場合、システムはそれをResourcesフォルダーからResources_movedの新しいフォルダーに自動的に移動します。
•デフォルトの関連付けられた場所は、元の古い道路ルートを指します。
•元の読み込みコードは、Resources.LoadAsync <
GameObject >(“ map / city.prefab”)からAddressables.LoadAssetAsync <GameObject>(“ map / city.prefab”)に変更されます。
旧バージョンの変換:
プロジェクトにアセットバンドルが設定されている場合、初めて[アドレス指定可能]メニューを開くと、すべてを[アドレス指定可能]グループに転送するかどうかを尋ねられます。
- Addressablesは、Asset Bundlesシステムの拡張に基づいています。AssetBundlesは手動管理、Addressablesは自動管理と考えることができます。
- Addressablesのみを使用できます。
- AddressablesとAsset Bundleは混在させることができますが、公式の目標は2つではありません
- 共存ですが、代わりにAddressablesはすべての関連タスクを目標として処理できます。
- public GameObject XXXがpublic AssetReference XXXに変更されました;•Instantiate()がAssetRefName.InstantiateAsync();に変更されました。
- LoadはLoadAssetAsync <GameObject>();を使用します。
まとめ
レガシーAssetbudleとアドレス指定は、後者に使いやすく比較、およびリソースのアップデートもより便利で、ストレージリソースを管理するために、自分自身に対処していません。
アドレス指定可能オブジェクトは、ロードまたはインスタンス化されるだけでなく、オブジェクトの場所を照会できます。•システムは、合理的な相関を処理するのに役立ちます。
ビルドスクリプトを使用すると、独自のパッケージングプロセスを記述できます
。Addressablesは、アセットバンドルアーキテクチャに基づく高レベルのプロセスです。
将来的に対応可能
Addressableには現在、スクリプトのパッケージ化、Aプロジェクトのパッケージ化、Bプロジェクトのロードおよび使用のバグなどをサポートしていないなど、いくつかの問題があります。