コガネブログ

平日更新を目標に Unity や C#、Visual Studio、ReSharper などのゲーム開発アレコレを書いていきます

【Unity】Addressable Asset System に関する記事まとめ(140 件以上)

はじめに 当ブログで紹介してきた Addressable Asset System に関する記事を 140 件以上まとめました 注意 古いバージョン(1.6.2 など)のころに書いた記事も混ざっているため 最新のバージョンだと既に動かないプログラムが紹介されていたりする可能性があ…

【Unity】Addressables の UpdateCatalogs で通信環境が悪いなどの理由でリモートカタログのダウンロードに失敗した場合内部で NullReferenceException が発生する

概要 protected override async void Execute() { Exception exception = null; var result = await System.Threading.Tasks.Task.Run ( () => { try { var catalogs = new List<IResourceLocator>( m_DepOp.Result.Count ); for ( int i = 0; i < m_DepOp.Result.Count; i++ )</iresourcelocator>…

【Unity】Addressables で指定したアドレスに紐づくアセットが存在するか確認する方法

ソースコード /// <summary> /// 指定されたアドレスに紐づくアセットが存在する場合 true を返します /// </summary> public static async Task<bool> Exists( object key ) { var handle = Addressables.LoadResourceLocationsAsync( key ); await handle.Task; return handle.Statu</bool>…

【Unity】Addressables でローカルカタログの読み込みに失敗したか確認する例

ソースコード using System.Linq; using System.Threading.Tasks; using UnityEngine; using UnityEngine.AddressableAssets; public class Example : MonoBehaviour { // ローカルカタログの読み込みに失敗した場合、 // 以下のようなエラーや例外が発生す…

【Unity】Addressables でリモートカタログのダウンロードの通信に失敗したか確認する例

ソースコード using System.Linq; using System.Threading.Tasks; using UnityEngine; using UnityEngine.AddressableAssets; public class Example : MonoBehaviour { // リモートカタログのダウンロードの通信に失敗した場合、 // 以下のようなエラーや例…

【Unity】Addressables でリモートカタログのダウンロード時にディスクの空き容量が不足していないか確認する例

ソースコード using System.Linq; using System.Threading.Tasks; using UnityEngine; using UnityEngine.AddressableAssets; public class Example : MonoBehaviour { // リモートカタログのダウンロード時にディスクの空き容量が不足している場合 // 以下…

【Unity】Addressables でリモートカタログが破損していないか確認する例

ソースコード using System.Linq; using System.Threading.Tasks; using UnityEngine; using UnityEngine.AddressableAssets; public class Example : MonoBehaviour { // リモートカタログのファイルが破損している場合、 // 以下のようなエラーや例外が発…

【Unity】Addressables を導入しているプロジェクトでビルドすると定期的に数 KB の GC Alloc が発生する場合

概要 Addressables を導入しているプロジェクトからゲームをビルドして Profiler を見た時に 「DiagnosticEventCollectorSingleton.Update()」というプロセスで 1.2 KB の GC Alloc が定期的に発生している場合 AddressableAssetSettings の「Send Profiler …

【Unity】Addressables を導入しているプロジェクトで再生に時間がかかる場合は AssetReference が原因の可能性がある

概要 Addressables 1.18.16 あたりから AssetReference のコンストラクタで /// <summary> /// Construct a new AssetReference object. /// </summary> public AssetReference() { #if UNITY_EDITOR EditorApplication.playModeStateChanged -= ReleaseHandleWhenPlaymodeState…

【Unity】Addressables のビルド時間の内訳を Chrome で確認する方法

概要 Chrome を開いてアドレスバーに chrome://tracing と入力します Load ボタンを押して Unity プロジェクトのフォルダに存在する Library/com.unity.addressables/AddressablesBuildTEP.json を選択します これで Addressables のビルド時間の内訳を Chro…

【Unity】Addressables でビルドした時にビルド結果の詳細を出力する方法

概要 Unity の Preferences を開いて左メニューで「Addressables」を選択して 「Debug Build Layout」をオンにした状態で Addressables でビルドすると ビルド結果の詳細が Library/com.unity.addressables/ フォルダに buildlayout.txt というファイルで出…

【Unity】Addressables で Android の Play Asset Delivery に対応する公式サンプル

概要 上記の公式の Addressables のサンプルリポジトリの 「Advanced > Play Asset Delivery」フォルダに Addressables で Android の Play Asset Delivery に対応する サンプルプロジェクトが格納されています

【Unity】Android において Addressables でローカルアセットバンドルの読み込みにも UnityWebRequest を使用すると読み込みが速くなる場合がある

概要 Addressables のグループの Inspector で 「Use UnityWebRequest for Local Asset Bundles」をオンにすると Android でローカルアセットバンドルの読み込みが速くなる場合があります 参考サイト様

【Unity】Addressables で CRC を無効にするとアセットバンドルの読み込みが速くなる場合がある

概要 Addressables のグループの Inspector で「Asset Bundle CRC」を「Disabled」にすると アセットバンドルの読み込みが速くなる場合があります 参考サイト様

【Unity】AssetReference からアドレスを取得する方法

ソースコード using System.Linq; using UnityEngine; using UnityEngine.AddressableAssets; public sealed class Example : MonoBehaviour { public AssetReference m_assetReference; private void Start() { var handle = Addressables.LoadResourceLoca…

【Unity】ゲームをビルドする時に自動で Addressables のビルドを実行する方法

検証環境 Unity 2021.2.7f1 Addressables 1.19.15 概要 AddressableAssetSettings の Inspector の 「Build > Build Addressables on Player Build」を変更することで ゲームをビルドする時に自動で Addressables のビルドを実行できるようになります 項目 …

【Unity】Addressables で各グループの BundledAssetGroupSchema の Build Path や Load Path の名前を取得するサンプル

ソースコード using System.Linq; using UnityEditor; using UnityEditor.AddressableAssets; using UnityEditor.AddressableAssets.Settings.GroupSchemas; using UnityEngine; public static class Example { [MenuItem( "Tools/Hoge" )] public static vo…

【Unity】Addressables でフォルダにアドレスを振った場合とファイルごとにアドレスを振った場合で違いはあるか

検証環境 Windows 10 Unity 2020.3.13f1 Addressables 1.19.11 検証方法 スプライトが格納されているフォルダにアドレスを割り振った場合と フォルダ内のスプライトそれぞれにアドレスを割り振った場合で ビルド時間や成果物に違いはあるのか検証 検証結果 …

【Unity】Addressables でアセットバンドルを圧縮するかどうかでビルド時間が変わるか

検証環境 Windows 10 Unity 2020.3.13f1 Addressables 1.19.11 検証方法 10,000 個の Scriptable Object を用意して すべての Scriptable Object にアドレスを割り振って Default Local Group に追加して Default Local Group の Bundle Mode を 「Pack Sepa…

【Unity】Addressables でアセットを変更していないのにビルドに時間がかかる場合

概要 Addressable ではビルドキャッシュが実装されているため アセットバンドルに含めるアセットを変更していない場合、 該当のアセットバンドルのビルドはスキップされてビルド時間を短縮できるが、 アセットを変更していないのにビルドに時間がかかる場合…

【Unity】Addressables のビルドでどこに時間がかかっているのか調べる方法

概要 com.unity.scriptablebuildpipeline@1.19.3/Editor/Shared/BuildTasksRunner.cs 上記のファイルに記載されている BuildTasksRunner.Run メソッドの foreach (IBuildTask task in pipeline) { var sw = Stopwatch.StartNew(); // ★ { try { if (!tracker…

【Unity】Addressables で依存関係が増えるほどビルド時間がどのくらい長くなるか

検証環境 Windows 10 Unity 2020.3.13f1 Addressables 1.19.11 検証方法 1,000 個の Scriptable Object を用意して すべての Scriptable Object にアドレスを割り振って Default Local Group に追加して Default Local Group の Bundle Mode を 「Pack Separ…

【Unity】Addressables でアセットバンドルをまとめた時と別々にした時でビルド時間にどのくらい差が出るか

検証環境 Windows 10 Unity 2020.3.13f1 Addressables 1.19.11 検証方法 10,000 個の Text Asset(.txt)を用意して すべての Text Asset にアドレスを割り振って Default Local Group に追加して Default Local Group の Bundle Mode を 「Pack Together(…

【Unity】Addressables でローカルカタログを圧縮する場合にビルドログがアプリに含まれないようにする方法

検証環境 Addressables 1.16.19 概要 Addressables でローカルカタログを圧縮する設定を有効化して アセットバンドルをビルドするようにしたところ、 「buildlogtep.json」というビルドログのファイルが アプリビルド時にアプリに含まれるようになってしまっ…

【Unity】Addressables でローカルカタログを読み込む時にメインスレッドが止まらないようにする方法

検証環境 Addressables 1.16.19 概要 Addressables で管理しているグループが多いと、 ローカルカタログを読み込む処理に時間がかかるようになり、 メインスレッドが止まってしまう 重たい処理は TextDataProvider.Start 関数で File.ReadAllText を使用して…

【Unity】Addressables で Android において StreamingAssets から読み込んだアセットバンドルがキャッシュに保存されない現象に関するメモ

検証環境 Addressables 1.16.19 概要 Addressable を使用しているプロジェクトで Android ビルドして StreamingAssets からアセットバンドルを読み込んだ時に そのアセットバンドルがキャッシュに保存されない現象に遭遇した Addressable の AssetBundleProv…

【Unity】Addressables で通信環境が悪い状態でサーバからアセットバンドルのダウンロードに失敗した時に内部で例外が出ないようにする方法

検証環境 Addressables 1.16.19 概要 Exception: Attempting to use an invalid operation handle UnityEngine.ResourceManagement.AsyncOperations.AsyncOperationHandle.get_InternalOp () (at Runtime/ResourceManager/AsyncOperations/AsyncOperationHan…

【Unity】Addressables でリモートカタログを更新する時にメインスレッドが止まらないようにする方法

検証環境 Addressables 1.16.19 概要 Addressables で管理しているグループが多いと、 Addressables.UpdateCatalogs の処理に時間がかかるようになり、 メインスレッドが止まってしまう 重たい処理は UpdateCatalogsOperation.Execute 関数なので この部分を…

【Unity】Addressables でローカルカタログを圧縮する場合にビルドログがアプリに含まれないようにする方法

検証環境 Addressables 1.16.19 概要 Addressables でローカルカタログを圧縮する設定を有効化して アセットバンドルをビルドするようにしたところ、 「buildlogtep.json」というビルドログのファイルが アプリビルド時にアプリに含まれるようになってしまっ…

【Unity】Addressables で通信環境が悪い状態でサーバからアセットバンドルのダウンロードに失敗した時に内部で例外が出ないようにする方法

検証環境 Addressables 1.16.19 概要 Exception: Attempting to use an invalid operation handle UnityEngine.ResourceManagement.AsyncOperations.AsyncOperationHandle.get_InternalOp () (at Runtime/ResourceManager/AsyncOperations/AsyncOperationHan…