AssetBundle坑来坑去(二)

20 篇文章 0 订阅

※.关于AssetBundle打包问题

在unity工程目录Assets 下新建一个Folder 命名为(Editor),然后将脚本放在该目录下

1) [MenuItem("lzk/自动打包单个文件")]

如其名,可以遍历指定目录下所有子目录下的文件并对其assetbundleName进行命名、打包

2)[MenuItem("lzk/自动打包图集资源")]

将指定目录下的一层子目录做为Package Tag 对该子目录下所有文件进行打包图集以及将该目录名作为assetbundleName并完成assetbundle打包

3)[MenuItem("lzk/取消所有Asset命名")]

将会取消Assets下所有文件的assetbundleName

4)[MenuItem("lzk/纯属测试")]

作为测试来用的微笑

using UnityEngine;
using System.Collections;
using UnityEditor;
using System.IO;
using System.Collections.Generic;

public class TestPath {


    [MenuItem("lzk/自动打包单个文件")]
    static void TestPathFun()
    {
        dirPath.Clear();
        string targetPath = Application.dataPath + "/StreamingAssets/A";
        string imagePath = Application.dataPath + "/StreamingAssets";
        string TestPath = Application.dataPath + "/Test/";
        if (!Directory.Exists(targetPath))
        {
            Directory.CreateDirectory(targetPath);
        }
        DirectoryInfo dirInfo = new DirectoryInfo(TestPath);
        FindAllDirs(dirInfo);
        dirPath.Add(dirInfo);
        //遍历每个文件夹路径
        foreach (var item in dirPath)
        {
            FindAllFiles(item);
        }
        BuildPipeline.BuildAssetBundles(targetPath, BuildAssetBundleOptions.None, BuildTarget.Android);
    }
    //存放所有文件夹路径
    public static List<DirectoryInfo> dirPath = new List<DirectoryInfo>();
    //递归找到所有文件夹
    static void FindAllDirs(DirectoryInfo info)
    {
        foreach (var item in info.GetDirectories())
        {
            if (!dirPath.Contains(item))
            {
                dirPath.Add(item);
            }
            FindAllDirs(item);
        }
    }
    //找到所有文件夹下的所有文件
    static void FindAllFiles(DirectoryInfo info)
    {
        foreach (var item in info.GetFiles())
        {
            if (!item.Name.EndsWith(".meta"))
            {
                ChangeFileAssetBundleName(item.Name,item.FullName);
            }
        }
    }
    //修改找到的所有文件的assetbundleName
    static void ChangeFileAssetBundleName(string name, string namePath)
    {
        name = name.Substring(0, name.IndexOf("."));
        namePath = namePath.Substring(namePath.IndexOf("Assets"));
        Debug.Log(namePath);
        var importer = AssetImporter.GetAtPath(namePath);
        Debug.Log(importer.assetBundleName);
        if (importer && importer.assetBundleName != name)
        {
            importer.assetBundleName = name;
        }
    }

    [MenuItem("lzk/自动打包图集资源")]
    static void BuildAllImage()
    {
        allDirList.Clear();
        //指定目录
        string path = Application.dataPath + "/Test/";
        //打包到的目标目录
        string targetPath = Application.streamingAssetsPath + "/AB_Image/";
        if (!Directory.Exists(targetPath))
        {
            Directory.CreateDirectory(targetPath);
        }
        DirectoryInfo dirInfo = new DirectoryInfo(path);
        foreach (var item in dirInfo.GetDirectories())
        {
            FindSubFiles(item);
            foreach (var dirPath in allDirList)
            {
                FindFilesForPackage(dirPath,item.Name);
            }
            allDirList.Clear();
        }
        BuildPipeline.BuildAssetBundles(targetPath, BuildAssetBundleOptions.None, BuildTarget.Android);
    }
    //存放所有文件目录路径
    public static List<DirectoryInfo> allDirList = new List<DirectoryInfo>();
    //找到指定路径下的文件
    static void FindSubFiles(DirectoryInfo info)
    {
        allDirList.Add(info);
        foreach (var item in info.GetDirectories())
        {
            if (!allDirList.Contains(item))
            {
                allDirList.Add(item);
            }
            FindSubFiles(item);
        }
    }
    //找到指定文件夹下的所有文件
    static void FindFilesForPackage(DirectoryInfo info,string packageAndassetName)
    {
        foreach (var item in info.GetFiles())
        {
            if (item.Name.EndsWith(".png"))
            {
                Debug.Log(item.FullName.Substring(item.FullName.IndexOf("Assets")));
                string centerPath = item.FullName.Substring(item.FullName.IndexOf("Assets"));
                TextureImporter imporSettingPackage = TextureImporter.GetAtPath(centerPath) as TextureImporter;
                imporSettingPackage.spritePackingTag = packageAndassetName;
                AssetImporter importSettingAssetBundle = AssetImporter.GetAtPath(centerPath) as AssetImporter;
                importSettingAssetBundle.assetBundleName = "ui_" + packageAndassetName;
            }
        }
    }

    [MenuItem("lzk/取消所有Asset命名")]
    static void CancleAssetBundleName()
    {
        cancleNameList.Clear();
        string path = Application.dataPath + "/";
        DirectoryInfo dirInfo = new DirectoryInfo(path);
        CanleDirPath(dirInfo);
        foreach (var item in cancleNameList)
        {
            CancleFileName(item);
        }
    }
    //存放所有目录路径
    public static List<DirectoryInfo> cancleNameList = new List<DirectoryInfo>();
    //获得所有目录路径
    static void CanleDirPath(DirectoryInfo info)
    {
        foreach (var item in info.GetDirectories())
        {
            if (!cancleNameList.Contains(item))
            {
                cancleNameList.Add(item);
            }
            CanleDirPath(item);
        }
    }
    //设置所有文件
    static void CancleFileName(DirectoryInfo info)
    {
        foreach (var item in info.GetFiles())
        {
            if (item.Name.EndsWith(".cs"))
                return;
            string centerPath = item.FullName.Substring(item.FullName.IndexOf("Assets"));
            var importSetting = AssetImporter.GetAtPath(centerPath);
            if (importSetting && importSetting.assetBundleName != null)
            {
                importSetting.assetBundleName = null;
            }
        }
    }


    [MenuItem("lzk/纯属测试")]
    static void TestPathFun02()
    {
        string versionDir = "Image";
        var fullPath = Application.dataPath + "/" + versionDir + "/";
        var relativeLen = versionDir.Length + 8; // Assets 长度
        if (Directory.Exists(fullPath))
        {
            var dir = new DirectoryInfo(fullPath);
            var files = dir.GetFiles("*", SearchOption.AllDirectories);
            for (var i = 0; i < files.Length; ++i)
            {
                var fileInfo = files[i];
                if (!fileInfo.Name.EndsWith(".meta"))
                {
                    string center = fileInfo.Name.Substring(0, fileInfo.Name.IndexOf("."));
                    var basePath = fileInfo.FullName.Substring(fullPath.Length - relativeLen).Replace('\\', '/');
                    Debug.Log(basePath);
                    var importer = AssetImporter.GetAtPath(basePath);
                    Debug.Log(importer.assetBundleName);
                    if (importer && importer.assetBundleName != center)
                    {
                        importer.assetBundleName = center;
                    }
                }
            }
        }
    }
}


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值