コガネブログ

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

【Unity】Addressable Asset System ではシーンのアセットバンドルの読み込みに失敗した場合にもシーンの読み込み処理に進んでしまいエラーと例外が発生する

概要 AssetBundleResource でシーンのアセットバンドルのダウンロードに失敗しても シーンの読み込み処理に進んでしまう シーンの読み込み処理は SceneProvider.cs に書かれており、 下記のエラーと例外が発生する Scene 'XXXX' couldn't be loaded because …

【Unity】Player content must be built before entering play mode with packed data.

概要 Addressable Asset System で Play Mode Script を 「Use Existing Build」にしている状態で Unity を再生した時に Player content must be built before entering play mode with packed data. This can be done from the Addressables window in the …

【Unity】Android で Addressable Asset System のリモートカタログのキャッシュを削除するスクリプト

概要 var path = $"{Application.persistentDataPath}/com.unity.addressables"; var files = Directory.GetFiles( path, "*", SearchOption.AllDirectories ); foreach ( var file in files ) { File.Delete( file ); } Addresable Asset System でリモート…

【Unity】Addressable Asset System のリモートカタログやアセットバンドルは Android でどこに保存されるか

概要 /storage/emulated/0/Android/data/【Package Name】/files/ リモートカタログのキャッシュは上記フォルダ内の 「com.unity.addressables」フォルダに保存される アセットバンドルのキャッシュは上記フォルダ内の 「UnityCache」フォルダに保存される

【Unity】Addressable Asset System でリモートカタログのキャッシュを削除するエディタ拡張

概要 using System; using System.IO; using UnityEditor; using UnityEngine; public static class Tools { [MenuItem( "Tools/リモートカタログのキャッシュを削除" )] private static void DeleteRemoteCatalogCacheFolder() { var path = $"{Application…

【Unity】Addressable Asset System でリモートカタログのキャッシュのフォルダを開くエディタ拡張

概要 using System; using System.Diagnostics; using UnityEditor; using UnityEngine; public static class Tools { [MenuItem( "Tools/リモートカタログのキャッシュのフォルダを開く" )] private static void OpenRemoteCatalogCacheFolder() { var path…

【Unity】Addressable Asset System で IResourceLocation を Json 形式で出力するための構造体

概要 [Serializable] public struct ResourceLocationJsonData { [SerializeField] private string m_internalId; [SerializeField] private string m_primaryKey; [SerializeField] private string m_providerId; [SerializeField] private string m_resour…

【Unity】Addressable Asset System で InitializeAsync でリモートカタログが読み込めなかった場合も成功になる

概要 InitializeAsync でリモートカタログを読み込む処理は InitializationOperation.CreateInitializationOperation で記述されている リモートカタログをサーバからダウンロードする処理は TextDataProvider.InternalOp.Start で記述されている internalId…

【Unity】Addressable Asset System で InitializeAsync を実行したときに InternalIdTransformFunc で呼び出される InternalId

概要 Windows 10 リモートカタログのファイル名は catalog_1.0.0 RemoteLoadPath は http://localhost/[BuildTarget] 表の横幅がおかしいので気が向いたら直す リモートカタログがキャッシュされていない場合 ResourceType PrimaryKey InternalId ResourceMa…

【Unity】Addressable Asset System でリモートカタログがキャッシュされるフォルダ(Windows 10)

概要 C:\Users\【ユーザー名】\AppData\LocalLow\【Company Name】\【Product Name】\com.unity.addressables InitializeAsync でリモートカタログが読み込まれると 上記フォルダにリモートカタログの .hash と .json が保存される

【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…