实力封装:Unity打包AssetBundle(大结局)
→→前情提要:让用户选择要打包的文件←←
大结局:更多选择
Unity打包AssetBundle从入门到放弃系列终于要迎来大结局了【小哥哥表示实在写不动了o(╥﹏╥)o】...
经过上一次的教程,其实整个打包的功能也就差不多完成了,只是我们还没加上打包的按钮。这几次我们会加上打包和取消的按钮,并且开放更多的选项。
开始之前我们再来看看BuildAssetBundles函数的定义↓↓
public static AssetBundleManifest BuildAssetBundles(string outputPath, BuildAssetBundleOptions assetBundleOptions, BuildTarget targetPlatform); Parameters
在这个函数中,最后两个参数规定了打包时采用的压缩方式以及目标平台,我们可以将这两个选项公开出来,供用户选择。
BuildAssetBundleOptions和BuildTarget都是枚举类型的变量,我们可以提供一个下拉按钮,让用户自由选择。EditorGUILayout.EnumPopup方法恰好可以实现这一功能,它需要一个枚举类型的参数,并且自动将该枚举类型的所有选项变成下拉按钮,所以首先我们需要定义两个枚举类型的字段↓↓
private BuildAssetBundleOptions buildOption = BuildAssetBundleOptions.None; private BuildTarget targetPlatform = BuildTarget.StandaloneWindows64;
然后在OnGUI函数中添加如下代码↓↓
buildOption = (BuildAssetBundleOptions)EditorGUILayout.EnumPopup ("Build Option:", buildOption); targetPlatform = (BuildTarget)EditorGUILayout.EnumPopup ("Build Platform:", targetPlatform);
注意,函数返回值要进行类型转换,第一个参数表示下拉框前面的文字提示。
在第二篇教程:第二种打包方式中,我们写了两个打包函数,表示两种不同的打包方式。一是将选中的文件分开打包,二是将选中文件打进一个包,我们也可以自定义一个枚举类型来表示这两种不同的打包方式,已提供更灵活的选择。
首先定义枚举类型和枚举变量↓↓
enum PackageStyle { BUILD_ALL_IN_ONE_FOLDER, //分开打包 BUILD_ALL_IN_AN_ASSETBUNDLE,//打进一个包 }; private PackageStyle style = PackageStyle.BUILD_ALL_IN_EACH_FOLDER; private string packageName;
然后往OnGUI函数中添加如下代码↓↓
GUILayout.Space (10);GUILayout.BeginVertical (GUILayout.Height(50)); style = (PackageStyle)EditorGUILayout.EnumPopup ("Package Style:", style); if (style == PackageStyle.BUILD_ALL_IN_AN_ASSETBUNDLE) { packageName = EditorGUILayout.TextField ("Package Name:", packageName); } GUILayout.EndVertical ();
这里我们还判断了一下打包方式,如果是所有文件打进一个包的话,提供一个文本框让用户输入包的名字,因为我们也不知道把哪一个文件的名字作为包的名字合适。
现在只剩最后一步打包了,我们提供两个按钮,一个叫打包,一个叫取消。如果取消被点击,就直接关闭窗口;如果打包被点击,就根据用户选择的打包方式,调用对应的函数进行打包,完成以后关闭窗口。我们继续在OnGUI函数中添加代码↓↓
GUILayout.BeginHorizontal ();if (GUILayout.Button ("取消", GUILayout.Width(80))) { this.Close (); } if (GUILayout.Button ("打包", GUILayout.Width(80))) { bool canPackage = true; if (packagePath == null || packagePath.Length <= 0 || !Directory.Exists (packagePath)) { canPackage = false; EditorApplication.Beep (); } List<string> selectedAssets = new List<string> (); int count = 0; foreach (var go in assetsPath) { if (flags [count]) selectedAssets.Add (go); ++count; } if (selectedAssets == null || selectedAssets.Count <= 0) { canPackage = false; EditorApplication.Beep (); } if (canPackage) { switch (style) { case PackageStyle.BUILD_ALL_IN_ONE_FOLDER: { BuildAssetsInOneFolder (packagePath, selectedAssets.ToArray ()); break; } case PackageStyle.BUILD_ALL_IN_AN_ASSETBUNDLE: { BuildAssetsInOneBundle (packagePath, selectedAssets.ToArray ()); break; } default: { break; } } this.Close (); } } GUILayout.EndHorizontal ();
点击打包按钮的时候复杂一点,我们一一来说明↓↓
首先有一个bool标志,表示是否可以打包。有两种情况下是不能进行打包的:
用户给出的打包路径为空或不存在;
用户未选择任何资源文件
针对以上两种情况,我们将标志位设为false,这样就不会运行打包的函数了。EditorApplication.Beep ()可以让系统发出“叮”的一声,提示用户出错了。
另外,我们还需要将用户选择的文件都给摘出来。也就是需要遍历AssetsPath链表,将flags数组中值为true的下标对应的文件路径添加到一个新的链表中。如果这个链表为空,则表示用户未选择任何文件。
如果标志位(canPackage)为true,则表示可以进行打包。首先需要判断一下用户选择的打包方式,然后分别调用不同的打包函数。最后打包结束后,调用Close()方法关闭窗口。
需要注意的是这里用到的打包函数和第二篇教程里的那两个打包函数有点不一样了,为了适应新的参数,我们做了一点小小的改动,核心的部分没有任何变化,只是参数传入的方式变了,相信这是难不倒你的!
那儿到这里整个打包封装的过程就结束了,一些细枝末节和UI布局上的事大家根据自己的喜好做就好了,感谢大家的支持!
完结撒花✿✿ヽ(°▽°)ノ✿
转载于:https://www.cnblogs.com/huwenya/p/9246242.html
实力封装:Unity打包AssetBundle(大结局)相关推荐
- unity 打包AssetBundle
unity提供了assetbunlde机制,下面介绍一种方法将指定目录下的所有文件打包成AssetBundle 先说明步骤,再上代码. 步骤一.选择要打包成assetbundle的目录,本案例使用as ...
- Unity打包AssetBundle自动分析资源依赖关系(包括UGUI图集打包)
https://blog.csdn.net/u012740992/article/details/79371986 怎么分析资源的依赖关系呢,并设置AssetBundleName呢? 我们检测资源之间 ...
- 使用Unity打包Assetbundle填坑记录(随时更新)
Unity版本=2017.4.13f1 问题1: Cannot mark assets and scenes in one AssetBundle 出现原因:使用Unity 打包场景文件为AssetB ...
- 实力封装:Unity打包AssetBundle(二)
→前情提要:Unity最基本的AssetBundle打包方式. 第二种打包方式 Unity提供的BuildAssetBundles API还有一个重载形式,看下面↓↓ public static As ...
- Unity5.x 依赖关系打包 AssetBundle 研究
Unity5.x新依赖打包及加载 https://blog.csdn.net/strugglebydreamlin/article/details/78031086 demo:https://pan. ...
- Unity 打包安卓APK到上架各大应用商店(超详细)
一.Unity下载 1.Unity官网下载Hub,中国官网,国际版官网 2.下载Hub,安装---安装 (建议安装LTS版本) 3.添加Android 打包环境,现在新版本直接下载这个就可以直接打包了 ...
- [FairyGUI][Unity]FGUI资源打包AssetBundle
参考资料3 将发布后的文件打包为两个AssetBundle,即定义文件和资源各打包为一个bundle(desc_bundle+res_bundle).这样做的好处是一般UI的更新都是修改元件位置什么的 ...
- Unity资源管理——AssetBundle构建/打包
1.为资源设置 assetBundleName 和 assetBundleVariant. 可以在资源的 Inspector 上手动设置,也可以通过 AssetImporter 进行设置. Asset ...
- 【小松教你手游开发】【unity系统模块开发】Unity5.5.2UI打包AssetBundle
之前已经有几篇文章写打包AssetBundle,但毕竟没有实际在项目中写过都写的比较浅. 刚好最近项目更新Unity5.5.2就顺便由我来更新ui打包流程 这里就把这次的经验写一下 这里还是稍微解释一 ...
最新文章
- linux防火墙添加端口并开闭防火墙
- 20175208 《Java程序设计》第九周学习总结
- Spring入门图解(体系结构-IOC-DI-AOP)
- 屈原坐上神十带来了iOS 7
- 工欲善其事必先利其器系列之:在VS里面折叠js代码
- .describe() python_python的apply应用:一般性的“拆分-应用-合并”,附加详细讲解
- 云计算介绍-1.1,IaaS\PaaS\SaaS辨析
- java生成缩略图,接收图片,按指定宽高或按比例生成缩略图
- 致敬ATSS | Dynamic ATSS再造ATSS辉煌!!!
- 【项目实践】充电台灯电路拆解
- JDK1.6官方下载_JDK6官方下载
- 【项目经理产品经理简历套话】工作经历和项目经历的套话
- 用一根网线连接两台计算机,并传输数据
- 12w字超全C语言数据结构考研笔记基础知识大总结!基于王道、严蔚敏相关丛书及网络相关资料、包含案例分析
- 安徽农业大学计算机考研分数线,安徽农业大学考研录取分数线
- 【成神之路】Redis相关面试题
- 《俗人笔记》之《Java基础语法下》
- 百度AI开放平台 UNIT平台开发在线客服 借助百度的人工智能如何开发一个在线客服系统...
- 单词数 HDU - 2072 纯字典树个人理解
- linux ps输出项的含义,【整理】ps命令输出字段的含义
热门文章
- MVC 中的Model对象
- 42、使用存放在存assets文件夹下的SQLite数据库
- spark 读取mongodb失败,报executor time out 和GC overhead limit exceeded 异常
- (DOM艺术) 实用的动画
- 《Maven官方指南》指南第三方部署到远程仓库
- 全国各省市直辖市软考机构联系方式(办公电话、网址、联系邮箱)
- 2016-2017-1 《信息安全系统设计基础》 学生博客及Git@OSC 链接
- PHP将excel文件中的数据批量导入到数据库中
- SQL索引学习-聚集索引
- java 和 mysql 获取周 星期 的第一天 最后一天 或者 月的 日期(字符串转日期,日期转字符串,日期加减)...