unity实现按文件夹自动打包assetbundle

直接上源码,功能:选中文件下所有带_ab的文件夹分为一个ab包,自动命名打包

public class EDxAssetBundle : MonoBehaviour
{
    //[MenuItem("Tool/Create AssetBundle All")]
    //private static void CreateAssetBundle()
    //{
    //    Debug.Log("Create AssetBundle...");
    //    BuildPipeline.BuildAssetBundles(Application.streamingAssetsPath + "/assetbundle", BuildAssetBundleOptions.None, BuildTarget.StandaloneWindows64);
    //    AssetDatabase.Refresh();
    //}

    [MenuItem("Tool/Create AssetBunldes")]
    [System.Obsolete]
    private static void CreateAssetBunldesMain()
    {
        //获取在Project视图中选择的所有游戏对象  
        Object[] SelectedAsset = Selection.GetFiltered(typeof(Object), SelectionMode.DeepAssets);

        //遍历所有的游戏对象  
        foreach (Object obj in SelectedAsset)
        {

            string sourcePath = AssetDatabase.GetAssetPath(obj);
            string filename = GetFileName(sourcePath);
            string parentname = GetParentName(sourcePath);

            //Debug.Log(obj.name + " : " + sourcePath);

            if (!string.IsNullOrEmpty(filename))
            {
                Debug.Log("打包 " + obj.name + " : " + sourcePath);

                AssetImporter ai = AssetImporter.GetAtPath(sourcePath);
                if (ai.assetBundleName != parentname + ".assetbundle")
                {
                    ai.assetBundleName = parentname + ".assetbundle";
                }
            }
        }

        string path = Application.streamingAssetsPath + "/assetbundle";
        if (!Directory.Exists(path)) Directory.CreateDirectory(path);
        BuildPipeline.BuildAssetBundles(Application.streamingAssetsPath + "/assetbundle", BuildAssetBundleOptions.None, BuildTarget.StandaloneWindows64);
        
        //刷新编辑器  
        AssetDatabase.Refresh();
    }
    private static string GetParentName(string path)
    {
        string[] strs = path.Split('/');
        //string parent = strs[strs.Length - 2];
        for (int i = 0; i < strs.Length; i++)
        {
            if (strs[i].Contains("_ab")) return strs[i];
        }
        return "";
    }

    private static string GetFileName(string path)
    {
        string[] strs = path.Split('/');
        string filename = strs[strs.Length - 1];

        if (filename.Contains("."))
        {
            return filename;
        }
        else
        {
            return "";

        }
    }
}

工程地址:https://download.csdn.net/download/u014261855/13099912

  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
Unity是一款多平台游戏开发引擎,可通过其强大的AssetBundle功能根据文件夹自动生成AssetBundle资源。 AssetBundleUnity中用于打包和加载资源的一种形式,可以将游戏中的资源(括模型、贴图、声音等)打包成独立的文件,方便在游戏运行时动态加载和卸载,实现资源的灵活管理和优化。 Unity提供了一个叫做AssetBundleBuild的类,可以用来定义AssetBundle的构建规则。在使用AssetBundleBuild时,可以指定一个文件夹,通过递归遍历该文件夹下的所有资源文件,自动将其打包生成AssetBundle。这样,在项目构建或发布时,不需要手动一个一个选择文件,只需指定文件夹路径,Unity自动构建并生成对应的AssetBundle。 通过这种方式,开发者可以按照逻辑或者功能将资源文件放置在不同的文件夹中,比如将“模型”资源放在"Models"文件夹下,将“贴图”资源放在"Textures"文件夹下。然后通过AssetBundleBuild定义规则,指定这两个文件夹路径,Unity会根据规则自动生成含模型和贴图资源的AssetBundle。 通过自动生成AssetBundle,可以提高开发效率和资源管理的灵活性。开发者只需关注资源放置的文件夹和对应的规则,而无需手动一个一个处理资源文件。同时,由于AssetBundle的独立性,可以根据游戏中的不同场景或需求,灵活地加载和卸载对应的AssetBundle资源,使游戏加载速度更快、内存占用更低。 总之,Unity可以根据文件夹自动生成AssetBundle,通过AssetBundleBuild中定义的规则,自动打包和生成资源,提高开发效率和资源管理的灵活性。这为游戏开发带来了很多便利和优化的可能性。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

左右...

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值