Unity 5.X扩展编辑器之打包assetbundle
5.x的assetbundle与4.x以及之前的版本有些不同,不过本质是一样的,只不过5.x打包assetbundle更为简单和人性化了,总体来说只需要三个步骤:
第一步:创建打包资源
- //这里是一个资源包数组,其中每一个资源包又可以包含多个小资源,所以一般情况下一个资源包就足够了
- AssetBundleBuild[] _ABbuild = new AssetBundleBuild[1];
第二步:给资源命名以及指定需要打包的资源
- //资源包的名称
- _ABbuild[0].assetBundleName = "打包assetbundle出来之后的文件名";
- //资源包下的资源名称,一个资源包可以包含多个资源,资源由从Assets开始的路径组成且包含自身后缀名
- string[] _allassetname = new string[3];
- _allassetname[0] = "Assets/1.png";
- _allassetname[1] = "Assets/2.prefab";
- _allassetname[2] = "Assets/3.FBX";
- _ABbuild[0].assetNames = _allassetname;
第三步:开始打包
- //打包到路径E:/test/mytest
- BuildPipeline.BuildAssetBundles("E:/test/mytest", _ABbuild);
将之封装成扩展编辑器之后,把如下脚本放在Editor文件夹内:
- using UnityEngine;
- using UnityEditor;
- using System.Diagnostics;
- using System.IO;
- public class ExportAssetBundles : EditorWindow
- {
- [@MenuItem("AssetBundles/Build AssetBundles")]
- static void main()
- {
- EditorWindow.GetWindow<ExportAssetBundles>(false,"AssetBundles");
- }
- private Vector2 scrollVec2;
- private string rootPath = "Assets";
- private string _assetBundleName = "";
- private string _assetBundlePath = "Assets/StreamingAssets";
- private int _assetBundleElementNum = 4;
- private string[] _assetBundleElement = new string[4];
- void OnGUI()
- {
- scrollVec2 = EditorGUILayout.BeginScrollView(scrollVec2, GUILayout.Width(position.width), GUILayout.Height(position.height));
- EditorGUILayout.BeginHorizontal();
- GUILayout.Label("资源包名称:");
- _assetBundleName = EditorGUILayout.TextField(_assetBundleName);
- if (GUILayout.Button("清空"))
- EditorApplication.delayCall += Delete;
- EditorGUILayout.EndHorizontal();
- EditorGUILayout.BeginHorizontal();
- GUILayout.Label("资源包路径:");
- _assetBundlePath = EditorGUILayout.TextField(_assetBundlePath);
- if (GUILayout.Button("浏览"))
- EditorApplication.delayCall += Save;
- EditorGUILayout.EndHorizontal();
- EditorGUILayout.BeginHorizontal();
- GUILayout.Label("资源包容量:");
- _assetBundleElementNum = EditorGUILayout.IntField(_assetBundleElementNum);
- if (GUILayout.Button("增加"))
- EditorApplication.delayCall += Add;
- EditorGUILayout.EndHorizontal();
- if (_assetBundleElementNum > 0)
- {
- if (_assetBundleElement.Length != _assetBundleElementNum)
- {
- string[] temp = _assetBundleElement;
- _assetBundleElement = new string[_assetBundleElementNum];
- for (int i = 0; i < temp.Length; i++)
- {
- if (i < _assetBundleElement.Length)
- _assetBundleElement[i] = temp[i];
- }
- }
- for (int i = 0; i < _assetBundleElementNum; i++)
- {
- EditorGUILayout.BeginHorizontal();
- GUILayout.Label("资源" + (i + 1) + ":");
- _assetBundleElement[i] = EditorGUILayout.TextField(_assetBundleElement[i]);
- if (GUILayout.Button("浏览"))
- Browse(i);
- EditorGUILayout.EndHorizontal();
- }
- }
- if (GUILayout.Button("打包"))
- {
- if (_assetBundleName == "")
- {
- //打开一个通知栏
- this.ShowNotification(new GUIContent("资源包名称不可为空"));
- return;
- }
- if (_assetBundlePath == "C:/" || _assetBundlePath == "D:/" || _assetBundlePath == "E:/" || _assetBundlePath == "F:/")
- {
- //打开一个通知栏
- this.ShowNotification(new GUIContent("资源包路径不可为根目录"));
- return;
- }
- if (_assetBundleElementNum <= 0)
- {
- //打开一个通知栏
- this.ShowNotification(new GUIContent("资源包容量必须大于0"));
- return;
- }
- for (int i = 0; i < _assetBundleElement.Length; i++)
- {
- if (_assetBundleElement[i] == null || _assetBundleElement[i] == "")
- {
- //打开一个通知栏
- this.ShowNotification(new GUIContent("资源"+(i+1)+"路径为空"));
- return;
- }
- }
- EditorApplication.delayCall += Build;
- }
- EditorGUILayout.EndScrollView();
- }
- /// <summary>
- /// 清空资源包名称
- /// </summary>
- void Delete()
- {
- _assetBundleName = "";
- //转移焦点至主窗口
- EditorUtility.FocusProjectWindow();
- }
- /// <summary>
- /// 选择资源存储路径
- /// </summary>
- void Save()
- {
- string path = EditorUtility.OpenFolderPanel("选择要存储的路径", "", "");
- if (path.Length != 0)
- {
- _assetBundlePath = path;
- EditorUtility.FocusProjectWindow();
- }
- }
- /// <summary>
- /// 资源包容量增加
- /// </summary>
- void Add()
- {
- _assetBundleElementNum += 1;
- EditorUtility.FocusProjectWindow();
- }
- /// <summary>
- /// 选择单个打包资源
- /// </summary>
- /// <param name="i">资源序号</param>
- void Browse(int i)
- {
- string path = EditorUtility.OpenFilePanel("选择要打包的资源", @"E:\hutao\Unity Project5.2\Course Cloud Platform\Assets", "*");
- if (path.Length != 0)
- {
- if (path.IndexOf(rootPath) >= 0)
- {
- //如果选中的资源是dll文件,则自动改后缀名为.bytes
- if (path.EndsWith(".dll"))
- {
- string newpath = path.Substring(0, path.LastIndexOf('.')) + ".bytes";
- File.Move(path, newpath);
- _assetBundleElement[i] = newpath.Substring(newpath.IndexOf(rootPath));
- AssetDatabase.Refresh();
- }
- else
- {
- _assetBundleElement[i] = path.Substring(path.IndexOf(rootPath));
- }
- }
- }
- }
- /// <summary>
- /// 打包资源
- /// </summary>
- void Build()
- {
- //需要打包的资源(可打包成多个)
- AssetBundleBuild[] buildMap = new AssetBundleBuild[1];
- //资源包的名称
- buildMap[0].assetBundleName = _assetBundleName;
- //资源包下的资源名称,一个资源包可以包含多个资源,资源由从Assets开始的路径组成且包含自身后缀名
- buildMap[0].assetNames = _assetBundleElement;
- BuildPipeline.BuildAssetBundles(_assetBundlePath, buildMap);
- }
- }
在编辑器中效果图如下:(其中每个资源小项可以是工程中的文件夹,如果是文件夹的话那么该文件夹内所有资源都会打包进去)
Unity 5.X扩展编辑器之打包assetbundle的更多相关文章
- 实力封装:Unity打包AssetBundle(一)
说明:这是一系列循序渐进的教程,今天先介绍最简单的AssetBundle打包方式. 这是一个由在Unity中需要加载模型而引发出来的一系列坑,为了填坑花了不少时间,如果有需要在Unity中自定义菜单, ...
- 实力封装:Unity打包AssetBundle(大结局)
→→前情提要:让用户选择要打包的文件←← 大结局:更多选择 Unity打包AssetBundle从入门到放弃系列终于要迎来大结局了[小哥哥表示实在写不动了o(╥﹏╥)o]... 经过上一次的教程,其实 ...
- lua------------------Unity3D研究院编辑器之打开unity不可识别的文件(十三)
Unity3D研究院编辑器之打开unity不可识别的文件(十三) 雨松MOMO [Unity3D拓展编辑器] 围观8597次 9 条评论 编辑日期:2017-03-02 字体:大 中 小 有些特殊 ...
- Unity学习(六)5.x依赖打包
http://blog.sina.com.cn/s/blog_89d90b7c0102w2ox.html unity5已经封装好了接口,所以依赖打包并没有那么神秘和复杂了. 打包: 1.定义好资源的a ...
- Emacs和Vim:神的编辑器和编辑器之神, 到底哪个更好?
Emacs和Vim:神的编辑器和编辑器之神, 到底哪个更好? 在这个蔚蓝色的星球上,流传着两大神器的传说:据说Emacs是神的编辑器,而Vim是编辑器之神. 一些人勇敢地拾起了Vim或Emacs,却发 ...
- Win10系统下安装编辑器之神(The God of Editor)Vim并且构建Python生态开发环境(2020年最新攻略)
原文转载自「刘悦的技术博客」https://v3u.cn/a_id_160 众神殿内,依次坐着Editplus.Atom.Sublime.Vscode.JetBrains家族.Comodo等等一众编辑 ...
- 编辑器之神VIM 总结(一) 基础部分
版本号 说明 作者 日期 1.0 vim基础知识 Sky Wang 2013/06/19 概要 vim和emacs,一个是编辑器之神,一个是神一样的编辑器.他们被称是UNIX系统下的 ...
- 优测优社区干货精选|老司机乱谈编辑器之神——vim
文 / 腾讯 吴双 前言 优测小优 有话说: 腾讯优测只有应用测试大神?不不不,我们还有各种研发大牛! *** vim 是一种信仰,我自从2004年有了这个信仰,已经12个年头了.本文介绍了学习vim ...
- 自由软件之父、Google+设计者、Java之父、Linux之父、万维网之父、Vi编辑器之父、苹果Lisa电脑界面设计、微软首席软件架构师
自由软件之父.Google+设计者.Java之父.Linux之父.万维网之父.Vi编辑器之父.苹果Lisa电脑界面设计.微软首席软件架构师 理查德·斯托曼(Richard Stallman) 理查德· ...
随机推荐
- CentOS环境下使用GIT基于Nginx的私服搭建全过程
阅读本文前你必须预先装好CentOS并且已经安装和配置好Nginx了. 安装GIT私服套件 安装centos6.5-centos7.0 安装nginx yum install -y?git gitwe ...
- J2EE中MVC的各层的设计原则及其编写注意事项
总结了下J2EE的MVC模式开发原则,很多细节处理好了是很有利于开发与维护的. 下面就从各层说起. 视图层 主要是客户端的显示,主要是JSP和HTML,随着Web的不断发展,许多基于Javascrip ...
- springMVC源码分析--AbstractHandlerMapping(二)
上一篇博客springMVC源码分析--HandlerMapping(一)中我们简单的介绍了HandlerMapping,接下来我们介绍一下它的抽象实现类AbstractHandlerMapping
- ROS机器人程序设计(原书第2版)补充资料 (柒) 第七章 3D建模与仿真 urdf Gazebo V-Rep Webots Morse
ROS机器人程序设计(原书第2版)补充资料 (柒) 第七章 3D建模与仿真 urdf Gazebo V-Rep Webots Morse 书中,大部分出现hydro的地方,直接替换为indigo或ja ...
- Java中synchronized的使用实例
一.使用场景 在负责后台开发的时候,很多时候都是提供接口给前端开发人员去调用,会遇到这样的场景: 需要提供一个领奖接口,每个用户名只能领取一次,我们可以将成功领取的用户在数据库用个标记保存起来.如果这 ...
- 深入浅出如何解析xml文件---下篇
在上篇博文中,小编主要介绍xml的两种解析方式,分别是dom4j和dom,今天这篇博文,小编主要来简单介绍一下xml的其她两种解析方式sax和jdom. sax解析xml文件 sax,全称是Simp ...
- LMAX高并发系统架构
很早就看到过MF的这篇The LMAX Architecture,可是之前一来英文水平不够,二来确实看不懂- 今天有幸再次看到,一口气读完终于有所领悟. 1 Overall Architecture ...
- 验证码程序Demo
小伙伴都有这样的经历,册各种网站,总是输不对验证码,双十一那天狂买的小伙伴是不是对输入验证码有着不一样的感触呢,以前觉得验证码真是个麻烦鬼,一个不小心,一个眼拙,哎呦,没有输入正确,又是一阵子大眼瞪小 ...
- Zookeeper总概
zookeeper是一个开源的分布式协调服务.是典型的分布式数据一致性的解决方案. zookeeper可以保证以下分布式一致性的特性 1. 顺序性:同一客户端发起的事务请求,最终会严格的按照发出顺序应 ...
- Android开发学习之路--React-Native之初体验
近段时间业余在学node.js,租了个阿里云准备搭建后端,想用node.js,偶尔得知react-native可以在不同平台跑,js在iOS和android上都可以运行ok,今天就简单学习下rea ...