コガネブログ

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

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

【Unity】Addressable Asset System でデフォルト以外のすべてのグループを削除するエディタ拡張

概要 使用例 using UnityEditor; public static class Example { [MenuItem( "Tools/Hoge" )] private static void Hoge() { AddressableUtils.RemoveAllGroupWithoutDefault(); } }

【Unity】Addressable Asset System でアセットやフォルダにラベルを割り当てる・解除するエディタ拡張

概要 使用例 using UnityEditor; public static class Example { [MenuItem( "Tools/Hoge" )] private static void Hoge() { // アセットにラベルを割り当てます AddressableUtils.SetLabelToAssetOrFolder ( path:"Assets/New Material.mat", label: "hoge"…

【Unity】Addressable Asset System でアセットやフォルダにアドレスを割り当ててグループに追加するエディタ拡張

概要 使用例 using UnityEditor; public static class Example { [MenuItem( "Tools/Hoge" )] private static void Hoge() { // アセットにアドレスを割り当ててグループに追加する AddressableUtils.SetAddressToAssetOrFolder ( path:"Assets/New Material…

【Unity】Addressable Asset System のグループを作成するエディタ拡張

概要 使用例 using UnityEditor; public static class Example { [MenuItem( "Tools/Hoge" )] private static void Hoge() { var group = AddressableUtils.GetOrCreateGroup( "test" ); } }

【Unity】エディタ拡張で Addressable Asset System のビルド・クリーンを実行する方法

概要 using UnityEditor; using UnityEditor.AddressableAssets.Settings; public static class Test { [MenuItem( "Tools/Build" )] private static void Build() { AddressableAssetSettings.BuildPlayerContent(); } [MenuItem( "Tools/Clean" )] private…

【Unity】すべてのアセットバンドル名を削除するエディタ拡張

概要 using UnityEditor; public class Example { [MenuItem( "Tools/Hoge" )] private static void Hoge() { foreach ( var n in AssetDatabase.GetAllAssetBundleNames() ) { AssetDatabase.RemoveAssetBundleName( n, true ); } } }

【Unity】Addressable Asset System で詳細なログ出力を有効にする方法

概要 シンボル定義に「ADDRESSABLES_LOG_ALL」を追加する

【Unity】Addressable Asset System の実行時エラーログを無効化する方法

概要 AddressableAssetSettings の「Log Runtime Exceptions」をオフにする

【Unity】Addressable Asset System の ExceptionHandler で例外が出力されたキーと型をログ出力するサンプル

概要 using System; using System.Text.RegularExpressions; using UnityEngine; using UnityEngine.AddressableAssets; using UnityEngine.ResourceManagement; using UnityEngine.ResourceManagement.AsyncOperations; internal sealed class Example : Mo…

【Unity】Addressable Asset System で例外を検知する方法

概要 try~catch で例外を検知することはできない ResourceManager.ExceptionHandler で例外を検知することができる Application.LogCallback のようなもの 例外はただの Exception で飛んできてきているようなので、 ResourceManager.ExceptionHandler の引…

【Unity】アセットバンドル化するアセットがアプリに内包するアセットから参照されていないか確認できる「AssetReferenceFinder」紹介

はじめに 「UnitySamples」リポジトリに含まれている 「AssetReferenceFinder.cs」を使用することで アセットバンドル化するアセットが アプリに内包するアセットから参照されていないか確認できます 使用例 例えば、アセットバンドル化するアセットが含まれ…

【Unity】Unity 製のゲームやアセットバンドルからアセットを抽出できるリバースエンジニアリングツール「Unity Assets Bundle Extractor(UABE)」紹介

はじめに 「Unity Assets Bundle Extractor(UABE)」は Unity 製のゲームやアセットバンドルから アセットを抽出できるリバースエンジニアリングツールです 目次 はじめに 目次 入手方法 使い方 アセットバンドルからアセットを抽出 キャッシュされたアセッ…

【Unity】Unity 製のゲームやアセットバンドルからアセットを抽出できるリバースエンジニアリングツール「uTinyRipper」紹介

はじめに 「uTinyRipper」は Unity 製のゲームやアセットバンドルから アセットを抽出できるリバースエンジニアリングツールです 目次 はじめに 目次 入手方法 使い方 アセットバンドルからアセットを抽出 キャッシュされたアセットバンドルからアセットを抽…

【Unity】マルチプロセスでアセットバンドルをビルドできるようになりビルド時間を削減できる「Unity-MultiProcess-BuildPipeline」紹介

はじめに 「Unity-MultiProcess-BuildPipeline」を Unity プロジェクトに導入することで マルチプロセスでアセットバンドルをビルドできるようになり ビルド時間を削減できるようになります 使い方 using System.Collections.Generic; using UnityEditor; pu…

【Unity】エディタ上でアセットバンドルの構築ルールを設定できる「EasyAssetBundle」紹介

はじめに 「EasyAssetBundle」を Unity プロジェクトに導入することで エディタ上でアセットバンドルの構築ルールを設定できるようになります 目次 はじめに 目次 クイックスタート 構築ルールの設定 Basic Settings Export Setting AssetBundleList Setting…

【Unity】オープンソースフレームワーク「Autoya」を導入してアセットバンドルの作成と読み込みを行う

はじめに 「Autoya」というオープンソースフレームワークには アセットバンドルに関する下記のような機能が備わっています アセットバンドルの作成と読み込み アセットバンドルをリスト単位で運用・更新 アセットバンドルの事前ダウンロード アセットバンド…