2024-12-14 18:27:59 +08:00

118 lines
4.1 KiB
C#

/****************************************************************************
* Copyright (c) 2017 ~ 2024 liangxiegame UNDER MIT LINCESE
*
* https://qframework.cn
* https://github.com/liangxiegame/QFramework
* https://gitee.com/liangxiegame/QFramework
****************************************************************************/
using System.Linq;
namespace QFramework
{
using UnityEngine;
using UnityEditor;
using System.IO;
public class AssetBundleInfo
{
public readonly string Name;
public AssetBundleInfo(string name)
{
this.Name = name;
}
public string[] assets;
}
public static class BuildScript
{
public static void BuildAssetBundles(BuildTarget buildTarget)
{
// 先清空一下没用的 ab 名字
AssetDatabase.RemoveUnusedAssetBundleNames();
var defaultSubProjectData = new SubProjectData();
var subProjectDatas = SubProjectData.SearchAllInProject();
SubProjectData.SplitAssetBundles2DefaultAndSubProjectDatas(defaultSubProjectData, subProjectDatas);
// Choose the output path according to the build target.
var outputPath = Path.Combine(ResKitAssetsMenu.AssetBundlesOutputPath, GetPlatformName());
outputPath.CreateDirIfNotExists();
if (ResKitView.AppendHash)
{
BuildPipeline.BuildAssetBundles(outputPath, defaultSubProjectData.Builds.ToArray(),
BuildAssetBundleOptions.ChunkBasedCompression | BuildAssetBundleOptions.AppendHashToAssetBundleName,
buildTarget);
}
else
{
BuildPipeline.BuildAssetBundles(outputPath, defaultSubProjectData.Builds.ToArray(),
BuildAssetBundleOptions.ChunkBasedCompression,
buildTarget);
}
GenerateVersionConfig();
var finalDir = Application.streamingAssetsPath + "/AssetBundles/" + GetPlatformName();
finalDir.DeleteDirIfExists();
finalDir.CreateDirIfNotExists();
FileUtil.ReplaceDirectory(outputPath, finalDir);
AssetBundleExporter.BuildDataTable(defaultSubProjectData.Builds.Select(b => b.assetBundleName).ToArray(),appendHash:ResKitView.AppendHash);
// foreach (var subProjectData in subProjectDatas)
// {
// outputPath = Path.Combine(ResKitAssetsMenu.AssetBundlesOutputPath + "/" + subProjectData.Name,
// GetPlatformName());
// outputPath.CreateDirIfNotExists();
//
// BuildPipeline.BuildAssetBundles(outputPath, subProjectData.Builds.ToArray(),
// BuildAssetBundleOptions.ChunkBasedCompression, buildTarget);
// finalDir = Application.streamingAssetsPath + "/" + subProjectData.Name + "/AssetBundles/" +
// GetPlatformName();
//
// finalDir.DeleteDirIfExists();
// finalDir.CreateDirIfNotExists();
//
// FileUtil.ReplaceDirectory(outputPath, finalDir);
// AssetBundleExporter.BuildDataTable(subProjectData.Builds.Select(b => b.assetBundleName).ToArray(),
// finalDir + "/");
// }
AssetDatabase.Refresh();
}
private static void GenerateVersionConfig()
{
if (ResKitEditorWindow.EnableGenerateClass)
{
WriteClass();
}
}
public static void WriteClass()
{
"Assets/QFrameworkData".CreateDirIfNotExists();
var path = Path.GetFullPath(
Application.dataPath + Path.DirectorySeparatorChar + "QFrameworkData/QAssets.cs");
var writer = new StreamWriter(File.Open(path, FileMode.Create));
ResDataCodeGenerator.WriteClass(writer, "QAssetBundle");
writer.Close();
AssetDatabase.Refresh();
}
private static string GetPlatformName()
{
return AssetBundlePathHelper.GetPlatformName();
}
}
}