/// <summary> /// 提取资源文件的引用关系 /// </summary> /// <param name="resConfig"></param> /// <param name="lstAssetItem"></param> private static void ExtractReferenceInfo(ResConfig resConfig, List <AssetItem> lstAssetItem) { SetProgress("收集文件引用信息...", 0.3f); for (int i = 0; i < lstAssetItem.Count; ++i) { AssetItem assetItem = lstAssetItem[i]; var referenceInfo = new AssetReferenceInfo() { guid = assetItem.guid }; string[] dependentAsset = AssetDatabase.GetDependencies(assetItem.path).Where(item => !item.EndsWith(".cs") && !item.EndsWith(".js")).ToArray();; foreach (string asset in dependentAsset) { string guid = AssetDatabase.AssetPathToGUID(asset); if (!referenceInfo.lstReferences.Contains(guid)) { referenceInfo.lstReferences.Add(guid); } if (!IsContainsItemGUID(resConfig.lstAssetItems, guid)) { AssetItem referenceItem = new AssetItem(EAssetType.Reference, guid, asset); resConfig.lstAssetItems.Add(referenceItem); } } if (referenceInfo.lstReferences.Count > 0) { resConfig.lstAssetReferenceInfos.Add(referenceInfo); } SetProgress("收集文件引用信息...", sProgress + 0.7f / lstAssetItem.Count); } }
private static void ExtractReferenceInfo(ResConfig resConfig, List <AssetItem> lstAssetItem) { SetProgress("收集文件引用信息...", 0.3f); for (int i = 0; i < lstAssetItem.Count; ++i) { AssetItem assetItem = lstAssetItem[i]; AssetReferenceInfo referenceInfo = GetAssetReferenceInfo(assetItem); if (referenceInfo.lstReferences.Count > 0) { resConfig.lstAssetReferenceInfos.Add(referenceInfo); foreach (string referenceAssetGUID in referenceInfo.lstReferences) { //if (IsContainsItemGUID(resConfig.lstExternalAssetItems, referenceAssetGUID)) if (IsContainsItemGUID(resConfig.lstAssetItems, referenceAssetGUID)) { continue; } AssetItem referenceAssetItem = GetAssetItemFromGUID(EAssetType.Reference, referenceAssetGUID); if (referenceAssetItem != null) { resConfig.lstAssetItems.Add(referenceAssetItem); } //resConfig.lstExternalAssetItems.Add(referenceAssetItem); } } SetProgress("收集文件引用信息...", sProgress + 0.7f / lstAssetItem.Count); } }
internal static ResConfig Generate(List <string> scenePaths) { sProgress = 0; ResConfig resConfig = new ResConfig(); #region 提取所有Resources下的文件 SetProgress("收集Resources信息...", sProgress); var resItemQuery = from assetPath in Directory.GetFiles(Application.dataPath, "*.*", SearchOption.AllDirectories) where (!assetPath.EndsWith(".meta")) && IsResourceFile(assetPath) select new AssetItem(EAssetType.Resources, AssetDatabase.AssetPathToGUID(assetPath.Replace('\\', '/').Replace(PROJECT_PATH, "")), assetPath.Replace('\\', '/').Replace(PROJECT_PATH, "")); foreach (AssetItem resItem in resItemQuery) { if (!IsContainsItemGUID(resConfig.lstAssetItems, resItem.guid)) { resConfig.lstAssetItems.Add(resItem); } } SetProgress("收集Resources信息...", sProgress + 0.05f); #endregion #region 提取所有StreamingAssets下的文件 SetProgress("收集StreamingAssets信息...", sProgress); var streamingAssetItemQuery = from assetPath in Directory.GetFiles(Application.streamingAssetsPath, "*.*", SearchOption.AllDirectories) where (!assetPath.EndsWith(".meta")) select new AssetItem(EAssetType.Streaming, AssetDatabase.AssetPathToGUID(assetPath.Replace('\\', '/').Replace(PROJECT_PATH, "")), assetPath.Replace('\\', '/').Replace(PROJECT_PATH, "")); foreach (AssetItem streamingAsset in streamingAssetItemQuery) { if (!IsContainsItemGUID(resConfig.lstAssetItems, streamingAsset.guid)) { resConfig.lstAssetItems.Add(streamingAsset); } } SetProgress("收集StreamingAssets信息...", sProgress + 0.05f); #endregion #region 提取场景引用的资源 SetProgress("收集场景引用信息...", 0.1f); for (int sceneID = 0; sceneID < scenePaths.Count; ++sceneID) { SceneResCfg sceneResCfg = new SceneResCfg() { sceneId = sceneID, sceneName = scenePaths[sceneID] }; string[] dependentAssets = AssetDatabase.GetDependencies(scenePaths[sceneID]).Where(item => !item.EndsWith(".cs") && !item.EndsWith(".js")).ToArray(); foreach (string asset in dependentAssets) { string guid = AssetDatabase.AssetPathToGUID(asset); AssetItem assetItem = new AssetItem(EAssetType.Reference, guid, asset); if (!sceneResCfg.lstReferencedResGUID.Contains(assetItem.guid)) { sceneResCfg.lstReferencedResGUID.Add(assetItem.guid); } if (!IsContainsItemGUID(resConfig.lstAssetItems, assetItem.guid)) { resConfig.lstAssetItems.Add(assetItem); } } resConfig.lstSceneResCfg.Add(sceneResCfg); SetProgress("收集场景引用信息...", sProgress + 0.2f / scenePaths.Count); } #endregion #region 提取资源引用关系 ExtractReferenceInfo(resConfig, resConfig.lstAssetItems); #endregion EditorUtility.ClearProgressBar(); return(resConfig); }