public static string GetAssetPath(UnityObject target) { if (!File.assetPaths.ContainsKey(target)) { File.assetPaths[target] = ProxyEditor.GetAssetPath(target); } return(File.assetPaths[target]); }
public static bool IsPrefabFile(this GameObject current) { if (current.IsNull()) { return(false); } if (current.hideFlags == HideFlags.NotEditable || current.hideFlags == HideFlags.HideAndDontSave) { return(true); } if (Proxy.IsEditor()) { string assetPath = ProxyEditor.GetAssetPath(current.transform.root.gameObject); if (!assetPath.IsEmpty()) { return(true); } } return(false); }
public static void Step(object collection, int itemIndex) { var materials = (FileData[])collection; var file = materials[itemIndex]; bool last = itemIndex == materials.Length - 1; Stepper.title = "Updating " + materials.Length + " Materials"; Stepper.message = "Updating material : " + file.name; string text = file.ReadText(); string copy = text; int index = 0; bool changed = false; bool removePrevious = false; string guid = text.Parse("guid: ", ","); string shaderPath = ProxyEditor.GetAssetPath(guid); if (!shaderPath.IsEmpty()) { Material material = file.GetAsset <Material>(); Shader shader = File.GetAsset <Shader>(shaderPath, false); if (shader != null) { int propertyCount = ProxyEditor.GetPropertyCount(shader); Dictionary <string, string> properties = new Dictionary <string, string>(); for (int propertyIndex = 0; propertyIndex < propertyCount; ++propertyIndex) { string name = ProxyEditor.GetPropertyName(shader, propertyIndex); properties[name] = ProxyEditor.GetPropertyType(shader, propertyIndex).ToName(); } string keywords = text.Parse("m_ShaderKeywords:", "m_").Trim("[]"); if (!keywords.IsEmpty()) { string keywordsCleaned = keywords; foreach (string keyword in keywords.Replace("\n ", "").Split(" ")) { if (!properties.ContainsKey(keyword.Split("_")[0], true)) { keywordsCleaned = keywordsCleaned.Replace(" " + keyword, ""); changed = true; } } copy = copy.Replace(keywords, keywordsCleaned); } while (true) { int nextIndex = text.IndexOf("data:", index + 5); if (removePrevious) { int nextGroup = text.IndexOf("\n m", index); int count = nextGroup != -1 && nextGroup < nextIndex ? nextGroup - index : nextIndex - index; string section = nextIndex < 0 ? text.Substring(index) : text.Substring(index, count); copy = copy.Replace(section, ""); removePrevious = false; changed = true; } if (nextIndex == -1) { break; } index = nextIndex; int keywordStart = text.IndexOf("name: ", index) + 6; int keywordEnd = text.IndexOf("\n", keywordStart); string name = text.Substring(keywordStart, keywordEnd - keywordStart); if (name.IsEmpty()) { continue; } bool emptyTexture = properties.ContainsKey(name) && properties[name] == "Texture" && material.GetTexture(name) == null; removePrevious = !properties.ContainsKey(name) || emptyTexture; //if(removePrevious){Log.Show("[MaterialCleaner] : Removing " + name + " from " + file.fullName);} } if (changed) { MaterialCleaner.changes = true; Log.Show("[MaterialCleaner] : Cleaned unused serialized data " + file.fullName); file.Write(copy); } } } if (last) { if (!MaterialCleaner.changes) { Log.Show("[MaterialCleaner] : All files already clean."); } else { Log.Show("[MaterialCleaner] : Cleaned all materials."); } Call.Delay(() => ProxyEditor.RefreshAssets(), 1); } }