コガネブログ

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

【おすすめスライド】「【Unity道場 京都スペシャル4】 知って得する、 テンションが上がりそうな 新機能たち」

スライド

【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】空のゲームオブジェクトのプレハブのサイズは 1KB でデフォルトの Particle System のプレハブのサイズは 113KB

概要 項目 サイズ ファイル行数 空のゲームオブジェクトのプレハブ 1KB 32行 デフォルトの Cube プレハブ 3KB 94行 デフォルトの Particle System のプレハブ 113KB 4755行 ファイルの中身 空のゲームオブジェクトのプレハブ デフォルトの Particle System …

【Unity】エディタ拡張で async / await を使用する

概要 using System.Threading.Tasks; using UnityEditor; using UnityEngine; public class Example { [MenuItem( "Tools/Run" )] private static void Run() { RunAsync(); } private static async void RunAsync() { var count = 10; for ( int i = 0; i <…

【Unity】エディタ拡張で Windows のメッセージボックスを表示する方法

概要 C:\Windows\Microsoft.NET\Framework64\vX.X フォルダ内の System.Windows.Forms.dll を Unity プロジェクトの Editor フォルダに追加して using System.Windows.Forms; using UnityEngine; public static class Example { [UnityEditor.MenuItem( "Too…

【Unity】ダミーテクスチャを作成するエディタ拡張

概要

【Unity】アセットパスと GUID の変換ができるエディタ拡張

概要

【Unity】Unity 初心者向けの技術書「Unityで作る2Dアクションゲーム」を BOOTH で販売開始しました(約750ページ、全66章)

はじめに Unity 初心者向けの技術書「Unityで作る2Dアクションゲーム」を BOOTH で販売開始しました 商品ページ:https://baba-s.booth.pm/items/1883344 完成プロジェクト:https://github.com/baba-s/techbook-unity-2d-action-game 本書で作成するゲーム …

【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.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 で指定したアドレスが読み込めるかどうか確認する方法

概要 Addressables.LoadResourceLocationsAsync( address ).Completed += handle => { var isSuccess = handle.Status == AsyncOperationStatus.Succeeded && handle.Result != null && 1 <= handle.Result.Count ; .... }; LoadResourceLocationsAsync は通…

【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】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】ゲームオブジェクトが破棄される時に自動で IDisposable.Dispose を呼び出す拡張メソッド

ソースコード 使用例 using System; using UnityEngine; public class Character : IDisposable { public void Dispose() { Debug.Log( "ピカチュウ" ); } } public class Example : MonoBehaviour { private void Start() { var character = new Character(…

【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(); } }