暫無描述
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

DefineSymbolsUtil.cs 3.5KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889
  1. #if UNITY_EDITOR
  2. using System;
  3. using System.Reflection;
  4. using System.Text;
  5. using UnityEditor;
  6. using UnityEngine;
  7. namespace XCharts.Runtime
  8. {
  9. public static class DefineSymbolsUtil
  10. {
  11. private static readonly StringBuilder s_StringBuilder = new StringBuilder();
  12. public static void AddGlobalDefine(string symbol)
  13. {
  14. var flag = false;
  15. var num = 0;
  16. foreach (var buildTargetGroup in (BuildTargetGroup[]) Enum.GetValues(typeof(BuildTargetGroup)))
  17. {
  18. if (IsValidBuildTargetGroup(buildTargetGroup))
  19. {
  20. var symbols = PlayerSettings.GetScriptingDefineSymbolsForGroup(buildTargetGroup);
  21. symbols = symbols.Replace(" ", "");
  22. if (Array.IndexOf(symbols.Split(';'), symbol) != -1) continue;
  23. flag = true;
  24. num++;
  25. var defines = symbols + (symbols.Length > 0 ? ";" + symbol : symbol);
  26. PlayerSettings.SetScriptingDefineSymbolsForGroup(buildTargetGroup, defines);
  27. }
  28. }
  29. if (flag)
  30. {
  31. Debug.LogFormat("Added global define symbol \"{0}\" to {1} BuildTargetGroups.", symbol, num);
  32. }
  33. }
  34. public static void RemoveGlobalDefine(string symbol)
  35. {
  36. var flag = false;
  37. var num = 0;
  38. foreach (var buildTargetGroup in (BuildTargetGroup[]) Enum.GetValues(typeof(BuildTargetGroup)))
  39. {
  40. if (IsValidBuildTargetGroup(buildTargetGroup))
  41. {
  42. var symbols = PlayerSettings.GetScriptingDefineSymbolsForGroup(buildTargetGroup).Split(';');
  43. if (Array.IndexOf(symbols, symbol) == -1) continue;
  44. flag = true;
  45. num++;
  46. s_StringBuilder.Length = 0;
  47. foreach (var str in symbols)
  48. {
  49. if (!str.Equals(symbol))
  50. {
  51. if (s_StringBuilder.Length > 0) s_StringBuilder.Append(";");
  52. s_StringBuilder.Append(str);
  53. }
  54. }
  55. PlayerSettings.SetScriptingDefineSymbolsForGroup(buildTargetGroup, s_StringBuilder.ToString());
  56. }
  57. }
  58. if (flag)
  59. {
  60. Debug.LogFormat("Removed global define symbol \"{0}\" to {1} BuildTargetGroups.", symbol, num);
  61. }
  62. }
  63. private static bool IsValidBuildTargetGroup(BuildTargetGroup group)
  64. {
  65. if (group == BuildTargetGroup.Unknown) return false;
  66. var type = Type.GetType("UnityEditor.Modules.ModuleManager, UnityEditor.dll");
  67. if (type == null) return true;
  68. var method1 = type.GetMethod("GetTargetStringFromBuildTargetGroup", BindingFlags.Static | BindingFlags.NonPublic);
  69. var method2 = typeof(PlayerSettings).GetMethod("GetPlatformName", BindingFlags.Static | BindingFlags.NonPublic);
  70. if (method1 == null || method2 == null) return true;
  71. var str1 = (string) method1.Invoke(null, new object[] { group });
  72. var str2 = (string) method2.Invoke(null, new object[] { group });
  73. if (string.IsNullOrEmpty(str1))
  74. {
  75. return !string.IsNullOrEmpty(str2);
  76. }
  77. else
  78. {
  79. return true;
  80. }
  81. }
  82. }
  83. }
  84. #endif