Files
BingoGrassland/Assets/Editor/Scripts/AssetBundleBuildKit.cs
T
2026-04-20 13:49:36 +08:00

90 lines
2.8 KiB
C#

using System;
using System.IO;
using UnityEditor;
using UnityEngine;
namespace BingoBrain.Editor
{
public class AssetBundleBuildKit
{
public const string AssetBundleRootPath = "Assets/AssetHotFix/";
public const string AssetBundleSuffix = ".assetbundle";
static void SetABName(string assetPath)
{
var importerPath = $"Assets{assetPath[Application.dataPath.Length..]}";
importerPath = importerPath.Replace("\\", "/");
const string assetBundleRootPath = AssetBundleRootPath;
if (importerPath.StartsWith(assetBundleRootPath))
{
var bundleName = importerPath.Replace(assetBundleRootPath, "");
var endIndex = bundleName.LastIndexOf("/", StringComparison.Ordinal);
if (endIndex <= 0)
{
return;
}
var fileInfo = new FileInfo(importerPath);
if ((fileInfo.Attributes & FileAttributes.Directory) == 0)
{
try
{
bundleName = bundleName.ToLower().Substring(0, endIndex).Replace("/", ".");
var importer = AssetImporter.GetAtPath(importerPath);
if (importer != null)
{
importer.assetBundleName = $"{bundleName}{AssetBundleSuffix}";
if (importer.assetBundleName != null)
{
importer.assetBundleVariant = "";
}
}
}
catch (Exception e)
{
Debug.LogError(importerPath);
Debug.LogError(endIndex);
Debug.LogError(e.Message);
throw;
}
}
}
}
public static void SetAssetBundlesName(string _assetsPath)
{
var dir = new DirectoryInfo(_assetsPath);
var files = dir.GetFileSystemInfos();
for (var i = 0; i < files.Length; i++)
{
if (files[i] is DirectoryInfo)
{
SetAssetBundlesName(files[i].FullName);
}
else if (!files[i].Name.EndsWith(".meta"))
{
SetABName(files[i].FullName);
}
}
}
public static void ClearAssetBundlesName()
{
var abNames = AssetDatabase.GetAllAssetBundleNames();
for (var i = 0; i < abNames.Length; i++)
{
AssetDatabase.RemoveAssetBundleName(abNames[i], true);
}
}
}
}