IList <SpriteReferenceTreeElement> GetData() { List <SpriteReferenceTreeElement> replaceSpriteTreeElementList = new List <SpriteReferenceTreeElement>(); SpriteReferenceTreeElement root = new SpriteReferenceTreeElement(null, null, null, "", "Root", -1, 0); replaceSpriteTreeElementList.Add(root); return(replaceSpriteTreeElementList); }
/// <summary> /// 断开图片引用并保存预制体 /// </summary> private void BreakSpriteReferenceSavePrefab() { if (m_TreeView == null || m_TreeView.treeModel == null) { return; } IList <SpriteReferenceTreeElement> datas = m_TreeView.treeModel.GetData(); if (datas != null && datas.Count > 0) { for (int i = 0; i < datas.Count; i++) { SpriteReferenceTreeElement element = datas[i]; if (element.breakSpriteReference == false) { continue; } GameObject prefab = element.Go; if (prefab != null) { GameObject prefabGameobject = PrefabUtility.InstantiatePrefab(prefab) as GameObject; Transform imageChild = prefabGameobject.transform.Find(element.Path); bool hasBreakReference = false; if (imageChild != null) { Image childImage = imageChild.GetComponent <Image>(); if (childImage != null) { childImage.sprite = null; hasBreakReference = true; } } //5、保存预制体 if (hasBreakReference) { PrefabUtility.ReplacePrefab(prefabGameobject, prefab, ReplacePrefabOptions.Default); } DestroyImmediate(prefabGameobject); AssetDatabase.SaveAssets(); } } AssetDatabase.Refresh(); } }
public static void CheckUISpriteInPrefab(GameObject prefab, Sprite sprite, ref List <SpriteReferenceTreeElement> result) { if (prefab == null || sprite == null) { return; } Image[] images = prefab.GetComponentsInChildren <Image>(true); List <string> childPath = new List <string>(); if (images != null && images.Length > 0) { for (int i = 0; i < images.Length; i++) { if (images[i].sprite == sprite) { SpriteReferenceTreeElement element = new SpriteReferenceTreeElement(prefab, images[i], sprite, GetPath(prefab, images[i].gameObject), images[i].gameObject.name, 0, result.Count + 1); result.Add(element); } } } }
private void WirteReferenceSpriteDataToFile() { if (m_TreeView == null || m_TreeView.treeModel == null) { return; } IList <SpriteReferenceTreeElement> datas = m_TreeView.treeModel.GetData(); if (datas != null && datas.Count > 0) { string path = EditorPrefs.GetString("create_sprite_reference_model_folder", ""); string fileName = searchSpriteName + "_reference_model.csv"; path = EditorUtility.SaveFilePanel("Create Sprite Reference File ", path, fileName, "csv"); string dataModelStr = ""; //Header dataModelStr += "GameObjectName,ChildPath,SpriteName"; for (int i = 0; i < datas.Count; i++) { SpriteReferenceTreeElement element = datas[i]; dataModelStr += element.GameObjectName + ","; dataModelStr += element.Path + ","; dataModelStr += element.SpriteName + "\n"; } if (string.IsNullOrEmpty(dataModelStr) || string.IsNullOrEmpty(dataModelStr)) { return; } File.WriteAllText(path, dataModelStr, new UTF8Encoding(false)); AssetDatabase.Refresh(); EditorPrefs.SetString("create_sprite_reference_model_folder", path); } }