Skip to content

Instantly share code, notes, and snippets.

@LaneF
Last active July 2, 2023 00:18
Show Gist options
  • Star 3 You must be signed in to star a gist
  • Fork 1 You must be signed in to fork a gist
  • Save LaneF/91b4142c0387c10c195cdc45a0f10e57 to your computer and use it in GitHub Desktop.
Save LaneF/91b4142c0387c10c195cdc45a0f10e57 to your computer and use it in GitHub Desktop.
Unity Define Symbols Utility
using System.Text;
using UnityEditor;
using UnityEngine;
namespace Cleverous
{
public static class DefineSymbolUtil
{
public const string Symbol = "YOUR_DEFINE_SYMBOL";
[MenuItem("Tools/YOUR TOOL/Install Define Symbol", priority = 900)]
public static void InstallDefines()
{
RemoveDefine(Symbol);
AddDefine(Symbol);
}
[UnityEditor.Callbacks.DidReloadScripts]
public static void Verify()
{
if (!PlayerSettings.GetScriptingDefineSymbolsForGroup(EditorUserBuildSettings.selectedBuildTargetGroup)
.Contains(Symbol))
{
Debug.Log($"Define Symbol '{Symbol}' was not detected so it has been installed. Unity will recompile.");
InstallDefines();
}
}
public static void AddDefine(string def)
{
StringBuilder sb = new StringBuilder();
sb.Append(PlayerSettings.GetScriptingDefineSymbolsForGroup(EditorUserBuildSettings.selectedBuildTargetGroup));
if (sb.Length == 0) sb.Append(def + ";");
else sb.Append($"{(sb[sb.Length - 1] == ';' ? "" : ";")}{def}");
PlayerSettings.SetScriptingDefineSymbolsForGroup(EditorUserBuildSettings.selectedBuildTargetGroup, sb.ToString());
}
public static void RemoveDefine(string def)
{
PlayerSettings.SetScriptingDefineSymbolsForGroup(EditorUserBuildSettings.selectedBuildTargetGroup,
PlayerSettings.GetScriptingDefineSymbolsForGroup(EditorUserBuildSettings.selectedBuildTargetGroup).Replace(def, ""));
}
}
}
@LaneF
Copy link
Author

LaneF commented Feb 4, 2021

Updated to fix bug and account for cases where no defines initially exist.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment