ここにディレクトリのタイトルを書きます
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)
Addressable
Group
Group
Group
AssetBundle.
3.プロジェクトを作成するとフォルダーAddressable Settings
も生成され、その中に多数の設定ファイルが存在します。AddressableAssetsData
4. 資源回収グループ(資源委託)の基本業務
1. でAddressables Group
、空白スペースをクリックして新しいグループを作成しGroup
、パッケージ外のリソース グループ (リモート リソース パッケージ) として使用できます。
2.右クリックして名前Rename
を変更できます。Group
Inspector
3. 次に、リソース ウィンドウをドラッグするかチェックしてリソースを追加できますAddressable
。
4. を作成するとGroup
、リソースのコンテンツとガイダンスを記録するためのAssetGroups
対応するYAML
形式ファイルも生成されます。
5. リモート リソース パッケージをセットアップする
1.Group
または対応するYAML
フォーマット ファイルを選択すると、インスペクター ウィンドウにビルド パスBuild Path
とロード パスが表示されます 2.とに変更すると、以下の対応するアドレスも変更されたことがわかります。このようにして、ビルドしてロードすると、上記の対応するアドレスに移動します。Load Path.
RemoteBuildPath
RemoteLoadPath
3. リモート リソース パッケージのアドレスをクリックするAddressables Groups
かManager Profiles
、ボタン
をクリックします。Windows > Asset Management > Addressables > Profiles
4.Addressables Profiles
以下に示すように、変更するウィンドウを開きます。
現時点では変更せずにそのままにしておいて、このアドレスが最初に使用されます。
6.梱包方法
1. 実行してみましょうBuild / New Build / Default Build Script
。Addressable
リソース パックを開いて、クリックしてしばらく待つと、完了するとログ プロンプトが表示されます。
Library
2.次の図に示すように、構築されたローカル リソース バンドルは指定されたアドレスに保存されます。
3. 構築されたリモート リソース プロジェクトは、根目录下
次の図に示すように、ServerData の下の指定されたアドレスに保存されます。
4. 注目に値します:
ローカル リソースは APK とともにパッケージにパッケージ化されます。
ただし、リモート リソースはパッケージ化されないため、ロードするには指定された場所に配置する必要があります。
7. 装填方法
7-1. Mono スクリプトの仕様とインスタンス化:
Mono
スクリプトのpublic AssetReference
仕様とインスタンス化:タイプの代わりにタイプを
宣言すると、シーンはプリセットに直接依存し、このプリセットはシーンに入力されますが、ここで使用しているのは、シーンが実際には Sphereプリセットに依存しておらず、弱い参照であるということです。AssetReference
GameObject
AssetReference
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.LoadAssetAsync
、Completed
コールバックをリッスンし、コールバック内のリソースを取得してから操作します。
リソースをロードするときにGroup
、どのリソースがどこにあるかを知る必要はありません。ただ知っておく必要がありますAddressable Name
。
これをロードの基礎として使用します。たとえば、次のようになります。
図に示すリソース名: Map1Bulid
Addressables.LoadAssetAsync<GameObject>("Map1Bulid").Completed += (handle) =>
{
// 预设物体
GameObject prefabObj = handle.Result;
// 实例化
GameObject cubeObj = Instantiate(prefabObj);
};
7-4. 非同期直接インスタンス化
Addressables
InstantiateAsync
直接の 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 > Analyze
Open ** 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);