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包后缀
}
}

想需要自动刷新编辑器的,自己加一个当时忘记加了

有需要会继续补充

最新文章

  1. ie浏览器兼容问题汇总
  2. PLSQL快捷补充代码设置
  3. 【网络收集】数据库中字段类型对应C#中的数据类型
  4. PHP全局变量
  5. oninput,onpropertychange,onchange的使用方法和差别
  6. document.getElementsByClassName在ie8及其以下浏览器的兼容性问题
  7. hdu 2451 Simple Addition Expression(数位DP )成败在于细节
  8. SQL表连接
  9. (!(~+[])+{})[--[~+&quot;&quot;][+[]]*[~+[]] + ~~!+[]]+({}+[])[[~!+[]]*~+[]]一行js代码的原理分析
  10. 降维【PCA &amp; SVD】
  11. 使用GoldenGate EVENTACTIONS执行数据的实时触发和定制化
  12. Confluence 6 数据库整合有关你数据库的大小写敏感问题
  13. C# Xamarin移动开发项目实战篇
  14. 微信支付 python版
  15. springboot+cloud 学习(三)消息中间件 RibbitMQ+Stream
  16. 一般删除网页数据和jquery下使用Ajax删除数据的区别
  17. 以黄门镇黄湾村某一扶贫文档为例——将Excel数据填入到已存在的Word模板
  18. 解决&amp;quot;VC6.0的ClassView里不能显示类或成员变量&amp;quot;问题
  19. net-snmp 的配置
  20. Qt与FFmpeg联合开发指南(一)——解码(1):功能实现

热门文章

  1. angular Ionic CLI连接数据获取数据无限滚动
  2. 文本纠错:提升OCR任务准确率的方法理解
  3. Java8Stream流
  4. JSP第十一次作业
  5. 《Terraform 101 从入门到实践》 第二章 Providers插件管理
  6. Redis-03 数据格式和基础命令
  7. IDEA手动导入jar包到maven本地库
  8. 2211-22学习记录之python百分数,time模块
  9. 【已解决】SQL2012启动时报错:cannot find one or more cpmponents
  10. vue3+element表格数据导出