// Material/Shader Inspector for Unity 2017/2018 // Copyright (C) 2019 Thryrallo using System; using System.Collections; using System.Collections.Generic; using System.Text.RegularExpressions; using UnityEditor; using UnityEngine; namespace Thry { public class UnityHelper { /// /// return null if not found /// /// /// public static string FindPathOfAssetWithExtension(string filename) { string[] guids = AssetDatabase.FindAssets(filename.RemoveFileExtension()); foreach (string s in guids) { string path = AssetDatabase.GUIDToAssetPath(s); if (path.EndsWith(filename)) return path; } return null; } public static List FindAssetOfFilesWithExtension(string filename) { List ret = new List(); string[] guids = AssetDatabase.FindAssets(filename.RemoveFileExtension()); foreach (string s in guids) { string path = AssetDatabase.GUIDToAssetPath(s); if (path.EndsWith(filename)) ret.Add(path); } return ret; } public static void SetDefineSymbol(string symbol, bool active) { SetDefineSymbol(symbol, active, true); } public static void SetDefineSymbol(string symbol, bool active, bool refresh_if_changed) { try { string symbols = PlayerSettings.GetScriptingDefineSymbolsForGroup( BuildTargetGroup.Standalone); if (!symbols.Contains(symbol) && active) { PlayerSettings.SetScriptingDefineSymbolsForGroup( BuildTargetGroup.Standalone, symbols + ";" + symbol); if(refresh_if_changed) AssetDatabase.Refresh(); } else if (symbols.Contains(symbol) && !active) { PlayerSettings.SetScriptingDefineSymbolsForGroup( BuildTargetGroup.Standalone, Regex.Replace(symbols, @";?" + @symbol, "")); if(refresh_if_changed) AssetDatabase.Refresh(); } } catch (Exception e) { e.ToString(); } } public static void RepaintInspector(System.Type t) { Editor[] ed = (Editor[])Resources.FindObjectsOfTypeAll(); for (int i = 0; i < ed.Length; i++) { if (ed[i].GetType() == t) { ed[i].Repaint(); return; } } } public static void RepaintEditorWindow(Type t) { EditorWindow window = FindEditorWindow(t); if (window != null) window.Repaint(); } public static EditorWindow FindEditorWindow(System.Type t) { EditorWindow[] ed = (EditorWindow[])Resources.FindObjectsOfTypeAll(); for (int i = 0; i < ed.Length; i++) { if (ed[i].GetType() == t) { return ed[i]; } } return null; } public static string GetGUID(UnityEngine.Object o) { return AssetDatabase.AssetPathToGUID(AssetDatabase.GetAssetPath(o)); } public static int CalculateLengthOfText(string message, Font font= null) { if (font == null) font = GUI.skin.font; float totalLength = 0; CharacterInfo characterInfo = new CharacterInfo(); char[] arr = message.ToCharArray(); foreach (char c in arr) { font.GetCharacterInfo(c, out characterInfo, font.fontSize); totalLength += characterInfo.advance; } return (int)totalLength; } } }