Unity3D中实现按资源名称自动化命名打包AssetBundle
来源:互联网 发布:centos 桥接模式 编辑:程序博客网 时间:2024/06/05 06:50
1. 概述
一般当需要打包成AssetBundle的资源不多时,可以自己通过AssetLabels窗口手动命名,然后再打包,但是当需要打包的资源过多时,一个一个的去手动编辑就特别的麻烦,因此如果能按资源名称自动命名打包AssetBundle,这样子就会方便很多。
实现功能:只需点击一下“AutoBuildAll”,即可将指定目录的资源全部自动生成按文件名称命名的AssetBundle,如下所示。
2. 实现的主要思路
第一步,强制删除原有的AssetBundle标签,避免把不必要的资源也一起打包,这是由于打包时会把所有带有AssetBundle标签的资源都打包;
第二步,逐个获取指定目录下的文件名称(除.meta文件外),并给资源按名称打上AssetBundle标签;
第三步,生成AssetBundles到指定目录。
3. 具体实现代码
using System.Collections;using System.Collections.Generic;using UnityEngine;using UnityEditor;using System.IO;public class AssetBundleBuilder : MonoBehaviour { //资源存放路径 static string assetsDir = Application.dataPath + "/AssetBundleBuilder/Res"; //打包后存放路径 const string assetBundlesPath = "Assets/AssetBundleBuilder/AssetBundles"; [MenuItem("AssetBundle/AutoBuildAll")] static void AutoBuildAll() { //清除所有的AssetBundleName ClearAssetBundlesName(); //设置指定路径下所有需要打包的assetbundlename SetAssetBundlesName(assetsDir); //打包所有需要打包的asset BuildPipeline.BuildAssetBundles(assetBundlesPath, BuildAssetBundleOptions.None, BuildTarget.StandaloneWindows); } [MenuItem("AssetBundle/BuildWithName")] static void BuildAllAssetBundle() { BuildPipeline.BuildAssetBundles(assetBundlesPath, BuildAssetBundleOptions.None, BuildTarget.StandaloneWindows); } /// <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方法可以获取到指定目录下的所有文件以及子文件夹 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 }}
参考资料:
http://blog.csdn.net/onafioo/article/details/50969945
阅读全文
0 0
- Unity3D中实现按资源名称自动化命名打包AssetBundle
- Unity3D-资源打包AssetBundle
- Unity3d之资源打包Assetbundle
- Unity3d的AssetBundle打包——AssetBundle Browser(简单实现资源复用)
- Unity3d AssetBundle 动态资源打包另类入门
- Unity3D之AssetBundle【7】共享资源打包/依赖资源打包
- Unity3d热更新(二):资源打包AssetBundle
- Unity3d热更新(二):资源打包AssetBundle
- unity3d assetbundle打包策略
- Unity3d的Assetbundle打包
- Unity 资源打包Assetbundle
- 资源打包Assetbundle
- AssetBundle打包资源
- 资源打包Assetbundle
- Unity 资源打包Assetbundle
- Unity 资源打包Assetbundle
- Unity资源打包Assetbundle
- 资源打包Assetbundle
- 映射表
- git 回滚操作 revert 和 reset
- [BZOJ 1054][HAOI 2008]移动玩具 状态压缩
- Java枚举
- 灵魂出窍
- Unity3D中实现按资源名称自动化命名打包AssetBundle
- jsp自动跳转的几种方法
- SocketIO接收中文乱码
- Linux --> 安装centos7虚拟机 for mac
- Android学习日记(yzy):通过Timer类和Handler机制实现gif图片
- 常用string原型扩展
- 新手之javase基础 笔记
- Scrapy 使用记录
- WindowManager——悬浮在所有app之上