コガネブログ

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

【Unity】Addressable Asset System でアセットが削除された時にグループを更新しないようにするエディタ拡張

ソースコード

【Unity】Addressable Asset System でカタログがビルドされている箇所、ランタイムで読み込まれている箇所

リモートカタログがビルドされている箇所 BuildScriptPackedMode.cs CreateRemoteCatalog 関数 WriteFile(remoteJsonBuildPath, jsonText, builderInput.Registry); ローカルカタログがビルドされている箇所 BuildScriptPackedMode.cs CreateCatalogFiles 関…

【Unity】Addressable Asset System で BuildScriptBase を継承したインスタンスを Addressable Groups の Build メニューに追加する方法

概要 BuildScriptBase.CanBuildData 関数をオーバーライドして true を返す Addressable Groups の Build メニューは下記のように生成されている AddressableAssetsSettingsGroupEditor.cs 181行目辺り var menu = new GenericMenu(); for (int i = 0; i < s…

【Unity】Addressable Asset System ですべてのラベルを取得する方法

概要 using UnityEditor; using UnityEditor.AddressableAssets; using UnityEngine; public static class Example { [MenuItem( "Tools/Hoge" )] private static void Hoge() { var settings = AddressableAssetSettingsDefaultObject.Settings; var labels…

【Unity】Addressable Asset System で差分ビルドが必要なエントリを取得する方法

概要 using UnityEditor; using UnityEditor.AddressableAssets; using UnityEditor.AddressableAssets.Build; using UnityEngine; public static class Example { [MenuItem( "Tools/Hoge" )] private static void Hoge() { var settings = AddressableAsse…

【Unity】Addressable Asset System で Unity を再生した時やアセットバンドルをビルドした時に呼び出されるコールバック

概要 using UnityEditor; using UnityEditor.AddressableAssets.Build; using UnityEngine; [InitializeOnLoad] public static class Example { static Example() { BuildScript.buildCompleted += OnBuildCompleted; } private static void OnBuildComplete…

【Unity】Addressable Asset System が依存している Unity Package

概要 com.unity.scriptablebuildpipeline com.unity.test-framework

【Unity】Addressable Asset System における .gitignore の設定

概要 https://github.com/github/gitignore/blob/master/Unity.gitignore 上記の公式の .gitignore に記載されている # Packed Addressables /[Aa]ssets/[Aa]ddressable[Aa]ssets[Dd]ata/*/*.bin* # Temporary auto-generated Android Assets /[Aa]ssets/[Ss…

【Unity】Unity Package Manager で入手したパッケージの一部を git のバージョン管理に含める方法

概要 /[Ll]ibrary/* !/[Ll]ibrary/PackageCache/ /[Ll]ibrary/PackageCache/* !/[Ll]ibrary/PackageCache/com.unity.addressables@1.7.5/ 例えば Addressable Asset System を git でバージョン管理したい場合、 .gitignore で上記のように記述する

【おすすめスライド】「【リリースが先か】えっ!Addressablesを新規プロジェクトに?【ver1が先か】」

スライド

【Unity】Addressable Asset System の StreamingAssets の settings.json を読み込むスクリプト

概要 StartCoroutine( UniAddressUtils.LoadSettingsJson( c => Debug.Log( c ) ) );

【Unity】Addressable Asset System の StreamingAssets の link.xml を読み込むスクリプト

概要 StartCoroutine( UniAddressUtils.LoadLinkXml( c => Debug.Log( c ) ) );

【Unity】Addressable Asset System の StreamingAssets の catalog.json を読み込むスクリプト

概要 StartCoroutine( UniAddressUtils.LoadCatalogJson( c => Debug.Log( c ) ) );

【Unity】Addressable Asset System の InitializeAsync を複数回呼び出したい場合

概要 Addressables.InitializeAsync でリモートカタログがダウンロードされるが ダウンロードに失敗した場合も内部では初期化済みフラグが立ってしまう AddressablesImpl.hasStartedInitialization がそのフラグ フラグが立ってしまうと、再度 Addressables.…

【Unity】Addressable Asset System の AddressablesImpl.hasStartedInitialization をリフレクションで false にする方法

概要 var addressablesType = typeof( Addressables ); var assembly = addressablesType.Assembly; var addressablesImplType = assembly.GetType( "UnityEngine.AddressableAssets.AddressablesImpl" ); var addressablesImplField = addressablesType.Get…

【Unity】Addressable Asset System の AddressableAssetsData フォルダ以下のアセットはビルドに含まれない

概要 Assets/AddressableAssetsData フォルダ以下のアセットはビルドに含まれない ビルド後に Editor.log の Build Report を見ても含まれていない

【Unity】Addressable Asset System でカタログに記述されているアセットバンドルの一覧をログ出力するエディタ拡張

概要 [MenuItem( "Tools/Hoge" )] private static void Hoge() { var path = @"Library\com.unity.addressables\StreamingAssetsCopy\aa\Windows\catalog.json"; var json = File.ReadAllText( path ); var data = JsonUtility.FromJson<ContentCatalogData>( json ); var intern</contentcatalogdata>…

【Unity】Addressable Asset System で PlatformMappingService.GetAddressablesPlatformInternal をリフレクションで参照する関数

概要 private static AddressablesPlatform GetPlatform( BuildTarget target ) { const string methodName = "GetAddressablesPlatformInternal"; var serviceType = typeof( PlatformMappingService ); var targetType = typeof( BuildTarget ); var metho…

【Unity】Git で Clone や Pull した時に AddressableAssetSettings.asset が変更状態になる現象を防ぐエディタ拡張

概要 自分の環境だと Git で Clone や Pull した時に AddressableAssetSettings.asset の改行コードが Win から Unix になってしまっていたので、 エディタ拡張で改行コードを Win にするようにした git の core.autocrlf を使おうかと思ったが、現象が発生…

【Unity】Addressable Asset System で Library/com.unity.addressables フォルダをバージョン管理に含める方法

概要 /[Ll]ibrary/* !/[Ll]ibrary/com.unity.addressables/ .gitignore で Library フォルダの無視の指定を上記のように記述する /[Ll]ibrary/ !/[Ll]ibrary/com.unity.addressables/ このように * が付いていないと反映されないので気をつける /[Ll]ibrary/…

【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 が保存される