コガネブログ

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

【Unity】エディタ拡張ですべてのアセットバンドル名を取得する方法

概要 using UnityEditor; using UnityEngine; public static class Example { [MenuItem( "Tools/Hoge" )] private static void Hoge() { foreach ( var x in AssetDatabase.GetAllAssetBundleNames() ) { Debug.Log( x ); } } }

【Unity】設定済みのアセットバンドル名から AssetBundleBuild の配列を作成する方法

概要 using System.Linq; using UnityEditor; public static class Example { [MenuItem( "Tools/Hoge" )] private static void Hoge() { var builds = AssetDatabase .GetAllAssetBundleNames() .Select ( x => new AssetBundleBuild { assetBundleName = x…

【Unity】MultiProcessBuild でアセットバンドルが正常にビルドできない場合

概要 BuildPipeline.cs 95 行目付近の文字列整形処理で string cmd = string.Format(" -quit" + " -batchmode" + " -logfile \"{0}/log_{1}.txt\"" + //" -projectPath {0} " + " -executeMethod MultiProcessBuild.BuildPipeline.BuildJobSlave" + " -build…

【Unity】AssetBundleManifest を JSON 形式で出力するための構造体

ソースコード using System; using System.Diagnostics.CodeAnalysis; using System.Linq; using JetBrains.Annotations; using UnityEngine; [Serializable] [SuppressMessage( "ReSharper", "InconsistentNaming" )] public struct JsonAssetBundleManifes…

【Unity】アセットバンドルからファイル名でアセットを読み込めなくしてパフォーマンスを少し改善する方法

概要 using UnityEngine; public class TestClass : MonoBehaviour { private void Start() { var path = "AssetBundles/materials.bundle"; var assetBundle = AssetBundle.LoadFromFile( path ); Debug.Log( assetBundle.LoadAsset( "Assets/material 1.ma…

【Unity】アセットバンドルビルドで manifest のみを作成する方法

概要 using System.IO; using UnityEditor; using UnityEngine; public static class Example { [MenuItem( "Tools/Build Asset Bundles" )] private static void BuildAssetBundles() { var outputPath = "AssetBundles"; Directory.CreateDirectory( outpu…

【Unity】アセットバンドルビルド時に致命的なエラーが発生したらビルドを止める方法

概要 BuildPipeline.BuildAssetBundles ( outputPath: outputPath, builds: builds, assetBundleOptions: BuildAssetBundleOptions.StrictMode, targetPlatform: BuildTarget.StandaloneWindows ); assetBundleOptions に BuildAssetBundleOptions.StrictMod…

【Unity】アセットバンドル名を設定せずにアセットバンドルをビルドする方法

概要 using System.IO; using UnityEditor; public static class Example { [MenuItem( "Tools/Build Asset Bundles" )] private static void BuildAssetBundles() { var outputPath = "AssetBundles"; Directory.CreateDirectory( outputPath ); var materi…

【Unity】ビルドしたアセットバンドルのヘッダに Unity のバージョン情報を含めないようにする方法

概要 BuildPipeline.BuildAssetBundles ( outputPath: outputPath, builds: builds, assetBundleOptions: BuildAssetBundleOptions.AssetBundleStripUnityVersion, targetPlatform: BuildTarget.StandaloneWindows ); assetBundleOptions に BuildAssetBundl…

【Unity】Addressable Asset System に関する記事まとめ(140 件以上)

はじめに 当ブログで紹介してきた Addressable Asset System に関する記事を 140 件以上まとめました 注意 古いバージョン(1.6.2 など)のころに書いた記事も混ざっているため 最新のバージョンだと既に動かないプログラムが紹介されていたりする可能性があ…

【Unity】Addressables の UpdateCatalogs で通信環境が悪いなどの理由でリモートカタログのダウンロードに失敗した場合内部で NullReferenceException が発生する

概要 protected override async void Execute() { Exception exception = null; var result = await System.Threading.Tasks.Task.Run ( () => { try { var catalogs = new List<IResourceLocator>( m_DepOp.Result.Count ); for ( int i = 0; i < m_DepOp.Result.Count; i++ )</iresourcelocator>…

【Unity】アセットバンドルを並列ビルドするとどのくらい高速化できるか

検証内容 アセットバンドルが約 3,700 個存在する Unity プロジェクトで検証 検証環境 Windows 10 Unity 2020.3.25f1 クリーンビルドした場合 項目 アセットバンドルのビルドにかかった時間 通常 16分24秒 並列ビルド(スレーブ 2 個) 12分39秒 並列ビルド…

【Unity】AssetBundleBrowser: Bundle name 'XXXX' contains a period

概要 AssetBundleBrowser: Bundle name 'XXXX' contains a period. Internally Unity keeps 'bundleName' and 'variantName' separate, but externally treat them as 'bundleName.variantName'. If a bundleName contains a period, the build will (probab…

【Unity】Addressables で指定したアドレスに紐づくアセットが存在するか確認する方法

ソースコード /// <summary> /// 指定されたアドレスに紐づくアセットが存在する場合 true を返します /// </summary> public static async Task<bool> Exists( object key ) { var handle = Addressables.LoadResourceLocationsAsync( key ); await handle.Task; return handle.Statu</bool>…

【Unity】Addressables でローカルカタログの読み込みに失敗したか確認する例

ソースコード using System.Linq; using System.Threading.Tasks; using UnityEngine; using UnityEngine.AddressableAssets; public class Example : MonoBehaviour { // ローカルカタログの読み込みに失敗した場合、 // 以下のようなエラーや例外が発生す…

【Unity】Addressables でリモートカタログのダウンロードの通信に失敗したか確認する例

ソースコード using System.Linq; using System.Threading.Tasks; using UnityEngine; using UnityEngine.AddressableAssets; public class Example : MonoBehaviour { // リモートカタログのダウンロードの通信に失敗した場合、 // 以下のようなエラーや例…

【Unity】Addressables でリモートカタログのダウンロード時にディスクの空き容量が不足していないか確認する例

ソースコード using System.Linq; using System.Threading.Tasks; using UnityEngine; using UnityEngine.AddressableAssets; public class Example : MonoBehaviour { // リモートカタログのダウンロード時にディスクの空き容量が不足している場合 // 以下…

【Unity】Addressables でリモートカタログが破損していないか確認する例

ソースコード using System.Linq; using System.Threading.Tasks; using UnityEngine; using UnityEngine.AddressableAssets; public class Example : MonoBehaviour { // リモートカタログのファイルが破損している場合、 // 以下のようなエラーや例外が発…

【Unity】Addressables を導入しているプロジェクトでビルドすると定期的に数 KB の GC Alloc が発生する場合

概要 Addressables を導入しているプロジェクトからゲームをビルドして Profiler を見た時に 「DiagnosticEventCollectorSingleton.Update()」というプロセスで 1.2 KB の GC Alloc が定期的に発生している場合 AddressableAssetSettings の「Send Profiler …

【Unity】Addressables を導入しているプロジェクトで再生に時間がかかる場合は AssetReference が原因の可能性がある

概要 Addressables 1.18.16 あたりから AssetReference のコンストラクタで /// <summary> /// Construct a new AssetReference object. /// </summary> public AssetReference() { #if UNITY_EDITOR EditorApplication.playModeStateChanged -= ReleaseHandleWhenPlaymodeState…

【Unity】Addressables のビルド時間の内訳を Chrome で確認する方法

概要 Chrome を開いてアドレスバーに chrome://tracing と入力します Load ボタンを押して Unity プロジェクトのフォルダに存在する Library/com.unity.addressables/AddressablesBuildTEP.json を選択します これで Addressables のビルド時間の内訳を Chro…

【Unity】Addressables でビルドした時にビルド結果の詳細を出力する方法

概要 Unity の Preferences を開いて左メニューで「Addressables」を選択して 「Debug Build Layout」をオンにした状態で Addressables でビルドすると ビルド結果の詳細が Library/com.unity.addressables/ フォルダに buildlayout.txt というファイルで出…

【Unity】Addressables で Android の Play Asset Delivery に対応する公式サンプル

概要 上記の公式の Addressables のサンプルリポジトリの 「Advanced > Play Asset Delivery」フォルダに Addressables で Android の Play Asset Delivery に対応する サンプルプロジェクトが格納されています

【Unity】Android において Addressables でローカルアセットバンドルの読み込みにも UnityWebRequest を使用すると読み込みが速くなる場合がある

概要 Addressables のグループの Inspector で 「Use UnityWebRequest for Local Asset Bundles」をオンにすると Android でローカルアセットバンドルの読み込みが速くなる場合があります 参考サイト様

【Unity】Addressables で CRC を無効にするとアセットバンドルの読み込みが速くなる場合がある

概要 Addressables のグループの Inspector で「Asset Bundle CRC」を「Disabled」にすると アセットバンドルの読み込みが速くなる場合があります 参考サイト様

【Unity】AssetReference からアドレスを取得する方法

ソースコード using System.Linq; using UnityEngine; using UnityEngine.AddressableAssets; public sealed class Example : MonoBehaviour { public AssetReference m_assetReference; private void Start() { var handle = Addressables.LoadResourceLoca…

【Unity】ゲームをビルドする時に自動で Addressables のビルドを実行する方法

検証環境 Unity 2021.2.7f1 Addressables 1.19.15 概要 AddressableAssetSettings の Inspector の 「Build > Build Addressables on Player Build」を変更することで ゲームをビルドする時に自動で Addressables のビルドを実行できるようになります 項目 …

【Unity】Addressables で各グループの BundledAssetGroupSchema の Build Path や Load Path の名前を取得するサンプル

ソースコード using System.Linq; using UnityEditor; using UnityEditor.AddressableAssets; using UnityEditor.AddressableAssets.Settings.GroupSchemas; using UnityEngine; public static class Example { [MenuItem( "Tools/Hoge" )] public static vo…

【Unity】Addressables でフォルダにアドレスを振った場合とファイルごとにアドレスを振った場合で違いはあるか

検証環境 Windows 10 Unity 2020.3.13f1 Addressables 1.19.11 検証方法 スプライトが格納されているフォルダにアドレスを割り振った場合と フォルダ内のスプライトそれぞれにアドレスを割り振った場合で ビルド時間や成果物に違いはあるのか検証 検証結果 …

【Unity】Addressables でアセットバンドルを圧縮するかどうかでビルド時間が変わるか

検証環境 Windows 10 Unity 2020.3.13f1 Addressables 1.19.11 検証方法 10,000 個の Scriptable Object を用意して すべての Scriptable Object にアドレスを割り振って Default Local Group に追加して Default Local Group の Bundle Mode を 「Pack Sepa…