コガネブログ

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

【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() {…

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

概要 var webRequest = UnityWebRequestAssetBundle.GetAssetBundle( url, hash, crc ); ... var header = webRequest.GetResponseHeader( "Content-Length" ); ulong.TryParse( header, out var bytes ); Debug.Log( bytes ); 上記のようなコードを記述する

【Unity】アセットバンドルダウンロード時に現在ダウンロードが完了した容量(バイト数)を取得する方法

概要 var webRequest = UnityWebRequestAssetBundle.GetAssetBundle( url, hash, crc ); ... Debug.Log( webRequest.downloadedBytes ); UnityWebRequest.downloadedBytes を参照する

【Unity】Dropbox からアセットバンドルをダウンロードしてくる場合の URL

概要 URL 末尾の ?dl=0 を ?dl=1 に変更する 参考サイト様

【Unity】Caching.IsVersionCached が常に false を返す状況に遭遇した

概要 // ここだとキャッシュが存在する場合 true が返ってくる Debug.Log( Caching.IsVersionCached( url, hash ) ); var webRequest = UnityWebRequestAssetBundle.GetAssetBundle( m_url, m_hash, m_crc ); var requestOperation = webRequest.SendWebRequ…

【Unity】Addressable Asset System 1.7.4 Changelog

概要 建物カタログデータの速度が向上しました。 サブオブジェクトの処理に関連するさまざまなマイナーな最適化。 ビルドプロセスのカタログ生成部分にプログレスバーを追加しました。 初期化オブジェクトに非同期初期化APIを提供します。 CacheInitializati…

【Unity】Addressable Asset System を使用しているプロジェクトで従来のアセットバンドル名の仕組みを使用していると表示される警告

概要 Legacy Bundles Detected We have detected the use of legacy bundles in this project. Would you like to auto-convert those into Addressables? This will take each asset bundle you have defined (we have detected X bundles), create an Addr…

【Unity】Addressable Asset System でアドレスが重複している状態でアセットバンドルをビルドした時に出力されたエラー

概要 ArgumentException: An item with the same key has already been added. Key: 【GUID】 エラーログに出力された GUID からアセットを調べてみたところ、 そのアセットのアドレスが二重に登録されている状態だった 二重に登録されているアドレスをすべ…

【Unity】Addressable Asset System の AssetBundleRequestOptions でハッシュ値や CRC、ビルドサイズを取得できる

概要 public sealed class Example : IAssetBundleResource { public void Setup( ProvideHandle handle ) { var options = handle.Location.Data as AssetBundleRequestOptions; // ハッシュ値 Debug.Log( options.Hash ); // CRC 値 Debug.Log( options.Cr…