AssetBundle框架編輯器流程之AutoSetLable

using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEditor;
using System.IO;
public class AutoSetLabel 
{

    [MenuItem("Tools/SetAssetBundleLabel")]
    public static void SetABLabel()
    {
       Debug.Log( Application.dataPath + "/AB_Res");

      
        DirectoryInfo rooDirect = new DirectoryInfo(Application.dataPath + "/AB_Res");

        //移除以前的AB標記
        foreach (FileSystemInfo curFile in rooDirect.GetFileSystemInfos())
        {
            RemoveABLabel(curFile);
        }
        AssetDatabase.RemoveUnusedAssetBundleNames();


        //設置AB標記
        foreach (FileSystemInfo curFile in rooDirect.GetFileSystemInfos())
        {
            SetABLabel(curFile);
        }

        Debug.Log("設置AB標記完成");

        AssetDatabase.Refresh();
    }



    /// <summary>
    /// 設置AB文件標記
    /// </summary>
    /// <param name="curFile">文件或者文件夾</param>
    private static void SetABLabel(FileSystemInfo curFile)
    {

        //獲取當前目錄所有文件系統信息 根據後綴區分文件和文件夾
        if (curFile.Extension != "")
        {
            if (curFile.Extension != ".meta")
            {
                //win路徑轉化爲unity
               string fullname =  curFile.FullName.Replace("\\","/");

                string abname = GetABName(fullname);
                ////開始設置包名
                AssetImporter assetImporter = AssetImporter.GetAtPath(fullname.Substring(fullname.IndexOf("Assets")));//相對於工程目錄下的
                assetImporter.assetBundleName = abname;//標記名名
                if (curFile.Extension == ".untiy")
                    assetImporter.assetBundleVariant = "untiy3d";
                else//這部分也可以排除配置文件
                    assetImporter.assetBundleVariant = "ab";
            }
        }
        else
        {
            DirectoryInfo directoryInfo = curFile as DirectoryInfo;
            //獲取當前目錄所有文件系統信息 根據後綴區分文件和文件夾
            foreach (FileSystemInfo tmpFile in directoryInfo.GetFileSystemInfos())
            {
                SetABLabel(tmpFile);
            }
        }

    }


    /// <summary>
    /// 移除所有AB標記
    /// </summary>
    /// <param name="curFile">文件或者文件夾</param>
    private static void RemoveABLabel(FileSystemInfo curFile)
    {
        string fullname = curFile.FullName.Replace("\\", "/");
        AssetImporter assetImporter = AssetImporter.GetAtPath(fullname.Substring(fullname.IndexOf("Assets")));//相對於工程目錄下的
        if (curFile.Extension != ".meta")
            assetImporter.assetBundleName = "";//包名
        if (curFile.Extension == "")//是文件的話
        {
            DirectoryInfo directoryInfo = curFile as DirectoryInfo;
            //獲取當前目錄所有文件系統信息 根據後綴區分文件和文件夾
            foreach (FileSystemInfo tmpFile in directoryInfo.GetFileSystemInfos())
            {
                RemoveABLabel(tmpFile);
            }
        }  
    }


    /// <summary>
    /// 獲取AB標記名
    /// </summary>
    /// <param name="filefullPath">文件全路徑()</param>
    /// <returns></returns>
    private static string GetABName(string filefullPath)
    {
        string fullname = filefullPath.Replace("\\", "/");

        string abname = fullname.Substring(fullname.IndexOf("Assets") + 7, fullname.LastIndexOf("/") - fullname.IndexOf("Assets") - 7);
        return abname;
    }
}

--若是對您有所幫助,世界便多了一份你我的溫暖
--您的支持將是我的動力,手有餘糧的話,一點點讚賞我將開心不已(一毛錢也是極好的)

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章