コガネブログ

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

【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.mat" ) );
        Debug.Log( assetBundle.LoadAsset( "material 1" ) );
        Debug.Log( assetBundle.LoadAsset( "material 1.mat" ) );
    }
}

普通にアセットバンドルをビルドした場合は、アセットバンドルからアセットを読み込む時に

  • フルパス
  • ファイル名
  • ファイル名(拡張子つき)

のいずれかを指定できますが、

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 options = BuildAssetBundleOptions.DisableLoadAssetByFileName |
                      BuildAssetBundleOptions.DisableLoadAssetByFileNameWithExtension;

        BuildPipeline.BuildAssetBundles
        (
            outputPath: outputPath,
            assetBundleOptions: options,
            targetPlatform: BuildTarget.StandaloneWindows
        );
    }
}

assetBundleOptions に BuildAssetBundleOptions.DisableLoadAssetByFileName や
BuildAssetBundleOptions.DisableLoadAssetByFileNameWithExtension を指定すると

「ファイル名」や「ファイル名(拡張子つき)」ではアセットを読み込めなくなる代わりに
アセットバンドルのランタイムメモリが節約され、読み込みのパフォーマンスが改善します

参考サイト様