110 lines
3.4 KiB
C#
110 lines
3.4 KiB
C#
using System;
|
||
using System.Linq;
|
||
using System.Collections;
|
||
using System.Collections.Generic;
|
||
using UnityEditor;
|
||
|
||
namespace YooAsset.Editor
|
||
{
|
||
public class BuildMapContext : IContextObject
|
||
{
|
||
/// <summary>
|
||
/// 资源包集合
|
||
/// </summary>
|
||
private readonly Dictionary<string, BuildBundleInfo> _bundleInfoDic = new Dictionary<string, BuildBundleInfo>(10000);
|
||
|
||
/// <summary>
|
||
/// 未被依赖的资源列表
|
||
/// </summary>
|
||
public readonly List<ReportIndependAsset> IndependAssets = new List<ReportIndependAsset>(1000);
|
||
|
||
/// <summary>
|
||
/// 参与构建的资源总数
|
||
/// 说明:包括主动收集的资源以及其依赖的所有资源
|
||
/// </summary>
|
||
public int AssetFileCount;
|
||
|
||
/// <summary>
|
||
/// 资源收集命令
|
||
/// </summary>
|
||
public CollectCommand Command { set; get; }
|
||
|
||
/// <summary>
|
||
/// 资源包信息列表
|
||
/// </summary>
|
||
public Dictionary<string, BuildBundleInfo>.ValueCollection Collection
|
||
{
|
||
get
|
||
{
|
||
return _bundleInfoDic.Values;
|
||
}
|
||
}
|
||
|
||
|
||
/// <summary>
|
||
/// 添加一个打包资源
|
||
/// </summary>
|
||
public void PackAsset(BuildAssetInfo assetInfo)
|
||
{
|
||
string bundleName = assetInfo.BundleName;
|
||
if (string.IsNullOrEmpty(bundleName))
|
||
throw new Exception("Should never get here !");
|
||
|
||
if (_bundleInfoDic.TryGetValue(bundleName, out BuildBundleInfo bundleInfo))
|
||
{
|
||
bundleInfo.PackAsset(assetInfo);
|
||
}
|
||
else
|
||
{
|
||
BuildBundleInfo newBundleInfo = new BuildBundleInfo(bundleName);
|
||
newBundleInfo.PackAsset(assetInfo);
|
||
_bundleInfoDic.Add(bundleName, newBundleInfo);
|
||
}
|
||
}
|
||
|
||
/// <summary>
|
||
/// 是否包含资源包
|
||
/// </summary>
|
||
public bool IsContainsBundle(string bundleName)
|
||
{
|
||
return _bundleInfoDic.ContainsKey(bundleName);
|
||
}
|
||
|
||
/// <summary>
|
||
/// 获取资源包信息,如果没找到返回NULL
|
||
/// </summary>
|
||
public BuildBundleInfo GetBundleInfo(string bundleName)
|
||
{
|
||
if (_bundleInfoDic.TryGetValue(bundleName, out BuildBundleInfo result))
|
||
{
|
||
return result;
|
||
}
|
||
throw new Exception($"Should never get here ! Not found bundle : {bundleName}");
|
||
}
|
||
|
||
/// <summary>
|
||
/// 获取构建管线里需要的数据
|
||
/// </summary>
|
||
public UnityEditor.AssetBundleBuild[] GetPipelineBuilds()
|
||
{
|
||
List<UnityEditor.AssetBundleBuild> builds = new List<UnityEditor.AssetBundleBuild>(_bundleInfoDic.Count);
|
||
foreach (var bundleInfo in _bundleInfoDic.Values)
|
||
{
|
||
builds.Add(bundleInfo.CreatePipelineBuild());
|
||
}
|
||
return builds.ToArray();
|
||
}
|
||
|
||
/// <summary>
|
||
/// 创建着色器信息类
|
||
/// </summary>
|
||
public void CreateShadersBundleInfo(string shadersBundleName)
|
||
{
|
||
if (IsContainsBundle(shadersBundleName) == false)
|
||
{
|
||
var shaderBundleInfo = new BuildBundleInfo(shadersBundleName);
|
||
_bundleInfoDic.Add(shadersBundleName, shaderBundleInfo);
|
||
}
|
||
}
|
||
}
|
||
} |