using System.IO;
using UnityEditor;
using UnityEngine;
public class AssetBundles {
[MenuItem("Tools/Build AssetBundles")]
public static void BuildAssetBundles() {
ClearExitAssetBundleNames();
Object[] arr = Selection.objects;
if(arr.Length == 0) {
Debug.Log("请选中Project视图的文件夹进行打包!");
}
for (int i = 0; i < arr.Length; i++) {
string resPath = Application.dataPath.Substring(0, Application.dataPath.LastIndexOf('/')) + "/" + AssetDatabase.GetAssetPath(arr[i]);
DirectoryInfo directoryInfo = new DirectoryInfo(resPath);
string targetPath = Application.streamingAssetsPath + "/AssetBundles/" + directoryInfo.Name + "/AssetBundles";
SetAssetBundleNames(directoryInfo);
if (!Directory.Exists(targetPath)) {
Directory.CreateDirectory(targetPath);
}
BuildPipeline.BuildAssetBundles(targetPath, BuildAssetBundleOptions.None, BuildTarget.StandaloneWindows64);
ClearExitAssetBundleNames();
AssetDatabase.Refresh();
}
}
/// <summary>
/// 文件名即AssetBundle名
/// </summary>
/// <param name="directoryInfo"></param>
private static void SetAssetBundleNames(DirectoryInfo directoryInfo) {
FileInfo[] fileInfos = directoryInfo.GetFiles();
foreach(FileInfo fileInfo in fileInfos) {
if (fileInfo.Extension != ".meta") {
int index = fileInfo.FullName.IndexOf("Assets");
string path = fileInfo.FullName.Substring(index);
AssetImporter importer = AssetImporter.GetAtPath(path);
importer.assetBundleName = fileInfo.Name.Split('.')[0] + ".ab";
}
}
DirectoryInfo[] directoryInfos = directoryInfo.GetDirectories();
foreach (DirectoryInfo dir in directoryInfos) {
SetAssetBundleNames(dir);
}
}
private static void ClearExitAssetBundleNames() {
string[] names = AssetDatabase.GetAllAssetBundleNames();
for(int i=0;i<names.Length;i++) {
AssetDatabase.RemoveAssetBundleName(names[i], true);
}
}
}
资源打包为AssetBundle
最新推荐文章于 2024-05-30 11:56:19 发布