【Unity】关于VS条件编译符号
写在前面
- 起因:我在回顾LuaFramework_UGUI(作者Jarjin Lee)代码时,看到了C#代码中的条件编译符号,比如下图的ASYNC_MODE。虽然字面上知道是什么意思,但我对VS的条件编译符号其实不太清楚,所以查了下资料,写下此博文作为记录。

- 与正文无关,但或许会用到的参考资料:
VS条件编译符号
在VS里
怎么加
- 以VS工程TestMisc为例,打开项目属性面板,如下图(项目->TestMisc属性)。

打开项目属性面板
- 在项目属性面板的“生成”页下,选择条件编译符号所在“配置”,添加或编辑要用的条件编译符号,修改完按Ctrl+s保存。如下图,我在名为“Debug”的配置下,新加了一个条件编译符号aaa。如果切换到其他“配置”(比如切换到“Release”配置),是不能看到条件编译符号aaa的。

怎么用
- 作为对比,我在配置管理器中新建了一个名为“Local”的配置,具体操作如下:

打开配置管理器

新建配置

新配置起名为Local
- 按前面的方法,我在Local配置下新加了一个名为bbb的条件编译符号。

- 在主程序里,我加入以下测试代码,测试在Local配置下,和在Debug配置下的打印情况。
static void Main(string[] args)
{ #if aaa
Console.WriteLine("this is aaa");
#endif #if bbb
Console.WriteLine("this is bbb");
#endif Console.ReadLine(); }
测试结果:在Debug配置下,只能看到aaa的打印;在Local配置下,只能看到bbb的打印。

Debug配置下,只能看到aaa的打印

Local配置下,只能看到bbb的打印
- 显然,条件编译符号只能在指定配置下使用,它们的触发条件都是true(就是都能用的意思)。
在Unity里
怎么加
- 在Unity里,如果按上面操作来加条件编译符号是无效的,再次打开VS会发现恢复默认值。官网有介绍加在哪里,即PlayerSettings面板Scripting Define Symbols栏,即下图橙框处,这里我加的是ZZZ。相关代码是PlayerSettings.SetScriptingDefineSymbolsForGroup和PlayerSettings.GetScriptingDefineSymbolsForGroup。

怎么用
- 加完即可在代码中使用条件编译符号。
【Unity】关于VS条件编译符号的更多相关文章
- c#定义全局条件编译符号
在"工程"上单机右键,"属性"--->"生成"--->"条件编译符号"后边的输入框中,输入自定义的条件编译变 ...
- 在 Roslyn 分析语法树时添加条件编译符号的支持
我们在代码中会写 #if DEBUG 或者 [Conditional("DEBUG")] 来使用已经定义好的条件编译符号.而定义条件编译符号可以在代码中使用 #define WAL ...
- .NET/C# 项目如何优雅地设置条件编译符号?
条件编译符号指的是 Conditional Compilation Symbols.你可以在 Visual Studio 的项目属性中设置,也可以直接在项目文件中写入 DefineConstants ...
- C# 中的#if、#elif、#else、#endif等条件编译符号 (转载)
这些是C#中的条件编译符号.这些指令我在项目中遇到过,查过网络,问过人(当然,既不认识大牛,也不认识小牛,所以没什么收获).今天翻看一本资料,有提到这个方面的东西,所以写下来和能看到这篇文章的人一起学 ...
- C# 中的#if、#elif、#else、#endif等条件编译符号
C#编译器遇到一个由#if和#endif包围起来的语句块时,会检查#if后面的符号是否已经被定义了,如果已经被定义,那么才会编译语句块之间的代码.而定义一个可以被#if测试的符号需要事先用#defin ...
- 把现有Unity3d游戏向Windows Phone 8.1移植(基础)
最近在将一款现有的游戏向Windows Phone平台移植,暂时完成了一个小阶段,做一个总结. 开发环境: Windows 8.1 系统及以上,愿意的话,用Windows 10 尝鲜也可以. 微软账号 ...
- 使用C#的Conditional特性与Unity编辑器宏命令做条件编译
概要 在传统的C#项目中,用Conditional特性做条件编译时,需要在Visual Studio中项目的属性里添加上条件编译符号,用法参考这篇文章. 而在Unity项目中,条件编译符号需要在Uni ...
- C# 条件编译
本文导读: C#的预处理器指令从来不会转化为可执行代码的命令,但是会影响编译过程的各个方面,常用的预处理器指令有#define.#undef.#if,#elif,#else和#endif等等,下面介绍 ...
- C#-#define条件编译
本文导读: C#的预处理器指令从来不会转化为可执行代码的命令,但是会影响编译过程的各个方面,常用的预处理器指令有#define.#undef.#if,#elif,#else和#endif等等,下面介绍 ...
- C# 条件编译备忘
第一步:配置管理器中新建解决方案配置 第二步:定义条件编译符号: 第三步:在代码中使用自定义的条件编译 #if CustomDebug Console.WriteLine("dsads&qu ...
随机推荐
- 修改mysql多个表的相同字段为同一值内容
mysql将所有数据库的表的相同字段更新为某一值 1.创建存储过程函数名为:proc_update_client_id CREATE PROCEDURE `proc_update_client_id` ...
- C# 开源NuGet插件
ExcelDataReader 开源免费,Excel读取插件 GitHub - ExcelDataReader/ExcelDataReader: Lightweight and fast libra ...
- 学习Anaconda,jupyter notebook
20200210,理解了jupyter在anaconda中的意义,vs code觉得对我这个初学者来讲,更容易使用,pycharm虽然破解安装了,但是感觉不太好用,随后再说 20200211, jup ...
- c# TPL中的数据竞争-Data Race
例一: Parallel.For(1, arraySize, i => { ary[i] = ary[i] + ary[i - 1]; });如下: object _lock = new obj ...
- 2022-3-11内部群每日三题-清辉PMP
1.供应商通知项目经理可能延迟交付一个模块.项目经理应该怎么做? A.立即通知相关方. B.通过增加额外的天数来修改项目管理计划,并记录它们对项目时间的影响. C.审查风险管理计划以评估风险,然后通知 ...
- vue点击遮罩层阴影区域隐藏
<div class="overlay" v-if="mask" @click="closeMaskTap($event)"> ...
- [JSOI2014]宅男计划
Description: 外卖店一共有N种食物,分别有1到N编号.第i种食物有固定的价钱Pi和保质期Si.第i种食物会在Si天后过期.JYY是不会吃过期食物的. 比如JYY如果今天点了一份保质期为1天 ...
- Ajax同步和异步的区别,如何解决跨域的问题
同步的概念应该是来自于OS中关于同步的概念:不同进程为协同完成某项工作而在先后次序上调整(通过阻塞,唤醒等方式),同步强调的是顺序性,谁先谁后,异步则不存在这种顺序性. 同步:浏览器访问服务器请求,用 ...
- Qt实现collapsePanel(折叠)功能
实践过程中,看到C#实现的CollapsePanel功能,比一般的TabWidget更加直观,充分利用了页面空间,遂感到很有兴趣,也查阅了很多资料搜索Qt在这方面的实现. 目前来说,比较常见的作法就是 ...
- UTT艾泰路由器默认口令(admin/admin)
网络空间资产搜索: 登陆弱口令:admin/****** 登陆成功 End!!!