コガネブログ

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

【Unity】Addressable Asset System のカタログの種類

概要 AddressablesMainContentCatalog ローカルカタログ AddressablesMainContentCatalogRemoteHash リモートカタログ AddressablesMainContentCatalogCacheHash ダウンロードしたリモートカタログが保存される場所 インターネットにアクセスせずにゲームを…

【Unity】Addressable Asset System で Resources フォルダや Build Settings に登録しているシーンを含めない方法

概要 Project ビューで Build In Data.asset を選択して Include Resources Folders Include Build Setting Scenes のチェックを外す

【Unity】Addressable Asset System の CheckForCatalogUpdates や UpdateCatalogs の基本的な使い方

概要 Debug.Log( "CheckForCatalogUpdates 開始" ); // リモートカタログの更新があるかどうか確認する Addressables.CheckForCatalogUpdates().Completed += checkHandle => { Debug.Log( $"CheckForCatalogUpdates 終了:{checkHandle.Status}" ); // 更新…

【Unity】Addressable Asset System の Profile の各種パスには自作の静的プロパティを指定できる

概要 public static class Hoge { public static string Fuga => "ピカチュウ"; } 例えば上記のような静的プロパティが存在する場合、 [Hoge.Fuga]/[BuildTarget] のような記述で Profile の LocalBuildPath や LocalLoadPath などに指定できる このプロパテ…

【Unity】Addressable Asset System 1.7.4 だと AddressableAssetSettings の設定を Inspector で変更して Ctrl + S を押しても保存されない

概要 Addressable Asset System 1.7.4 だと AddressableAssetSettings の設定を Inspector で変更して Ctrl + S を押しても保存されない 1.7.5 も同様だった Inspector を Debug モードにして値を変更した場合は正常に保存できる

【Unity】Addressable Asset System のデフォルトの Profile の各パス

概要 項目 内容 BuildTarget [UnityEditor.EditorUserBuildSettings.activeBuildTarget] LocalBuildPath [UnityEngine.AddressableAssets.Addressables.BuildPath]/[BuildTarget] LocalLocadPath {UnityEngine.AddressableAssets.Addressables.RuntimePath}/…

【Unity】Addressable Asset System におけるプラットフォーム情報を取得する方法

概要 PlatformMappingService.GetPlatform を使用すると AddressablesPlatform という列挙型でプラットフォーム情報を取得できる Unity エディタ上であれば、EditorUserBuildSettings.activeBuildTarget に紐づく AddressablesPlatform の値が返ってくる そ…

【Unity】Addressable Asset System で BuildPath や RuntimePath などを参照するとどのような文字列を取得できるか

概要 BuildPath "Library/com.unity.addressables/StreamingAssetsCopy/" + StreamingAssetsSubFolder + "/" + PlatformMappingService.GetPlatform() PlayerBuildDataPath Application.streamingAssetsPath + "/" + StreamingAssetsSubFolder + "/" + Platf…

【Unity】Addressable Asset System で Bundle Naming を Use Hash of Filename にした時に生成されるハッシュを取得する方法

概要 [MenuItem( "Tools/Hoge" )] private static void Hoge() { var filename = "【アセットバンドルのファイル名】"; var hash = HashingMethods.Calculate( filename ); Debug.Log( hash ); } HashingMethods.Calculate を使用する アセットバンドルのフ…

【Unity】Addressable Asset System で Bundle Naming を Filename にした時にどのようにパッキングされるか

概要 グループ内のシーンファイル 【グループ名の lowercase】_scenes_all.bundle という名前のアセットバンドルに含まれる グループ内のシーンファイル以外のアセット 【グループ名の lowercase】_assets_all.bundle という名前のアセットバンドルに含まれ…

【Unity】Addressable Asset System の DownloadDependenciesAsync の引数に渡せる key

渡せるもの アドレス ラベル 英数字の羅列のアセットバンドル名 渡せないもの アセットバンドル名 Status に Succeeded が返ってくるが、何もダウンロードされない

【Unity】Addressable Asset System でカタログをダウンロードする時に使用される Provider

概要 ContentCatalogProvider が JsonAssetProvider を使用している ContentCatalogProvider.cs 64行目 JsonAssetProvider は TextDataProvider を継承している TextDataProvider にダウンロード処理が記載されている

【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】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 フォルダが…