Unity3D资源管理——Unity2017 Assetbundle依赖打包
Unity3D资源管理——Unity2017 Assetbundle依赖打包
http://gad.qq.com/article/detail/289272
一、运行环境
1.1编辑器版本
使用Unity2017.3.1f
1.2 dll
无
二、目的
预制体打包时会将一份资源进行多份打包,导致数据冗余,所以需要根据依赖,将被多处引用的资源独立达成一个包,建立依赖关心,优化冗余。
三、流程
1. 遍历所有资源文件,设置其包名为空
2. 遍历需要打包的文件夹下的所有文件,通过Unity资源接口获取所有依赖,统计对应的依赖数
3. 将在需要打包文件夹内的包名设置为文件名,将在需要打包文件夹外的依赖数大于2的文件设置包名为文件名
4. 调用Unity的打包接口,会将该工程下的所有被设置包名的资源进行AB打包。
四、代码实现
核心代码:
public class ABUtils
{
/// <summary>
/// 资源放置的文件夹路径
/// </summary>
private static List<string> resDircectoryPaths = new List<string>(){ "Assets/Resources" };
private static List<string> needDependenyPaths = new List<string>() { "Assets/Resources/Materials" };
/// <summary>
/// 初始化打包环境,将所有的文件的ab属性都置空
/// </summary>
static List<string> InitBuildEnvironment()
{
List<string> paths=new List<string>();
string[] files = AssetDatabase.GetAllAssetPaths();
for (int i = 0; i < files.Length; i++)
{
for (int j = 0; j < resDircectoryPaths.Count; j++)
{
if (files[i].Contains(resDircectoryPaths[j]))
{
AssetImporter importer = AssetImporter.GetAtPath(files[i]);
paths.Add(files[i]);
importer.assetBundleName = String.Empty;
}
}
}
return paths;
}
public static void BuildAllAbAboutDependency(string outPath)
{
ResourceSystem.FileUtils.PrecessDirectoryExist(outPath);
List<string> resPaths=InitBuildEnvironment();
string fileName;
string relationPath;
ResourcesData data;
bool isNeedDependcy;
for (int i = 0; i < resPaths.Count; i++)
{
isNeedDependcy = false;
fileName = PathUtils.GetFileNameWithoutExtension(resPaths[i]);
if (ResourceSystemFacade.Inst.ResDict.ContainsKey(fileName))
{
data = ResourceSystemFacade.Inst.ResDict[fileName];
relationPath = PathUtils.GetRelativePath("Assets", resPaths[i]);
for (int j = 0; j < needDependenyPaths.Count; j++)
{
if (relationPath.Contains(needDependenyPaths[j]))
{
isNeedDependcy = true;
if (data.DependeciedNum > 1)
{
AssetImporter importer = AssetImporter.GetAtPath(relationPath);
importer.assetBundleName = data.Name;
importer.assetBundleVariant = ResourceSystemFacade.FileExtension;
}
}
}
if (!isNeedDependcy)
{
AssetImporter importer = AssetImporter.GetAtPath(relationPath);
importer.assetBundleName = data.Name;
importer.assetBundleVariant = ResourceSystemFacade.FileExtension;
}
}
else
{
DebugUtils.DebugError("未包含文件" + fileName);
}
}
DebugUtils.DebugRedInfo(outPath);
BuildPipeline.BuildAssetBundles(outPath, BuildAssetBundleOptions.UncompressedAssetBundle, BuildTarget.StandaloneWindows64);
}
}<span style="white-space: normal;"> </span>
Unity3D资源管理——Unity2017 Assetbundle依赖打包相关推荐
- Unity AssetBundle 依赖打包以及Manifest文件的使用(六)
下面两个物体对象依赖同一个材质球和贴图,为了减少AssetBundle包的大小我们可以把依赖的资源另外打包成一个共享的包. 依赖的资源AssetBundle包名设置为share 为打包的预制体命名: ...
- Unity资源管理——AssetBundle构建/打包
1.为资源设置 assetBundleName 和 assetBundleVariant. 可以在资源的 Inspector 上手动设置,也可以通过 AssetImporter 进行设置. Asset ...
- Unity—AssetBundle的打包及四种加载资源方式
AssetBundle打包:脚本放在Editor文件夹内 具体代码如下: using UnityEditor; using System.IO;public class CreateAssetBund ...
- combotree 可以异步加载吗_Unity AssetBundle 资源打包,加载,本地缓存方式,安卓,PC本地加载路径问题...
AssetBundle的定义和作用: 1,AssetBundle是一个压缩包包含模型.贴图.预制体.声音.甚至整个场景,可以在游戏运行的时候被加载. 2,AssetBundle自身保存着互相的依赖关系 ...
- unity3d资源管理
游戏中通常有大量资源,如网格.材质.纹理.动画.着色器程序和音乐等,游戏引擎作为做游戏的工具,自然要提供良好的资源管理,让游戏开发者用最简单的方式使用资源.游戏引擎的资源管理包括两大部分:离线资源管理 ...
- docker 不包含依赖 打包_Docker容器技术(概念篇)
微信公众号:Java患者 专注Java领域技术分享 Docker介绍 Docker是基于Go语言实现的开源应用容器引擎,通过对应用组件的封装.分发.部署.运行等生命周期的管理,使的用户的应用及其运行环 ...
- python依赖打包
依赖打包的好处 将代码所有的依赖打包进一个文件,当代码迁移至新的平台时仅需要一条命令便可以下载,方便又快捷, 而不用一个一个的安装依赖. 你可以选择在线打包和下载依赖,也可离线打包加载依赖,具体见下文 ...
- Unity3d AssetBundle依赖关系获取
PS:本文将从"打包之前"和"打包之后"两个方面去说明如何获取依赖关系 获取AB包依赖的作用 众所周知,如果一个AB包(我们称之为C)里面的资源引用到的其他资源 ...
- Unity3D 中材质球(Material)打包成AB(AssetBundle)出现材质丢失问题的解决方案
转自:https://www.cnblogs.com/hacker13a/p/7279730.html 关于Unity3D中打AB(AssetBundle)资源包,默认是不连Shader一同打包进去的 ...
最新文章
- 双核处理(动态规划)
- MacBookPro 关机花屏解决
- Class NPOI
- setjump和longjump
- 洛谷 P4026 [SHOI2008]循环的债务
- Spark精华问答 | Spark和Hadoop的架构区别解读
- 解决 wildfly(jboss) 启动报错:'findstr' 不是内部或外部命令
- Java基础学习总结(77)——Java枚举再总结
- python每行输出8个式子_多图+代码 | 详解Python操作Excel神器openpyxl的各种操作!
- numpy - np.reshape:将二维数组转变三维数组
- Flutter高级第2篇:JSON的序列化和反序列化、创建模型类转换Json数据
- oracle数据库建语句吗,Oracle建表语句是什么_数据库
- java方面的文献综述怎么写_java论文参考文献
- python 写入文件 wb_python读写文件
- android eclipse ddms 查看线程,android ddms中查看线程释疑
- CVPR 2021 论文和开源项目合集
- 路由器、DDNS、花生壳
- Linux学习之Kali制作简单的Windows的木马,创建后门
- 经典案例--JS购物车
- 枸杞的功效与食用方法