Unity3D中实现按资源名称自动化命名打包AssetBundle
- 首先把模型变成预制体
- 一般当需要打包成AssetBundle的资源不多时,可以自己通过AssetLabels窗口手动命名,然后再打包,但是当需要打包的资源过多时,一个一个的去手动编辑就特别的麻烦,因此如果能按资源名称自动命名打包AssetBundle,这样子就会方便很多。(我的就是资源太多了,好几百个,上千个)
- 实现功能:只需点击一下“自动打ab包”,即可将指定目录的资源全部自动生成按文件名称命名的AssetBundle,如下所示

下面直接上编辑器脚本
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEditor;
using System.IO;
/// <summary>
/// 设置好路径,点击 自动打ab包 即可 脚本必须放在Editor文件下面
/// </summary>
public class AssetBundleBuilder: MonoBehaviour
{ //资源存放路径
static string assetsDir = "Assets/Prefabs/EQ设备/4k";
//打包后存放路径
const string assetBundlesPath = "Assets/StreamingAssets/预制体"; BuildAssetBundleOptions sdsd = new BuildAssetBundleOptions(); [MenuItem("AssetBundle/自动打ab包")]
static void AutoBuildAll()
{
//清除所有的AssetBundleName
ClearAssetBundlesName();
//设置指定路径下所有需要打包的assetbundlename
SetAssetBundlesName(assetsDir);
//打包所有需要打包的asset //看你是什么平台 打包对应平台要不然加载不出来
BuildPipeline.BuildAssetBundles(assetBundlesPath, BuildAssetBundleOptions.None, BuildTarget.WebGL);
} /// <summary>
/// 清除所有的AssetBundleName,由于打包方法会将所有设置过AssetBundleName的资源打包,所以自动打包前需要清理
/// </summary>
static void ClearAssetBundlesName()
{
//获取所有的AssetBundle名称
string[] abNames = AssetDatabase.GetAllAssetBundleNames(); //强制删除所有AssetBundle名称
for (int i = 0; i < abNames.Length; i++)
{
AssetDatabase.RemoveAssetBundleName(abNames[i], true);
} } /// <summary>
/// 设置所有在指定路径下的AssetBundleName
/// </summary>
static void SetAssetBundlesName(string _assetsPath)
{
//先获取指定路径下的所有Asset,包括子文件夹下的资源
DirectoryInfo dir = new DirectoryInfo(_assetsPath);
FileSystemInfo[] files = dir.GetFileSystemInfos(); //GetFileSystemInfos方法可以获取到指定目录下的所有文件以及子文件夹
Debug.Log(files.Length);
for (int i = 0; i < files.Length; i++)
{ if (files[i] is DirectoryInfo) //如果是文件夹则递归处理
{
SetAssetBundlesName(files[i].FullName);
}
else if (!files[i].Name.EndsWith(".meta")) //如果是文件的话,则设置AssetBundleName,并排除掉.meta文件
{
SetABName(files[i].FullName); //逐个设置AssetBundleName
}
} } /// <summary>
/// 设置单个AssetBundle的Name
/// </summary>
/// <param name="filePath"></param>
static void SetABName(string assetPath)
{
string importerPath = "Assets" + assetPath.Substring(Application.dataPath.Length); //这个路径必须是以Assets开始的路径
AssetImporter assetImporter = AssetImporter.GetAtPath(importerPath); //得到Asset string tempName = assetPath.Substring(assetPath.LastIndexOf(@"\") + 1);
string assetName = tempName.Remove(tempName.LastIndexOf(".")); //获取asset的文件名称
assetImporter.assetBundleName = assetName; //最终设置assetBundleName
assetImporter.assetBundleVariant = "ab"; //设置ab包后缀
}
}
想需要自动刷新编辑器的,自己加一个当时忘记加了

