1. 首先把模型变成预制体
  2. 一般当需要打包成AssetBundle的资源不多时,可以自己通过AssetLabels窗口手动命名,然后再打包,但是当需要打包的资源过多时,一个一个的去手动编辑就特别的麻烦,因此如果能按资源名称自动命名打包AssetBundle,这样子就会方便很多。(我的就是资源太多了,好几百个,上千个)
  3. 实现功能:只需点击一下“自动打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的更多相关文章

  1. 通过代码设置资源名字,为打包AssetBundle做准备,以及新打包系统

    核心代码就是  importer.assetBundleName = name;  但是在这之前,我们需要超找到具体的资源,我们当然是不希望一个一个手动去查找.如果我选择一个文件夹,就可以查找到里边所 ...

  2. VISA资源名称控件

    NI-VISA能自动检测端口.通过前面板上的VISA资源名称控件或VISA查找资源函数可查看端口列表.在任何平台上,NI-VISA支持的最大串口数量为256,串口的默认数量取决于操作系统. VISA资 ...

  3. (转) [教程] Unity3D中角色的动画脚本的编写(一)

    ps: 这两天研究unity3d,对动画处理特别迷糊,不知FBX导入以后,接下来应该怎么操作,看到这篇文章,感觉非常好,讲解的很详细. 已有好些天没写什么了,今天想起来该写点东西了.这次我所介绍的内容 ...

  4. 【转】Unity3D中脚本的执行顺序和编译顺序

    支持原文,原文请戳: Unity3D中脚本的执行顺序和编译顺序 在Unity中可以同时创建很多脚本,并且可以分别绑定到不同的游戏对象上,它们各自都在自己的生命周期中运行.与脚本有关的也就是编译和执行啦 ...

  5. 在C#中如何使用资源的方法

    总结一个在C#中如何使用资源的方法:一:使用本地文件1.将本地要加入的资源文本(视频,图片,文本或其它)加入项目,比如我们现在加入一个up.bmp的图片到项目中,且放在文件夹Resources下面,2 ...

  6. 在VC项目中使用自定义资源

    这是我看到的比较实用性的技巧,分享给大家 一.前言 在VC环境中除了我们所常用的Dialog.Menu和Bitmap等标准资源类型之外,它还支持自定义资源类型(Custom Resource),我们自 ...

  7. QT笔记之VS2010 Qt中导入qrc资源文件

    转载1:http://qimo601.iteye.com/blog/1404693 转载2:http://blog.sina.com.cn/s/blog_92cde3060101lobm.html 转 ...

  8. Unity3D中灵活绘制进度条

    有时我们需要在Unity3D中绘制进度条,如:           或        如果使用4.6版本以下的unity绘制环形的进度条可能需要费点劲.我搜到的大多数方法都是用NGUI插件,但有时只是 ...

  9. 【吐血推荐】简要分析unity3d中剪不断理还乱的yield

    在学习unity3d的时候很容易看到下面这个例子: void Start () { StartCoroutine(Destroy()); } IEnumerator Destroy(){ yield ...

  10. Android中的Drawable资源

    在Android应用中,常常会用到Drawable资源,比如图片资源等,在Android开发中我们是用Drawable类来Drawable类型资源的. Drawable资源一般存储在应用程序目录的\r ...

随机推荐

  1. DOM的操作(增删改查)

    操作DOM的核心就是增删改查 目录 一.节点创建型API 1.1 createElement 1.2 createTextNode 1.3 cloneNode 1.4 createDocumentFr ...

  2. 迁移学习(DIFEX)《Domain-invariant Feature Exploration for Domain Generalization》

    论文信息 论文标题:Domain-invariant Feature Exploration for Domain Generalization论文作者:Wang Lu, Jindong Wang, ...

  3. HelloWorld程序的代码编写-Hello World的编译运行

    HelloWorld程序的代码编写 程序开发步骤说明 开发环境已经搭建完毕,可以开发我们第一个Java程序了. Java程序开发三步骤:编写.编译.运行. 编写Java源程序 1. 在 d:\day0 ...

  4. 【学习笔记】XR872 Audio 驱动框架分析

    Xradio Sdk 的 Audio 驱动框架和 Linux 的 ASOC 驱动框架非常相似,只不过简化了很多. 驱动和芯片之间的关系图 下面的 SOC 表示的是 XR872 芯片,这里以 AC107 ...

  5. 【CTO变形记】高维视角,跳出“农场主与火鸡”

    前言:看待人事物的角度决定了我们的思考方向和处理事情的方式.在这些认识人事物的过程中,导致了一些"事故"发生:就好比"以手指月",原本要看"月亮&qu ...

  6. JZOJ 4296. 有趣的有趣的家庭菜园

    [NOIP2015模拟11.2]有趣的有趣的家庭菜园 题面 思路一 暴力 \(30\) 分! 很容易打,但是要注意: 开 \(\texttt{long long}\) 是非严格高于(等于是被允许的) ...

  7. 《爆肝整理》保姆级系列教程-玩转Charles抓包神器教程(8)-Charles如何进行断点调试

    1.简介 Charles和Fiddler一样也有个强大的功能,可以修改发送到服务器的数据包,但是修改前需要拦截,即设置断点.设置断点后,开始拦截接下来所有网页,直到取消断点.这个功能可以在数据包发送之 ...

  8. 关于HTML5中Video标签播放问题

    PS:官网首页视频IOS与安卓都可播放代码: <video width="100%" height="auto" type="video/mp4 ...

  9. day12_内部类&API

    1.参数传递 1.1 类名作为形参和返回值 类名--方法形参     方法的形参是类名,需要的是该类的对象:实际传递的是该对象的地址值 类名--返回值     方法的返回值是类名,返回的是该类的对象: ...

  10. PULPINO仿真建立

    PULPINO仿真建立 PULPINO主要特点: systemverilog实现 有常规外设,GPIO.SPI.I2C.UART等 有调试接口 总线有AXI,外设总线为APB,扩展性好 脚本为cmak ...