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); } }
/// <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); } }
/// <summary> /// 提取某个Asset 的引用信息 /// </summary> /// <param name="assetItem"></param> /// <returns></returns> private static AssetReferenceInfo GetAssetReferenceInfo(AssetItem assetItem) { var referenceInfo = new AssetReferenceInfo() { guid = assetItem.guid }; string solutePath = PROJECT_PATH + assetItem.path; using (StreamReader reader = new StreamReader(solutePath)) { string firstLine = reader.ReadLine(); if (firstLine.Contains("YAML")) { foreach (AssetItem referenceItem in ExtractAssetItemFromFile(solutePath)) { if (!referenceInfo.lstReferences.Contains(referenceItem.guid)) { referenceInfo.lstReferences.Add(referenceItem.guid); } } } string metaFilePath = AssetDatabase.GetTextMetaFilePathFromAssetPath(assetItem.path); foreach (AssetItem referenceItem in ExtractAssetItemFromFile(metaFilePath)) { if (!referenceInfo.lstReferences.Contains(referenceItem.guid)) { referenceInfo.lstReferences.Add(referenceItem.guid); } } } return(referenceInfo); }