有需要会继续补充
Unity3D中实现按资源名称自动化命名打包AssetBundle的更多相关文章
- 通过代码设置资源名字,为打包AssetBundle做准备,以及新打包系统
核心代码就是 importer.assetBundleName = name; 但是在这之前,我们需要超找到具体的资源,我们当然是不希望一个一个手动去查找.如果我选择一个文件夹,就可以查找到里边所 ...
- VISA资源名称控件
NI-VISA能自动检测端口.通过前面板上的VISA资源名称控件或VISA查找资源函数可查看端口列表.在任何平台上,NI-VISA支持的最大串口数量为256,串口的默认数量取决于操作系统. VISA资 ...
- (转) [教程] Unity3D中角色的动画脚本的编写(一)
ps: 这两天研究unity3d,对动画处理特别迷糊,不知FBX导入以后,接下来应该怎么操作,看到这篇文章,感觉非常好,讲解的很详细. 已有好些天没写什么了,今天想起来该写点东西了.这次我所介绍的内容 ...
- 【转】Unity3D中脚本的执行顺序和编译顺序
支持原文,原文请戳: Unity3D中脚本的执行顺序和编译顺序 在Unity中可以同时创建很多脚本,并且可以分别绑定到不同的游戏对象上,它们各自都在自己的生命周期中运行.与脚本有关的也就是编译和执行啦 ...
- 在C#中如何使用资源的方法
总结一个在C#中如何使用资源的方法:一:使用本地文件1.将本地要加入的资源文本(视频,图片,文本或其它)加入项目,比如我们现在加入一个up.bmp的图片到项目中,且放在文件夹Resources下面,2 ...
- 在VC项目中使用自定义资源
这是我看到的比较实用性的技巧,分享给大家 一.前言 在VC环境中除了我们所常用的Dialog.Menu和Bitmap等标准资源类型之外,它还支持自定义资源类型(Custom Resource),我们自 ...
- QT笔记之VS2010 Qt中导入qrc资源文件
转载1:http://qimo601.iteye.com/blog/1404693 转载2:http://blog.sina.com.cn/s/blog_92cde3060101lobm.html 转 ...
- Unity3D中灵活绘制进度条
有时我们需要在Unity3D中绘制进度条,如: 或 如果使用4.6版本以下的unity绘制环形的进度条可能需要费点劲.我搜到的大多数方法都是用NGUI插件,但有时只是 ...
- 【吐血推荐】简要分析unity3d中剪不断理还乱的yield
在学习unity3d的时候很容易看到下面这个例子: void Start () { StartCoroutine(Destroy()); } IEnumerator Destroy(){ yield ...
- Android中的Drawable资源
在Android应用中,常常会用到Drawable资源,比如图片资源等,在Android开发中我们是用Drawable类来Drawable类型资源的. Drawable资源一般存储在应用程序目录的\r ...
随机推荐
- 【分析笔记】全志方案通过命令行操作 GPIO 口(带源码分析)
前言说明 在项目开发初期,很经常会需要临时操作某个GPIO来验证某些功能,可以通过编写一个简单的驱动程序来操作,但更方便的是可以通过命令行直接操作 GPIO ,这样不需要经过编写代码.编译驱动.推入文 ...
- 如何避免让线程摸鱼,请用异步技术 async await 拿捏他~
发现问题 你点了外卖后,会一直不做其它事情,一直等外卖的到来么? 当然不会拉! 我们来看看代码世界的: public void Query(){ // 当前线程 向 数据库服务器 发起查询命令 // ...
- 为什么 TCP 建立连接需要三次握手(转载)
为什么 TCP 建立连接需要三次握手(转载) 原文链接:https://draveness.me/whys-the-design-tcp-three-way-handshake/ TCP 协议是我们几 ...
- 嵌入式Linux—Framebuffer应用编程
Framebuffer 应用编程 Frame的意思是帧,buffer的意思是缓冲区.Framebuffer就是一块内存(硬件设备),里面保存着一帧图像. ioctl()函数解析 ioctl()函数非常 ...
- IOS + H5 开发,如何实现,H5页面显示在IOS上
环境:IOS12.0 工具:Xcode 12.0 工程:IOS12.0工程 + H512.0工程 1,先把开发的H5画面,编译打包:assets静态资源文件 favicon.ico图标 index.h ...
- C++练习12 字符串成员函数的使用
1 #include <iostream> 2 #include <string> 3 using namespace std; 4 int main() 5 { 6 stri ...
- Module理解及使用
ES6的模块化设计思想是静态化,也就是说,在编译的时候确定模块的依赖关系,以及输出输出入的变量.而CommonJS和AMD模块都是在运行时确定的.ES6的模块不是对象,而是通过export显示指定输出 ...
- 真·生产力「GitHub 热点速览」
这些工具真的能极大提高生产力,节约你的时间来自(摸)我(鱼)增(划)值(水).先别提 style2paints,你给它随意画个草图,就能给你一个能交付给甲方爸爸的成品插画.如果提升 30%-40% 传 ...
- 免杀之:C# XOR Shellcode
免杀之:C# XOR Shellcode 目录 免杀之:C# XOR Shellcode 1 环境准备 2 制作Shellcode后门文件 2.1 编译环境准备 2.2 生成XORKryptor程序 ...
- js中Math.floor、Math.ceil、Math.round和parseInt小数取整小结
虽然知道结果都可以返回一个整数,但是四者的区别尤其是关于-0.5的取整情况貌似还是需要注意一下一.Math.floor(向下取整) 作用:返回小于等于参数的最大整数. eg: Math.floor(5 ...