#if UNITY_EDITOR namespace UIWidgets { using System; using System.Collections.Generic; using UnityEditor; /// /// Scripting Define Symbols. /// public static class ScriptingDefineSymbols { static List GetTargets() { var targets = new List(); foreach (var v in Enum.GetValues(typeof(BuildTarget))) { var target = (BuildTarget)v; var group = BuildPipeline.GetBuildTargetGroup(target); if (IsBuildTargetSupported(group, target) && !targets.Contains(group)) { targets.Add(group); } } return targets; } static bool IsBuildTargetSupported(BuildTargetGroup group, BuildTarget target) { #if UNITY_2018_1_OR_NEWER return BuildPipeline.IsBuildTargetSupported(group, target); #else var flags = System.Reflection.BindingFlags.Static | System.Reflection.BindingFlags.NonPublic; var buildTargetSupported = typeof(BuildPipeline).GetMethod("IsBuildTargetSupported", flags); return Convert.ToBoolean(buildTargetSupported.Invoke(null, new object[] { group, target })); #endif } /// /// Add scripting define symbols. /// /// Symbol to add. public static void Add(string symbol) { foreach (var target in GetTargets()) { var symbols = Symbols(target); if (symbols.Contains(symbol)) { continue; } symbols.Add(symbol); Save(symbols, target); } } /// /// Remove scripting define symbols. /// /// Symbol to remove. public static void Remove(string symbol) { foreach (var target in GetTargets()) { var symbols = Symbols(target); if (!symbols.Contains(symbol)) { continue; } symbols.Remove(symbol); Save(symbols, target); } } static readonly char[] SymbolSeparator = new char[] { ';' }; /// /// Get scripting define symbols. /// /// Scripting define symbols. [System.Obsolete("Replaced with Symbols(BuildTargetGroup target).")] public static HashSet All() { var symbols = PlayerSettings.GetScriptingDefineSymbolsForGroup(EditorUserBuildSettings.selectedBuildTargetGroup); return new HashSet(symbols.Split(SymbolSeparator)); } /// /// Get scripting define symbols. /// /// Target. /// Scripting define symbols. public static HashSet Symbols(BuildTargetGroup target) { var symbols = PlayerSettings.GetScriptingDefineSymbolsForGroup(target); var result = new HashSet(); foreach (var symbol in symbols.Split(SymbolSeparator)) { if (symbol.Length > 0) { result.Add(symbol); } } return result; } /// /// Check if symbol defined in scripting define symbols. /// /// Symbol. /// True if symbol defined; otherwise false. public static bool Contains(string symbol) { return Symbols(EditorUserBuildSettings.selectedBuildTargetGroup).Contains(symbol); } static void Save(HashSet symbols, BuildTargetGroup target) { var arr = new string[symbols.Count]; symbols.CopyTo(arr); PlayerSettings.SetScriptingDefineSymbolsForGroup(target, string.Join(";", arr)); AssetDatabase.Refresh(); } } } #endif