unity 3 dノートのコードによる一括設定AssetBundle名


実際のプロジェクトでは、数千以上のリソースをパッケージ化する必要がある場合があります.名前を設定するには、接尾辞を設定するのは少し手間がかかります.
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEditor;
using System.IO;

public class BuilderAssetsBunlds
{
    // 、、、、、、、、、、、、、、、、、、、、、、
    [MenuItem("Tools/ ")]
    public static void BundlerAssets()
    {
        // Debug.LogError(" Assets");
        BuildPipeline.BuildAssetBundles(GetOutAssetsDirecotion(), BuildAssetBundleOptions.None, BuildTarget.StandaloneWindows);
    }

    public static string GetOutAssetsDirecotion()
    {
        string assetBundleDirectory = Application.streamingAssetsPath;
        if (!Directory.Exists(assetBundleDirectory))
        {
            Directory.CreateDirectory(assetBundleDirectory);
        }
        return assetBundleDirectory;
    }

    //   /////////////////////////////

    [MenuItem("Tools/ Assetbundle ")]
    public static void SetAssetBundellabls()
    {
        CheckFileSystemInfo();
    }

    public static void CheckFileSystemInfo()  // 
    {
        AssetDatabase.RemoveUnusedAssetBundleNames(); // assetbundlename
        Object obj = Selection.activeObject;    // Selection.activeObject  
        string path = AssetDatabase.GetAssetPath(obj);// 
        CoutineCheck(path);
    }

    public static void CheckFileOrDirectory(FileSystemInfo fileSystemInfo, string path) // 
    {
        FileInfo fileInfo = fileSystemInfo as FileInfo;
        if (fileInfo != null)
        {
            SetBundleName(path);
        }
        else
        {
            CoutineCheck(path);
        }
    }

    public static void CoutineCheck(string path)   // , 
    {
        DirectoryInfo directory = new DirectoryInfo(@path);
        FileSystemInfo[] fileSystemInfos = directory.GetFileSystemInfos();

        foreach (var item in fileSystemInfos)
        {
            // Debug.Log(item);
            int idx = item.ToString().LastIndexOf(@"\");// '\' 
            string name = item.ToString().Substring(idx + 1);// 

            if (!name.Contains(".meta"))
            {
                CheckFileOrDirectory(item, path + "/" + name);  //item   , 
            }
        }
    }

    public static void SetBundleName(string path)  // assetbundle 
    {
        var importer = AssetImporter.GetAtPath(path);
        string[] strs = path.Split('.');
        string[] dictors = strs[0].Split('/');
        string name = "";
        for (int i = 1; i < dictors.Length; i++)
        {
            if (i < dictors.Length - 1)
            {
                name += dictors[i] + "/";
            }
            else
            {
                name += dictors[i];
            }
        }
        if (importer != null)
        {
            importer.assetBundleVariant = "bytes";
            importer.assetBundleName = name;
        }
        else
            Debug.Log("importer ");
    }

}