Unity 解决添加自定义宏不生效的问题

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文件才生效。

重新生成的方法:

  1. 在VS中重新生成解决方案(我使用的VS 2019还是不生效,在Unity里点下面这个按钮才生效)

2、我用的是Rider,可以在Unity里重新生成。

3、重启Unity工程

猜你喜欢

转载自blog.csdn.net/weixin_42396898/article/details/129557064