Skip to content

Instantly share code, notes, and snippets.

@LaneF
Last active March 30, 2025 16:46
Show Gist options
  • 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);
}
public static void InstallDefines()
{
RemoveDefine(Symbol);
AddDefine(Symbol);
}
[UnityEditor.Callbacks.DidReloadScripts]
public static void Verify()
{
NamedBuildTarget bt = NamedBuildTarget.FromBuildTargetGroup(EditorUserBuildSettings.selectedBuildTargetGroup);
string symbols = PlayerSettings.GetScriptingDefineSymbols(bt);
if (symbols.Contains(Symbol)) return;
Debug.Log($"Define Symbol '{Symbol}' was not detected so it has been installed. Unity will recompile.");
InstallDefines();
}
public static void AddDefine(string def)
{
NamedBuildTarget bt = NamedBuildTarget.FromBuildTargetGroup(EditorUserBuildSettings.selectedBuildTargetGroup);
string symbols = PlayerSettings.GetScriptingDefineSymbols(bt);
StringBuilder sb = new();
sb.Append(symbols);
if (sb.Length == 0) sb.Append(def + ";");
else sb.Append($"{(sb[^1] == ';' ? "" : ";")}{def}");
PlayerSettings.SetScriptingDefineSymbols(bt, sb.ToString());
}
public static void RemoveDefine(string def)
{
NamedBuildTarget bt = NamedBuildTarget.FromBuildTargetGroup(EditorUserBuildSettings.selectedBuildTargetGroup);
string symbols = PlayerSettings.GetScriptingDefineSymbols(bt);
PlayerSettings.SetScriptingDefineSymbols(bt, symbols.Replace(def, ""));
}
}
}
@LaneF
Copy link
Author

LaneF commented Feb 4, 2021

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

@LaneF
Copy link
Author

LaneF commented Mar 30, 2025

Updated for Unity 6

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