私も Addressables は初めてで、あまり詳しくはありませんが、基本的な使用法はいくつか知っています。
1. Window->Package Manager で Addressables を見つけてインストールします。
2. リソースを選択し、Assets でリソースをクリックすると、Inspector パネルに Assressable のチェックが表示されます。つまり、AssetBundle グループと同じプロパティであるリソース パッケージ グループに参加するかどうかです。選択すると、アドレス指定可能パネルのグループに表示されます。
既定のグループがあり、自分で新しいグループを作成することもできます.グループ内のリソースは、アドレス指定可能を使用してリソースをロードできます.
これは私のグループです window->AssetsManagement->Addressables->Groups をクリックして、このインターフェイスを表示します
リソースをグループにドラッグするか、直接追加します
赤いボックスはリソースのキーであり、次のデフォルトはラベルであり、ラベルに従ってリソースをロードすることもできます
(1) パスはグループ内のリソースの名前です. この名前はカスタマイズすることも, 後ろのラベルタグにすることもできます.
Addressables.LoadAssetAsync<GameObject>(path).Completed += (opt) =>
{
if (opt.Status == UnityEngine.ResourceManagement.AsyncOperations.AsyncOperationStatus.Succeeded)
{
GameObject panel1 = Instantiate(opt.Result, m_LayerDic[data.layer]);
panel1.transform.localPosition = Vector3.zero;
panel1.transform.localScale = Vector3.one;
}
else
{
Debug.LogError("load error");
}
m_IsLoading = false;
};
(2) 以下の図に示すように、AssetReference を介してリソースをロードし、チェックされたリソースをスクリプトの AssetReference タイプの下に吊るし、この方法でインスタンス化します。
(3) シーンのロードとアンロード
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.AddressableAssets;
using UnityEngine.ResourceManagement.AsyncOperations;
using UnityEngine.ResourceManagement.ResourceProviders;
public class SceneLoadManager : TSingleton<SceneLoadManager>
{
public void UnloadScene()
{
Addressables.UnloadSceneAsync(handle);
}
public void LoadScene(string sceneName, UnityEngine.SceneManagement.LoadSceneMode mode= UnityEngine.SceneManagement.LoadSceneMode.Additive)
{
CoroutineMgr.Instance.StartCorountine(DoLoadScene(sceneName, mode));
}
AsyncOperationHandle<SceneInstance> handle;
IEnumerator DoLoadScene(string sceneName, UnityEngine.SceneManagement.LoadSceneMode mode)
{
handle = Addressables.LoadSceneAsync(sceneName, mode);
while (!handle.IsDone)
{
Debug.Log("LoadSceneAsync" + handle.PercentComplete);
yield return null;
}
Debug.Log("LoadSceneAsync complete");
}
}
3. プロファイル: 独自のリソース パッケージのアドレスを設定し、設定した場所を選択して、[プロファイルの管理] を入力します。
• ローカル ビルド パス - ローカル ビルド パス
• ローカル ロード パス - ローカル ロード パス
• リモート ビルド パス - リモート ビルド パス
• リモート ロード パス - リモート ロード パス
4. 再生モード スクリプトには 3 つのオプションがあります。1 つ目は、Unity エディターでテストできる高速読み込み (高速)、2 つ目はシミュレートされた読み込み (高度)、Unity はリモート読み込みプロセスをシミュレートし、3 つ目はビルド読み込み (必要です) です。 )、プログラムがパッケージ化されている場合、最初にそれを選択してリソースをパッケージ化する必要があります
5. パッケージ化する前にリソースをパッケージ化し、[デフォルトのビルド スクリプト] を選択します。
Update a Previous Build は、 最初のビルド中に生成された bin ファイルを再度選択し、更新された方法でリソース パッケージをビルドすることです。アップデートパッチパックをヒット
最後に、リソースのプリロードについて説明しましょう。これは、Addressables のラベル タグを介してすべてのリソースをロードすることです。
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.AddressableAssets;
using UnityEngine.ResourceManagement.AsyncOperations;
public class Main : MonoBehaviour
{
public GameObject root;
private AsyncOperationHandle dn;
// Start is called before the first frame update
private void Awake()
{
if (UIManager.Instance == null)
{// 切换场景只实例化一次
GameObject obj = Instantiate<GameObject>(root);
obj.name = "UIRoot";
DontDestroyOnLoad(obj);
}
}
void Start()
{
PreLoadAllAssets();
}
// 预加载所有资源
void PreLoadAllAssets()
{
dn = Addressables.DownloadDependenciesAsync("default", true);
while (dn.PercentComplete != 1)
{
if (UnityCallJs.Instance)
{
UnityCallJs.Instance.LoadAssetsPro_Update(dn.PercentComplete.ToString());
}
Debug.Log("下载进度" + dn.PercentComplete);
}
dn.Completed += (opt) =>
{// 加载完成
if (UnityCallJs.Instance)
{
UnityCallJs.Instance.LoadAssetsPro_Update("1");
}
};
}
// Update is called once per frame
void Update()
{
}
}
このように、デフォルトのタグがすべてのリソースの背後で選択されている限り、それらはすべてロードされ、インターフェイスがロードされたときにすばやくロードして表示できます。
ここでは、js の読み込みの進行状況、unity と js の間の通信に通知を追加しました。公式 Web サイトの説明WebGL: Interacting with browser scripts - Unity Manualを参照してください。