コガネブログ

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

【Unity】Addressable Asset System の GetDownloadSizeAsync に失敗する現象に遭遇した時のメモ

概要 public static void GetDownloadSizeAsync ( IList<string> key, Action<long> onSuccess, Action onFailure = null ) { void OnComplete( AsyncOperationHandle<long> handle ) { if ( handle.Status != AsyncOperationStatus.Succeeded ) { onFailure?.Invoke(); return; </long></long></string>…

【Unity】Addressable Asset System でグループの GUID が重複している状態でビルドした時に出るエラー

概要 ArgumentException: An item with the same key has already been added. Key: XXXXXXXX Addressable Asset System でグループの GUID が重複している状態でビルドすると 上記のエラーが発生してアセットバンドルのビルドに失敗します 修正方法 Address…

【Unity】Addressable Asset System で全ラベルをクリップボードにコピーするエディタ拡張

ソースコード 使用例 [MenuItem( "Addressable/全ラベルをクリップボードにコピー" )] private static void CopyAllLabelToClipboard() { var labels = AddressableUtils.GetAllLabel(); var text = string.Join( "\n", labels ); EditorGUIUtility.systemCo…

【Unity】Addressable Asset System の InitializeAsync が完了しない現象に遭遇した時のメモ

概要 [RuntimeInitializeOnLoadMethod( RuntimeInitializeLoadType.SubsystemRegistration )] private static void InitAddressable() { Addressables.InitializeAsync().Completed += handle => Debug.Log( handle.Status ); } 上記のように RuntimeInitial…

【Unity】Addressable Asset System で現在の Play Mode Script の名前を取得する方法

概要 #if UNITY_EDITOR var guidList = UnityEditor.AssetDatabase.FindAssets( "t:AddressableAssetSettings" ); var guid = guidList.FirstOrDefault(); var path = UnityEditor.AssetDatabase.GUIDToAssetPath( guid ); var settings = UnityEditor.Asset…

【Unity】Windows でダウンロードしたアセットバンドルのキャッシュが保存されるフォルダを開くエディタ拡張

ソースコード 使用例 [MenuItem( "Addressable/ダウンロードしたアセットバンドルのキャッシュのフォルダを開く" )] private static void OpenDownloadCacheFolder() { var path = AddressableUtils.GetDownloadCacheFolderPath(); Debug.Log( $"ダウンロー…

【Unity】Addressable Asset System で Error while downloading Asset Bundle: CRC Mismatch に遭遇した時のメモ

概要 Error while downloading Asset Bundle: CRC Mismatch. Provided XXXXXXXX, calculated YYYYYYYY from data. Will not load AssetBundle 'http://ZZZZZZZZ' Addressable Asset System で上記のエラーに遭遇することがあった リモートカタログが正しく読…

【Unity】Addressable Asset System で全グループ名をクリップボードにコピーするエディタ拡張

ソースコード 使用例 [MenuItem( "Addressable/全グループ名をクリップボードにコピー" )] private static void CopyAllGroupNameToClipboard() { var groupNames = AddressableUtils.GetAllGroupName(); var text = string.Join( "\n", groupNames ); Edito…

【Unity】Addressable Asset System で全アドレスをクリップボードにコピーするエディタ拡張

ソースコード 使用例 [MenuItem( "Addressable/全アドレスをクリップボードにコピー" )] private static void CopyAllAddressToClipboard() { var addresses = AddressableUtils.GetAllAddress(); var text = string.Join( "\n", addresses ); EditorGUIUtil…

【Unity】Addressable Asset System の LoadAssetAsync に存在しないアドレスやラベルを指定した場合

概要 通信処理に進む前に弾かれる AssetBundle Provider の処理まで進まないので 通信処理が走らないようになっている LoadAssetAsync 関数の中で下記のように処理が行われている m_ResourceLocators に登録されているアドレスやラベルなら ResourceManager.…

【Unity】Addressable Asset System で指定したアドレスが読み込めるかどうか確認する方法

概要 Addressables.LoadResourceLocationsAsync( address ).Completed += handle => { var isSuccess = handle.Status == AsyncOperationStatus.Succeeded && handle.Result != null && 1 <= handle.Result.Count ; .... }; LoadResourceLocationsAsync は通…

【Unity】Addressable Asset System の Addressables.LoadContentCatalogAsync の引数に渡すパス

概要 Addressables.LoadContentCatalogAsync の引数に渡すパスは絶対パスや URL など // 例1 var url = @"【Unity プロジェクト】\ServerData\StandaloneWindows64\catalog_1.0.0.json"; var handle = Addressables.LoadContentCatalogAsync( url ); // 例2 …

【Unity】Addressable Asset System の初期化を任意のタイミングで行いたい場合

概要 Addressable Asset System は初期化用の関数を呼び出さなくても Addressables クラスのいずれかの関数を呼び出したタイミングで自動で初期化してくれる 内部で AddressableAssets.ChainOperation で自動で初期化してくれる 任意のタイミングで初期化し…

【Unity】Addressable Asset System ではアプリビルド時に StreamingAssetsCopy フォルダ以下のアセットが StreamingAssets フォルダに自動で追加される

概要 【Unity プロジェクト】/Library/com.unity.addressables/StreamingAssetsCopy/ 以下のアセットは、アプリビルド時に 【Unity プロジェクト】/Assets/StreamingAssets フォルダに自動で追加される 上記の処理は「AddressablesPlayerBuildProcessor.cs」…

【Unity】Addressable Asset System でグループの設定を変更してビルドしても設定が反映されない場合

概要 すべてのグループを削除してから再度グループを作成して 設定を変更してビルドしたら反映された 関連記事

【Unity】Addressable Asset System でアセットバンドルのダウンロード URL をカスタマイズする方法

概要 Addressables.InternalIdTransformFunc = location => { var internalId = location.InternalId; // アセットバンドルではない場合は internalId をそのまま返す if ( location.ResourceType != typeof( IAssetBundleResource ) ) { return internalId;…

【Unity】Windows でアセットバンドルのキャッシュが保存されるフォルダを開くエディタ拡張

概要 using System; using System.Diagnostics; using UnityEditor; using UnityEngine; using Debug = UnityEngine.Debug; public static class Tools { [MenuItem( "Tool/Hoge" )] private static void Hoge() { var folderType = Environment.SpecialFold…

【Unity】Addressable Asset System で事前ダウンロードする方法

概要 var key = "【アドレスかラベル】"; var handle = Addressables.DownloadDependenciesAsync( key, true ); handle.Completed += _ => Debug.Log( "完了" ); Addressables.DownloadDependenciesAsync を使用する 第2引数に true を渡すとアセットバンド…

【Unity】Addressable Asset System のビルドのキャッシュを削除するエディタ拡張

概要 AddressableAssetSettings.CleanPlayerContent(); BuildCache.PurgeCache( false ); AddressableAssetSettings.CleanPlayerContent を呼ぶだけだと ビルドのキャッシュは完全に消えない BuildCache.PurgeCache を呼ぶと Library/BuildCache フォルダが…

【Unity】Addressable Asset System のビルドのキャッシュの保存先

概要 【Unity プロジェクト】/Library/BuildCache Addressables Goups ウィンドウの 「Build > Clean Build > All」で削除されるのはこのフォルダ

【Unity】Addressable Asset System でダウンロード対象のアセットバンドルの容量を取得する方法

概要 var handle = Addressables.GetDownloadSizeAsync( address ); handle.Completed += _ => Debug.Log( handle.Result ); Addressables.GetDownloadSizeAsync を使用することで ダウンロード対象のアセットバンドルの容量を取得できる ダウンロード対象の…

【Unity】Addressable Asset System でデフォルト以外のすべての空のグループを削除するエディタ拡張

概要 使用例 using UnityEditor; public static class Example { [MenuItem( "Tools/Hoge" )] private static void Hoge() { AddressableUtils.RemoveAllEmptyGroupWithoutDefault(); } }

【Unity】Addressable Asset System のグループ名を昇順でソートするエディタ拡張

概要 使用例 using UnityEditor; public static class Example { [MenuItem( "Tools/Hoge" )] public static void Hoge() { // グループを名前でソートします AddressableUtils.SortGroups(); // AddressableAssetsWindow の描画を更新します AddressableUti…

【Unity】Addressable Asset System の AddressableAssetsWindow を再描画するエディタ拡張

using System.Reflection; using UnityEditor; using UnityEngine; public static class Example { [MenuItem( "Tools/Hoge" )] public static void Repaint() { const BindingFlags attr = BindingFlags.Instance | BindingFlags.Public | BindingFlags.Non…

【Unity】Addressable Asset System で重複しているアドレスが存在しないか確認するテストコード

概要 使用例 using NUnit.Framework; using System.Linq; using System.Text; public static class Example { [Test] public static void CheckDuplicateAddress() { var list = AddressableUtils .GetDuplicateAddress() .ToArray() ; var isExist = list.A…

【おすすめスライド】「SpriteAtlasの落とし穴」

スライド

【おすすめスライド】「AssetBundleダウンロードサイズ表示対応」

スライド

【Unity】アセットバンドル名が存在するかどうか確認するテストコード

概要 using NUnit.Framework; using System.Linq; using System.Text; using UnityEditor; public static class Example { [Test] public static void CheckAssetBundleNames() { var list = AssetDatabase.GetAllAssetBundleNames(); var isExist = list.An…

【Unity】アセットバンドル名が設定されているアセットが存在するかどうか確認するテストコード

概要 using NUnit.Framework; using System.Linq; using System.Text; using UnityEditor; public static class Example { [Test] public static void CheckAssetBundleNamedAssets() { var list = AssetDatabase.GetAllAssetPaths() .Select( c => new { as…

【Unity】Addressable Asset System の BundledAssetGroupSchema の Build Path と Load Path を変更するエディタ拡張

概要 使用例 using System.Linq; using UnityEditor; using UnityEditor.AddressableAssets.Settings; using UnityEditor.AddressableAssets.Settings.GroupSchemas; public static class Example { [MenuItem( "Tools/Hoge" )] public static void Hoge() {…