using System; using UnityEditor; using UnityEditor.Build; using UnityEditor.Callbacks; class ConfigurationChecker { [DidReloadScripts] protected static void DidReloadScripts() { CheckUnityMathematics(); } public static bool CheckUnityMathematics() { bool available = isUnityMathematicsAvailable; UpdateDefine(available, "UNITY_MATHEMATICS"); return available; } protected static void UpdateDefine(bool enabled, string define) { if (enabled) GlobalDefine(define); else GlobalUndefine(define); } public static void GlobalDefine(string name) { UnityEngine.Debug.Log("Define " + name); BuildTargetGroup buildTargetGroup = EditorUserBuildSettings.selectedBuildTargetGroup; NamedBuildTarget namedBuildTarget = UnityEditor.Build.NamedBuildTarget.FromBuildTargetGroup(buildTargetGroup); //string scriptDefines = PlayerSettings.GetScriptingDefineSymbolsForGroup(EditorUserBuildSettings.selectedBuildTargetGroup); string scriptDefines = PlayerSettings.GetScriptingDefineSymbols(namedBuildTarget); if (!scriptDefines.Contains(name)) { string newScriptDefines = scriptDefines + " " + name; if (EditorUserBuildSettings.selectedBuildTargetGroup != 0) PlayerSettings.SetScriptingDefineSymbols(namedBuildTarget, newScriptDefines); //PlayerSettings.SetScriptingDefineSymbolsForGroup(EditorUserBuildSettings.selectedBuildTargetGroup, newScriptDefines); } } public static void GlobalUndefine(string name) { UnityEngine.Debug.Log("Undefine " + name); BuildTargetGroup buildTargetGroup = EditorUserBuildSettings.selectedBuildTargetGroup; NamedBuildTarget namedBuildTarget = UnityEditor.Build.NamedBuildTarget.FromBuildTargetGroup(buildTargetGroup); // string scriptDefines = PlayerSettings.GetScriptingDefineSymbolsForGroup(EditorUserBuildSettings.selectedBuildTargetGroup); string scriptDefines = PlayerSettings.GetScriptingDefineSymbols(namedBuildTarget); if (scriptDefines.Contains(name)) { int playMakerIndex = scriptDefines.IndexOf(name); string newScriptDefines = scriptDefines.Remove(playMakerIndex, name.Length); PlayerSettings.SetScriptingDefineSymbols(namedBuildTarget, newScriptDefines); // PlayerSettings.SetScriptingDefineSymbolsForGroup(EditorUserBuildSettings.selectedBuildTargetGroup, newScriptDefines); } } #region Availability #region Packages private static bool isUnityMathematicsAvailable { get => DoesTypeExist("Unity.Mathematics.float3"); // { // return DoesTypeExist("Passer.Tracking.HydraBaseStation"); // } } #endregion Packages public static bool DoesTypeExist(string className) { System.Reflection.Assembly[] assemblies = AppDomain.CurrentDomain.GetAssemblies(); foreach (System.Reflection.Assembly assembly in assemblies) { if (assembly.GetType(className) != null) return true; } return false; } #endregion Availability }