Files
Cielonos/Assets/OtherPlugins/Le Tai's Asset/Common/Editor/EditorUtils.cs
SoulliesOfficial f7af60351b 阶段性完成
2025-12-08 05:27:53 -05:00

68 lines
2.4 KiB
C#

// Copyright (c) Le Loc Tai <leloctai.com> . All rights reserved. Do not redistribute.
using System.Collections.Generic;
using System.Linq;
using UnityEditor;
using UnityEditor.Build;
namespace LeTai.Common.Editor
{
public static class EditorUtils
{
public static List<string> GetDefines(BuildTarget buildTarget = BuildTarget.NoTarget)
{
if (buildTarget == BuildTarget.NoTarget)
buildTarget = EditorUserBuildSettings.activeBuildTarget;
var currentGroup = BuildPipeline.GetBuildTargetGroup(buildTarget);
string definesStr;
#if UNITY_2021_2_OR_NEWER
var namedBuildTarget = NamedBuildTarget.FromBuildTargetGroup(currentGroup);
definesStr = PlayerSettings.GetScriptingDefineSymbols(namedBuildTarget);
#else
definesStr = PlayerSettings.GetScriptingDefineSymbolsForGroup(currentGroup);
#endif
return definesStr.Split(';').ToList();
}
public static void SetDefines(IEnumerable<string> defines, BuildTarget buildTarget = BuildTarget.NoTarget)
{
if (buildTarget == BuildTarget.NoTarget)
buildTarget = EditorUserBuildSettings.activeBuildTarget;
var newDefinesStr = string.Join(";", defines);
var currentGroup = BuildPipeline.GetBuildTargetGroup(buildTarget);
#if UNITY_2021_2_OR_NEWER
var namedBuildTarget = NamedBuildTarget.FromBuildTargetGroup(currentGroup);
PlayerSettings.SetScriptingDefineSymbols(namedBuildTarget, newDefinesStr);
#else
PlayerSettings.SetScriptingDefineSymbolsForGroup(currentGroup, newDefinesStr);
#endif
}
public static void AddDefines(HashSet<string> toAdd, BuildTarget buildTarget = BuildTarget.NoTarget)
{
if (buildTarget == BuildTarget.NoTarget)
buildTarget = EditorUserBuildSettings.activeBuildTarget;
var defines = GetDefines(buildTarget);
var missing = toAdd.Except(defines).ToList();
defines.AddRange(missing);
if (missing.Count > 0)
SetDefines(defines, buildTarget);
}
public static void RemoveDefines(HashSet<string> toRemove, BuildTarget buildTarget = BuildTarget.NoTarget)
{
if (buildTarget == BuildTarget.NoTarget)
buildTarget = EditorUserBuildSettings.activeBuildTarget;
var defines = GetDefines(buildTarget);
var removed = defines.Except(toRemove).ToList();
if (removed.Count < defines.Count)
SetDefines(removed, buildTarget);
}
}
}