Unity资源管理--AssetBundle学习

Unity资源目录

当用Unity创建一个工程的时候,目录如下:
在这里插入图片描述
Assets:存放Unity工程实际的资源目录。
Library:存放Unity处理完毕的资源,由unity自动转化生成。
Log:存放日志文件。
Packages:统一管理各种packages组件,使用PackageManager进行管理。
ProjectSettings:存放Unity的各种项目设定。

当进行项目迁移时,只需要将Assets、Packages以及ProjectSettings三个目录拷贝即可。

Unity提供了Resource加载和AssetBundle加载两种方式

引用这篇文章的内容 Unity资源管理(二)-Resources文件夹

强烈不建议使用Resources系统,原因如下:
使用Resources文件夹将会使细粒度的内存管理变得更难
对Resources文件夹的不恰当使用会导致应用程序构架和启动时间变长
随着Resources文件夹数量的增加,在这些文件夹中管理Asset将会变得越来越难
使用Resources系统会降低项目向不同平台提供定制内容的能立,并且导致项目无法进行增量内容更新

AssetBundle学习

AssetBundle 官方API文档

AssetBundles的压缩方式:LZMA、LZ4、不压缩

1. 加载AssetBundles

AssetBundle.LoadFromMemory(Async optional) // 不推荐,此API会消耗两倍于AB大小的内存
AssetBundle.LoadFromFile(Async optional) // 推荐使用
UnityWebRequest.GetAssetBundle // 在Unity 5.2及更早版本中使用 WWW.LoadFromCacheOrDownload

2. 从AssetBundles中加载Assets

LoadAsset(LoadAssetAsync) // 加载单个或者少量时使用
LoadAllAssets(LoadAllAssetsAsync) // 加载多数或者所有Assets时使用
LoadAssetWithSubAssets(LoadAssetWithSubAssetsAsync)

3. 构建AssetBundls管线

BuildPipeline.BuildAssetBundles

4. 卸载不使用的AssetBundls

AssetBundle.unload(true) // false会有引用丢失的风险

tips:开发一个良好的分离下载系统是至关重要的


自动打包至指定文件夹

  • 自动添加label
using UnityEngine;
using UnityEditor;
using System.IO;

namespace ABFW
{
   
   
    public class AutoSetLabels
    {
   
   
        [MenuItem("AssetBundleTools/Set AB Label")]
        public static void SetABLable()
        {
   
   
            // 清空标记
            AssetDatabase.RemoveUnusedAssetBundleNames();

            // AB根目录 调用文件ABPath.cs统一获取路径
            string strNeedSetlabelRoot = ABPath.GetABResourcesPath();
            // 通过根路径获取目录
            DirectoryInfo dirTempInfo = new DirectoryInfo(strNeedSetlabelRoot);
            DirectoryInfo[] dirSceneDirArray = dirTempInfo.GetDirectories();

            // 遍历所有路径
            foreach (DirectoryInfo currentDIR in dirSceneDirArray)
            {
   
   
                Debug.Log("输出目录所有" + currentDIR);
                string tmpScenesDIR = strNeedSetlabelRoot + "/" + currentDIR.Name;
                int tmpIndex = tmpScenesDIR.LastIndexOf("/");
                string tmpScenesName = tmpScenesDIR.Substring(tmpIndex + 1);

                JudgeDIRorFileByRecursive(currentDIR, tmpScenesName);

            }
            // 刷新列表
            AssetDatabase.Refresh();
            Debug.Log("-----------------AB初始化完成--------------------");
        }
        /// <summary>
        /// 递归判断是否为目录/文件,修改AssetBundle
        /// </summary>
        /// <param name="fileSysInfo">目录信息</param>
        /// <param name="scenesName">场景名称</param>
        private static void JudgeDIRorFileByRecursive(FileSystemInfo fileSysInfo, string
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值