Unity版本
2020.3
平台
Android
问题描述
执行代码添加/删除宏定义,或者直接在PlayerSetting面板里直接添加/删除宏,通过if判断,获取的还是之前的,新增的宏并没有生效。
代码添加/删除宏定义
// 添加宏定义
private static void AddSymbol(string newSymbol)
{
BuildTargetGroup buildTargetGroup = EditorUserBuildSettings.selectedBuildTargetGroup;
Debug.Log("当前平台:" + buildTargetGroup);
if (buildTargetGroup == BuildTargetGroup.Unknown)
{
return;
}
var symbols = PlayerSettings.GetScriptingDefineSymbolsForGroup(buildTargetGroup).Trim();
Debug.Log("当前平台的ScriptingDefineSymbols:" + symbols);
var defines = symbols.Split(';');
if (defines.Contains(newSymbol) == false)
{
if (symbols.EndsWith(";", StringComparison.InvariantCulture) == false)
{
symbols += ";";
}
symbols += newSymbol;
PlayerSettings.SetScriptingDefineSymbolsForGroup(buildTargetGroup, symbols);
//AssetDatabase.SaveAssets();
UnityEditor.Compilation.CompilationPipeline.RequestScriptCompilation();
Debug.Log($"向当前平台的ScriptingDefineSymbols中添加了:{newSymbol}");
}
else
{
Debug.Log($"当前平台的ScriptingDefineSymbols中已包含{newSymbol}, 不可再添加!");
}
}
// 移除宏定义
private static void RemoveSymbol(string symbol)
{
BuildTargetGroup buildTargetGroup = EditorUserBuildSettings.selectedBuildTargetGroup;
Debug.Log("当前平台:" + buildTargetGroup);
if (buildTargetGroup == BuildTargetGroup.Unknown)
{
return;
}
var symbols = PlayerSettings.GetScriptingDefineSymbolsForGroup(buildTargetGroup).Trim();
Debug.Log("当前平台的ScriptingDefineSymbols:" + symbols);
var defines = symbols.Split(';').ToList();
if (defines.Contains(symbol))
{
defines.Remove(symbol);
string newSymbol = defines.Aggregate((a, b) => a + ";" + b);
PlayerSettings.SetScriptingDefineSymbolsForGroup(buildTargetGroup, newSymbol);
//AssetDatabase.SaveAssets();
UnityEditor.Compilation.CompilationPipeline.RequestScriptCompilation();
Debug.Log($"向当前平台的ScriptingDefineSymbols中移除了:{symbol}");
}
else
{
Debug.Log($"当前平台的ScriptingDefineSymbols中不存在{symbol}, 不可移除!");
}
}
直接在PlayerSetting面板里操作
结果:
这些都是在Editor下操作的, 执行过AssetDatabase.Refresh();和AssetDatabase.SaveAssets()
也没有作用。
但是打安卓apk成功后新添加的宏就会生效。
解决方案
全局搜索宏之后,在.csproj找到了,打开工程看到该文件在打包时更新了,由此判断需要重新生
成.cspro文件才生效。
重新生成的方法:
在VS中重新生成解决方案(我使用的VS 2019还是不生效,在Unity里点下面这个按钮才生效)
2、我用的是Rider,可以在Unity里重新生成。
3、重启Unity工程