public static void RefreshPartReferers() { #if CC2D_RES AssetDatabase.ForceReserializeAssets(m_searchPathPath); AssetDatabase.Refresh(); Dictionary <string, PartReferer> lastPartRefererDict = GetCurrentPartRefererDict(); int counter = 0; var partPacks = PartList.Static.partPacks; foreach (PartPack partPack in partPacks) { int counter2 = 0; foreach (Part partObject in partPack.parts) { string partRefPath = InitPartReferer(partObject, lastPartRefererDict); EditorUtility.DisplayProgressBar("Initialize Part Referers", WizardUtils.RelativePartPath(partObject), (float)counter / partPacks.Count + (float)counter2 / partPack.parts.Count / partPacks.Count); counter2++; } counter++; } counter = 0; foreach (var lastPartReferer in lastPartRefererDict) { AssetDatabase.DeleteAsset(lastPartReferer.Key); EditorUtility.DisplayCancelableProgressBar("Delete Unused Part Referers", lastPartReferer.Value.name, (float)counter / lastPartRefererDict.Count); counter++; } AssetDatabase.Refresh(); EditorUtility.UnloadUnusedAssetsImmediate(true); EditorUtility.ClearProgressBar(); #endif }
private static string InitPartReferer(Part partObject, Dictionary <string, PartReferer> lastPartRefererDict) { string relativePartRefPath = WizardUtils.RelativePartPath(partObject); string partRefPath = CC2D_RES_PATH + "/" + relativePartRefPath; if (EditorUtils.MakeSureAssetFolderExist(partRefPath.Remove(partRefPath.LastIndexOf("/")))) { if (lastPartRefererDict.TryGetValue(partRefPath, out PartReferer result)) { AssignPartReferer(partObject, result); lastPartRefererDict.Remove(partRefPath); } else { PartReferer newPartReferer = ScriptableObject.CreateInstance <PartReferer>(); AssignPartReferer(partObject, newPartReferer); AssetDatabase.CreateAsset(newPartReferer, partRefPath); } partObject.datapath = CC2D_RES_FOLDER + "/" + relativePartRefPath.Remove(relativePartRefPath.LastIndexOf(".asset")); } return(partRefPath); }