※.关于AssetBundle打包问题
在unity工程目录Assets 下新建一个Folder 命名为(Editor),然后将脚本放在该目录下
1) [MenuItem("lzk/自动打包单个文件")]
如其名,可以遍历指定目录下所有子目录下的文件并对其assetbundleName进行命名、打包
2)[MenuItem("lzk/自动打包图集资源")]
将指定目录下的一层子目录做为Package Tag 对该子目录下所有文件进行打包图集以及将该目录名作为assetbundleName并完成assetbundle打包
3)[MenuItem("lzk/取消所有Asset命名")]
将会取消Assets下所有文件的assetbundleName
4)[MenuItem("lzk/纯属测试")]
作为测试来用的
using UnityEngine;
using System.Collections;
using UnityEditor;
using System.IO;
using System.Collections.Generic;
public class TestPath {
[MenuItem("lzk/自动打包单个文件")]
static void TestPathFun()
{
dirPath.Clear();
string targetPath = Application.dataPath + "/StreamingAssets/A";
string imagePath = Application.dataPath + "/StreamingAssets";
string TestPath = Application.dataPath + "/Test/";
if (!Directory.Exists(targetPath))
{
Directory.CreateDirectory(targetPath);
}
DirectoryInfo dirInfo = new DirectoryInfo(TestPath);
FindAllDirs(dirInfo);
dirPath.Add(dirInfo);
//遍历每个文件夹路径
foreach (var item in dirPath)
{
FindAllFiles(item);
}
BuildPipeline.BuildAssetBundles(targetPath, BuildAssetBundleOptions.None, BuildTarget.Android);
}
//存放所有文件夹路径
public static List<DirectoryInfo> dirPath = new List<DirectoryInfo>();
//递归找到所有文件夹
static void FindAllDirs(DirectoryInfo info)
{
foreach (var item in info.GetDirectories())
{
if (!dirPath.Contains(item))
{
dirPath.Add(item);
}
FindAllDirs(item);
}
}
//找到所有文件夹下的所有文件
static void FindAllFiles(DirectoryInfo info)
{
foreach (var item in info.GetFiles())
{
if (!item.Name.EndsWith(".meta"))
{
ChangeFileAssetBundleName(item.Name,item.FullName);
}
}
}
//修改找到的所有文件的assetbundleName
static void ChangeFileAssetBundleName(string name, string namePath)
{
name = name.Substring(0, name.IndexOf("."));
namePath = namePath.Substring(namePath.IndexOf("Assets"));
Debug.Log(namePath);
var importer = AssetImporter.GetAtPath(namePath);
Debug.Log(importer.assetBundleName);
if (importer && importer.assetBundleName != name)
{
importer.assetBundleName = name;
}
}
[MenuItem("lzk/自动打包图集资源")]
static void BuildAllImage()
{
allDirList.Clear();
//指定目录
string path = Application.dataPath + "/Test/";
//打包到的目标目录
string targetPath = Application.streamingAssetsPath + "/AB_Image/";
if (!Directory.Exists(targetPath))
{
Directory.CreateDirectory(targetPath);
}
DirectoryInfo dirInfo = new DirectoryInfo(path);
foreach (var item in dirInfo.GetDirectories())
{
FindSubFiles(item);
foreach (var dirPath in allDirList)
{
FindFilesForPackage(dirPath,item.Name);
}
allDirList.Clear();
}
BuildPipeline.BuildAssetBundles(targetPath, BuildAssetBundleOptions.None, BuildTarget.Android);
}
//存放所有文件目录路径
public static List<DirectoryInfo> allDirList = new List<DirectoryInfo>();
//找到指定路径下的文件
static void FindSubFiles(DirectoryInfo info)
{
allDirList.Add(info);
foreach (var item in info.GetDirectories())
{
if (!allDirList.Contains(item))
{
allDirList.Add(item);
}
FindSubFiles(item);
}
}
//找到指定文件夹下的所有文件
static void FindFilesForPackage(DirectoryInfo info,string packageAndassetName)
{
foreach (var item in info.GetFiles())
{
if (item.Name.EndsWith(".png"))
{
Debug.Log(item.FullName.Substring(item.FullName.IndexOf("Assets")));
string centerPath = item.FullName.Substring(item.FullName.IndexOf("Assets"));
TextureImporter imporSettingPackage = TextureImporter.GetAtPath(centerPath) as TextureImporter;
imporSettingPackage.spritePackingTag = packageAndassetName;
AssetImporter importSettingAssetBundle = AssetImporter.GetAtPath(centerPath) as AssetImporter;
importSettingAssetBundle.assetBundleName = "ui_" + packageAndassetName;
}
}
}
[MenuItem("lzk/取消所有Asset命名")]
static void CancleAssetBundleName()
{
cancleNameList.Clear();
string path = Application.dataPath + "/";
DirectoryInfo dirInfo = new DirectoryInfo(path);
CanleDirPath(dirInfo);
foreach (var item in cancleNameList)
{
CancleFileName(item);
}
}
//存放所有目录路径
public static List<DirectoryInfo> cancleNameList = new List<DirectoryInfo>();
//获得所有目录路径
static void CanleDirPath(DirectoryInfo info)
{
foreach (var item in info.GetDirectories())
{
if (!cancleNameList.Contains(item))
{
cancleNameList.Add(item);
}
CanleDirPath(item);
}
}
//设置所有文件
static void CancleFileName(DirectoryInfo info)
{
foreach (var item in info.GetFiles())
{
if (item.Name.EndsWith(".cs"))
return;
string centerPath = item.FullName.Substring(item.FullName.IndexOf("Assets"));
var importSetting = AssetImporter.GetAtPath(centerPath);
if (importSetting && importSetting.assetBundleName != null)
{
importSetting.assetBundleName = null;
}
}
}
[MenuItem("lzk/纯属测试")]
static void TestPathFun02()
{
string versionDir = "Image";
var fullPath = Application.dataPath + "/" + versionDir + "/";
var relativeLen = versionDir.Length + 8; // Assets 长度
if (Directory.Exists(fullPath))
{
var dir = new DirectoryInfo(fullPath);
var files = dir.GetFiles("*", SearchOption.AllDirectories);
for (var i = 0; i < files.Length; ++i)
{
var fileInfo = files[i];
if (!fileInfo.Name.EndsWith(".meta"))
{
string center = fileInfo.Name.Substring(0, fileInfo.Name.IndexOf("."));
var basePath = fileInfo.FullName.Substring(fullPath.Length - relativeLen).Replace('\\', '/');
Debug.Log(basePath);
var importer = AssetImporter.GetAtPath(basePath);
Debug.Log(importer.assetBundleName);
if (importer && importer.assetBundleName != center)
{
importer.assetBundleName = center;
}
}
}
}
}
}