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

2023-11-04

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工程

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Unity 解决添加自定义宏不生效的问题 的相关文章

随机推荐

  • UBT11:ubuntu安装IDEA2020.1

    11 1 简介 linux上的IDEA并不需要安装 只要解压即可运行 这就好像win上面的绿色软件 所以 我们需要把idea解压到一个合适的位置 然后创建桌面快捷方式 即可完成安装 此方法应该适用于整个JetBrains的软件 11 2 环
  • mysql8 window安装,链式复制,双主复制,数据库的负载均衡

    by xuejianxinokok 163 com 2021年3月25日 周四 15 06 43 1 下载地址 https dev mysql com downloads mysql 2 下载文件名称为 mysql 8 0 23 winx6
  • 2022年“网络安全”赛项海南省赛选拔赛 任务书

    2022年 网络安全 赛项海南省赛选拔赛 任务书 一 竞赛时间 共计6小时 二 A模块基础设施设置 安全加固 350分 一 项目和任务描述 假定你是某企业的网络安全工程师 对于企业的服务器系统 根据任务要求确保各服务正常运行 并通过综合运用
  • Linux系统安装R语言

    R语言是一款开源 免费的用于绘图和统计分析的语言和集成环境 该语言使用起来十分方便 提供了许多扩展包供下载使用 目前网上一些linux安装R语言的教程太过繁琐 其实 在ubuntu linux 系统下利用其提供的apt get命令可以方便的
  • macbook pro 散热方案,温度仅29度

    结论 Macbook Pro 13 3 寸 2017 控制住温度 性能飞起 5年前散热不好时 容易触发 CPU 降频 一 需求 长时间满载运行不降频 控制住温度 控制住散热噪音 二 尝试过的散热方案 散热方案 说明 最低温度 满载温度 一
  • 华为云云耀云服务器L实例评测

    前言 在上篇文章 华为云云耀云服务器L实例评测 快速部署MySQL使用指南 中 我们已经用 华为云云耀云服务器L实例 在命令行窗口内完成了MySQL的部署并简单使用 但是后台有小伙伴跟我留言说 能不能用 华为云云耀云服务器L实例 来实现个简
  • 联盛德W800开发板

    目录 W800 芯片介绍 W800开发板 主要接口如下 1 概述 2 准备工作 3 SDK目录结构如下 4 W800编译固件编译 4 1 安装MSYS到本地 4 2增加国内软件更新源 编辑4 3下载工具链 4 5 make工具链配置 5 M
  • 浪潮服务器不显示光驱,电脑不从光驱启动怎么办?我是浪潮品牌的机子。

    在DOS下可以装系统的 WIN98启动软盘引导系统为例在DOS下安装XP 为提高安装速度 需要在启动盘中添加smartdrv exe磁盘高速缓存 cache 程序 并且在安装之前运行该程序 smartdrv是一个磁盘高速缓存程序 称之为sm
  • React事件处理方法

    一 注意事项 1 React元素的事件处理和Dom元素很相似 但是有一点语法的不同 2 React事件的命名采用小驼峰的命名方式 而不是纯小写 camelCase 3 使用JSX语法时你需要传入一个函数作为事件处理函数 而不是一个字符串 例
  • 【CVPR 2022 多模态融合(有3D检测)】Multimodal Token Fusion for Vision Transformers

    Multimodal Token Fusion for Vision Transformers 论文简介 具体实现 Alignment agnostic fusion Alignment aware fusion Multimodal To
  • 如何快速的只取出列表中的数字

    my list a a a 1 2 3 4 5 A B C 提取出 12345 方法一 使用try方法测试 isalnum 判断是否是字母 my list a a a 1 2 3 4 5 A B C str1 for i in my lis
  • Elasticsearch 在Windows上安装和启动

    1 安装JDK 至少1 8以上 2 下载和解压缩Elasticsearch安装包 下载地址 https www elastic co cn downloads 3 启动Elasticsearch bin elasticsearch bat
  • H5存储方案——cookie、session、SessionStorage和LocalStorage

    1 简述 浏览器端存储网页中的数据有三种存储方案 cookie SessionStorage和LocalStorage 其中 SessionStorage和LocalStorage是H5新增的存储方案 而cookie经常同session一并
  • 数据结构之链表详解(2)——双向链表

    目录 前言 一 双向链表 A 双向链表的含义 B 双向链表的实现 1 双向链表的结构 2 链表的初始化 初始化图解 函数代码 3 动态申请节点函数 函数代码 4 打印双向链表函数 函数代码 5 尾部插入节点 图解 函数代码 测试 6 头插函
  • 关于指针的面试题,指向字符串和字符数组的单指针,二级指针,三级指针的使用。

    int a 3 4 0 printf d n sizeof a 48 printf d n sizeof a 0 0 4 printf d n sizeof a 0 16 printf d n sizeof a 0 1 4 地址 print
  • tkinter运行时卡住,点击按钮运行任务时界面卡住

    在tkinter中添加按钮 点击按钮在程序运行过程中tkinter界面会卡住 当运行完按钮任务 就好了 懒得自己写 在百度一搜整整一页都是一样的答案 看着一点都不方便 还得是自己动手丰衣足食 这种情况下 应该将耗时操作放在一个独立的线程中进
  • Vue.js 2.0 教程

    Vue js 介绍 Vue js 读音 vju 类似于 view 是一套构建用户界面的渐进式框架 Vue js 安装 全局安装 vue cli npm install global vue cli 创建一个基于 webpack 模板的新项目
  • linux idea 快捷键,Linux 下 IDEA 的 Ctrl+Alt+S

    前言 这是个困扰我一年多的问题 今天终于解决了 起因 一年前将主系统换成 Arch Linux 后 其他一切正常就是 IDEA 的打开设置的快捷键 ctrl alt s 失效 让我很是头疼 虽然不是很重要 但是对于我这种强迫症来说别提多难受
  • 大数据与云计算的关系

    就目前而言 要想发展好大数据 就离不开云计算 我们在进行大数据的时候同样也是离不开云计算的 于是很多人觉得大数据与云计算都有一定的关系 那么大家知道不知道大数据的云计算有什么关系呢 我们在这篇文章中给大家带来这个问题的答案 首先我们说一下大
  • Unity 解决添加自定义宏不生效的问题

    Unity版本 2020 3 平台 Android 问题描述 执行代码添加 删除宏定义 或者直接在PlayerSetting面板里直接添加 删除宏 通过if判断 获取的还是之前的 新增的宏并没有生效 代码添加 删除宏定义 添加宏定义 pri