コガネブログ

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

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

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

【Unity】指定した EditorWindow が開いているかどうかエディタ拡張で確認する方法

概要 using UnityEditor; using UnityEngine; public static class Example { [MenuItem( "Tools/Hoge" )] public static void Hoge() { var assembly = typeof( EditorApplication ).Assembly; var windowTypeName = "UnityEditor.InspectorWindow"; var wi…

【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】Unity プロジェクト起動時に毎回 API Update Required が表示される場合

はじめに Unity プロジェクトを開いていない状態で Assembly-CSharp-firstpass.csproj に含まれているスクリプトが変更されると 次に Unity プロジェクトを開こうとする時に API Update Required が表示される状態だった 解決方法 Assembly-CSharp-firstpass…

【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】「Generate all .csproj files.」をオンにしていても .csproj が生成されない場合

概要 下記のことを試していたら生成されるようになった Visual Studio を閉じる Unity メニューの「Edit > Preferences...」を選択する 「External Tools」の「Generate all .csproj files.」をオフにしてからオンにする Project ビューで C# スクリプトをダ…

【Unity】エディタ拡張で Profiler の情報を読み込む方法

概要 using UnityEditor; using UnityEditorInternal; public static class Example { [MenuItem( "Tools/Hoge" )] private static void Hoge() { ProfilerDriver.LoadProfile( "test.data", keepExistingData: true ); } } 現在 Profiler に表示されている…

【Unity】エディタ拡張で Profiler の情報を保存する方法

概要 using UnityEditor; using UnityEditorInternal; public static class Example { [MenuItem( "Tools/Hoge" )] private static void Hoge() { ProfilerDriver.SaveProfile( "test.data" ); } } 保存したファイルは Profiler の Load から読み込める

【Unity】Profiler の Deep Profile の ON / OFF をエディタ拡張で変更する方法

概要 using UnityEditor; using UnityEditorInternal; public static class Example { [MenuItem( "Tools/Hoge" )] private static void Hoge() { ProfilerDriver.deepProfiling = !ProfilerDriver.deepProfiling; } }

【Unity】Unity プロジェクトから指定した型のアセットをすべて取得するエディタ拡張

ソースコード 使用例 foreach ( var n in AssetDatabaseUtils.FindAssets<Texture>() ) { Debug.Log( n.name ); }</texture>

【Unity】Unity プロジェクトから指定した型のアセットを1つ取得するエディタ拡張

ソースコード 使用例 Debug.Log( AssetDatabaseUtils.FindAsset<Texture>().name );</texture>

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

【Unity】Addressable Asset System の BundledAssetGroupSchema.AssetBundleProviderType を変更するエディタ拡張

概要 使用例 using UnityEditor; public static class Example { [MenuItem( "Tools/Hoge" )] private static void Hoge() { var group = AddressableUtils.GetOrCreateGroup( "【グループ名】" ); var bundledAssetGroupSchema = group.Schemas .OfType<BundledAssetGroupSchema>() .</bundledassetgroupschema>…

【Unity】Addressable Asset System の BundledAssetGroupSchema.BundleNaming を変更するエディタ拡張

概要 使用例 public static class Example { [MenuItem( "Tools/Hoge" )] private static void Hoge() { var group = AddressableUtils.GetOrCreateGroup( "【グループ名】" ); var bundledAssetGroupSchema = group.Schemas .OfType<BundledAssetGroupSchema>() .FirstOrDefault() ; </bundledassetgroupschema>…

【Unity】アセットバンドルがキャッシュに存在するか確認する方法

概要 ProvideHandle provideHandle = ...; AssetBundleRequestOptions options = ...; var location = provideHandle.Location; var url = location.InternalId; var hash = Hash128.Parse( options.Hash ); var isExist = Caching.IsVersionCached( url, ha…

【Unity】Addressable Asset System の設定が変更された時に呼び出されるイベント

概要 using UnityEditor; using UnityEditor.AddressableAssets.Settings; using UnityEngine; [InitializeOnLoad] public static class Example { static Example() { AddressableAssetSettings.OnModificationGlobal += OnModificationGlobal; } private s…

【Unity】Addressable Asset System の AddressableAssetEntry.SetAddress はアドレスが変更された時のみ処理が実行されるようになっている

概要 public void SetAddress(string addr, bool postEvent = true) { if (m_Address != addr) { m_Address = addr; if (string.IsNullOrEmpty(m_Address)) m_Address = AssetPath; SetDirty(AddressableAssetSettings.ModificationEvent.EntryModified, thi…

【Unity】Addressable Asset System の Play Mode Script を変更するエディタ拡張

概要 使用例 using UnityEditor; public static class Example { [MenuItem( "Tools/Hoge" )] private static void Hoge() { // デフォルトなら // 0: Use Asset Database (faster) // 1: Simulate Groups (advanced) // 2: Use Existing Build (requires bu…