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); | |||
|  |             } | |||
|  |         } | |||
|  |     } | |||
|  | } |