最近在用腾讯测试工具GAutomator测试Unity项目时,遇到要添加WETEST_SDK宏定义,由于还是Unity小白一个,不知道如何添加宏定义,特此学习。
转载出处:https://www.cnblogs.com/CodeGize/p/7853121.html
在Unity开发中,可以使用预编译条件,宏定义。比如在一个cs文件中

#define DevTestusing UnityEngine;namespace Test
{public class Dev : MonoBehaviour                                      {public void Start(){
#if DevTestDoSomeThing();
#else DoSomeThing2();
#endif}private void DoSomeThing(){}private void DoSomeThing2(){}}
}

在文件的首行定义一个局部宏,仅限在本文件中有效。然后使用#if的方式判断是否存在这个宏,如果存在则运行DoSomeThing1,否则运行DoSomeThing2。注意编译时,会把不需要运行的代码移除掉。所以编译出来的代码中Start函数中不会出现DoSomeThing2。
除了这种我们定义的局部宏,还有一种是全局宏,在整个工程中都生效。比如

#if UNITY_EDITORDoSomething();#elif UNITY_ANDROIDDoSomething2();#endif

表示分别在编辑器环境下和android环境下做某些处理。这个宏是Unity提供的全局宏。

Unity中的宏

这类的宏定义有以下几种

平台类宏

由于各个平台的实现和接口都不同,所以很多时候需要根据平台来做。Unity提供了覆盖了大部分设备的宏定义。

  • UNITY_EDITOR #define directive for calling Unity Editor scripts from your game code.
  • UNITY_EDITOR_WIN #define directive for Editor code on Windows.
  • UNITY_EDITOR_OSX #define directive for Editor code on Mac OS X.
  • UNITY_STANDALONE_OSX #define directive for compiling/executing code specifically for Mac OS X (including Universal, PPC and Intel architectures).
  • UNITY_STANDALONE_WIN #define directive for compiling/executing code specifically for Windows standalone applications.
  • UNITY_STANDALONE_LINUX #define directive for compiling/executing code specifically for Linux standalone applications.
  • UNITY_STANDALONE #define directive for compiling/executing code for any standalone platform (Mac OS X, Windows or Linux).
  • UNITY_WII #define directive for compiling/executing code for the Wii console.
  • UNITY_IOS #define directive for compiling/executing code for the iOS platform.
  • UNITY_IPHONE Deprecated. Use UNITY_IOS instead.
  • UNITY_ANDROID #define directive for the Android platform.
  • UNITY_PS4 #define directive for running PlayStation 4 code.
  • UNITY_SAMSUNGTV #define directive for executing Samsung TV code.
  • UNITY_XBOXONE #define directive for executing Xbox One code.
  • UNITY_TIZEN #define directive for the Tizen platform.
  • UNITY_TVOS #define directive for the Apple TV platform.
  • UNITY_WSA #define directive for Universal Windows
    Platform. Additionally, NETFX_CORE is defined when compiling C# files against .NET Core and using .NET scripting backend.
  • UNITY_WSA_10_0 #define directive for Universal Windows Platform. Additionally WINDOWS_UWP is defined when compiling C# files against .NET Core.
  • UNITY_WINRT Same as UNITY_WSA.
  • UNITY_WINRT_10_0 Equivalent to UNITY_WSA_10_0
  • UNITY_WEBGL #define directive for WebGL.
  • UNITY_FACEBOOK #define directive for the Facebook platform (WebGL or Windows standalone).
  • UNITY_ADS #define directive for calling Unity Ads methods from your game code. Version 5.2 and above.
  • UNITY_ANALYTICS #define directive for calling Unity Analytics methods from your game code. Version 5.2 and above.
  • UNITY_ASSERTIONS #define directive for assertions control process.

Unity版本类宏

由于Unity每个版本的API可能不同,而项目成员使用的是不同版本的Unity。这时候就需要根据版本分别实现。
Unity提供了2.6.0之后的大部分宏定义,形如UNITY_X或者UNITY_X_Y或者UNITY_X_Y_Z,比如UNITY_2017_1_0表示Unity2017.1.0版本。注意Unity并没有提供patch版本的宏定义,后面会说明如何实现自定义的宏。

代码编译类宏

  • ENABLE_MONO Scripting backend #define for Mono.
  • ENABLE_IL2CPP Scripting backend #define for IL2CPP.
  • ENABLE_DOTNET Scripting backend #define for .NET.
  • NETFX_CORE Defined when building scripts against .NET Core class libraries on .NET.
  • NET_2_0 Defined when building scripts against .NET 2.0 API compatibility level on Mono and IL2CPP.
  • NET_2_0_SUBSET Defined when building scripts against .NET 2.0 Subset API compatibility level on Mono and IL2CPP.
  • NET_4_6 Defined when building scripts against .NET 4.6 API compatibility level on Mono and IL2CPP.
  • ENABLE_WINMD_SUPPORT Defined when Windows Runtime support is enabled on IL2CPP and .NET. See Windows Runtime Support for more details.

自定义宏

在C#工程中,我们是可以通过Project上的设置类定义自己的宏。如下图,通过在Project的属性页面中可以配置宏。

但是在Unity生成的工程中是无法打开Project的属性配置界面。因此无法在C#工程中进行配置。

使用PlayerSetting自定义宏

要进行自定义的宏,需要在Unity的PlayerSetting中进行设置,多个宏定义间用分号“;”隔开。设置的数据会被存储在项目的ProjectSettings/ProjectSettings.asset文件中。

由于ProjectSettings/ProjectSettings.asset一般会被纳入版本管理,所以项目的全体成员一般都会同步宏定义。但是有时候存在单独的某些成员,需要自己单独的自定义宏的情况。

特殊案例

在Unity2017.2.0f3(f3版本)和Unity2017.2.0p2(p2版本)这2个版本中,由于某些API接口的变更,p2版本书写的代码就在f3版本中报错。f3版本是项目大多数成员使用的版本,p2版本为少数人使用的版本。但是由于Unity版本的版本宏定义中只有UNITY_2017_2_0,无法区分是f3版本和p2版本,所以只能使用自定义宏。但是由于PlayerSetting会被同步,所以又会造成全部开启宏的情况,f3版本和p2版本依然无法区分。

使用RSP文件定义宏

Unity提供一个方法,可以用一个rsp文件来定义宏。然后将rsp文件不要纳入版本库。这样就可以解决特殊案例中问题。
一般来说开发Unity用的是C#,那么这个rsp文件必须命名为mcs.rsp并且放在Assets目录下。使用rsp文件定义宏,只需要每一行输入一个“-define:<宏名称>”即可,比如这里随意增加2个宏定义:
-define:DevTest
-define:UNITY_2017_2_0_P2
输入完成后保存退出,在Unity中对任意一个代码reimort一次,使Unity重新编译。关闭并重新打开代码编辑器就会看到这个DevTest的全局宏已经生效。

个人问题解决

利用Notepad建立mcs.rsp文件,文件内添加宏定义:
-define: WETEST_SDK
放置在Assets目录下,关闭代码编辑器并重新打开后就生效啦!!

Unity宏 + RSP文件定义宏相关推荐

  1. Nature子刊:HUMAnN2实现宏基因组和宏转录组种水平功能组成分析

    HUMAnN2实现宏基因组和宏转录组种水平功能组成分析 Species-level functional profiling of metagenomes and metatranscriptomes ...

  2. Nature Method:HUMAnN2实现宏基因组和宏转录组种水平功能组成分析

    文章目录 HUMAnN2实现宏基因组和宏转录组种水平功能组成分析 简介 热心肠日报导读 摘要 主要图表 图1. HUMAnN2分层式搜索在同类软件中准确率最高 图2. 人类核心微生物组的贡献多样性 图 ...

  3. offsetof宏和container_of宏

    文章目录 1 offsetof宏 1.1 宏的作用 1.2 编译器做了什么 2 container_of宏 2.1 ({})是什么? 2.2 typeof 2.3 原理分析 1 offsetof宏 1 ...

  4. 自己实现了一个C语言例程,加深对宏、大小端、typeof宏、offsetof宏、指针变量、结构体、联合体的理解

    如题所述,最近时间在复习C语言.自己实现了一个C语言例程,以加深对宏.大小端.typeof宏.offsetof宏.指针变量.结构体.联合体的理解.关于细分知识后续有空再填充- swap宏的使用: 对应 ...

  5. Excel VBA(宏):添加宏

    写在前面:1.编写宏,打开VBA,双击ThisWorkbook对当前工作薄进行编写宏:双击Sheet1,对整个sheet编写宏: 或者创建模块,在模块里,编写.调试代码. 打开VBA的方法见第一讲,结 ...

  6. Java中的宏变量,宏替换详解。

    转载自 Java中的宏变量,宏替换详解. 群友在微信群讨论的一个话题,有点意思,特拿出来分享一下. 输出true false 来看下面这段程序,和群友分享的大致一样. public static vo ...

  7. c语言 宏定义 去除宏定义_如何检查是否在C中定义了宏?

    c语言 宏定义 去除宏定义 To check whether a Macro is defined or not in C language – we use #ifdef preprocessor ...

  8. java supplier_现代化的 Java (二十一)——宏和生成宏

    一般来说,我们会避免在应用项目中编写宏,无论是 c 那种比较简单的宏,还是rust 那种约束明确的,或者 Lisp 那种功能比较完善的宏机制.这主要是因为宏写起来比较困难,容易写错.项目开发通常来说有 ...

  9. 宏基因组应用_宏基因组及宏转录组测序揭示极端环境微生物的生态学作用

    中山大学与千年基因合作应用宏基因组及宏转录组测序对极端环境酸性矿山废水(Acid mine drainage, AMD)中的微生物群落进行研究,相关成果于11月7日发表于The ISME Journa ...

最新文章

  1. 一文了解四种软件架构:Serverless架构、微服务架构、分布式架构、单体架构
  2. Android 中文API (91) —— GestureDetector
  3. java对cookie的操作_java对cookie的操作
  4. Golang 垃圾回收机制
  5. 迭代器 java_Java设计模式8:迭代器模式
  6. abb变频器正反转切换参数_变频器自动节能功能与电动机正反转图解
  7. 摄像头防水性能测试软件,手机摄像头防水测试/气密性检测方法分享
  8. Android 使用Vector XML文件创建矢量图片资源
  9. 使用am instrument验证CTS问题
  10. android l usb调试,你居然还不会手机usb调试?5个方法,让你轻松学会设置!
  11. 双击jar包无法运行
  12. BZOJ3202 [Sdoi2013]项链
  13. 线性代数学习笔记——第三十九讲——直线与平面的位置关系
  14. 《Programming in Lua 3》读书笔记(十)
  15. [导入]PSP 经典游戏合集
  16. python编程课程-天津Python编程课程
  17. 磁力搜 For magnetW常见问题
  18. 微信支付0.2%费率特约商户号,一起了解一下。
  19. 关于友盟9.3.8版本集成QQ无效问题
  20. 物理内存是什么是计算机的显卡内存吗,物理内存可用数_可用内存和物理内存是什么意思?_可用物理内存...

热门文章

  1. 【华为OD机试真题 Java】最左侧冗余覆盖子串(100%通过+全网最详细注释)
  2. UnfamiliarWords-2
  3. 福建高职单招计算机基础知识,2015年福建省高职单招计算机专业模拟试卷
  4. 网店管理细节流程问题
  5. Java体系化学习路线图,带走不谢!
  6. 微赞php.ini_微赞微擎二开笔记开发手册之模块开发指南(九)
  7. SpringBoot第 14 讲:SpringBoot+MyBatisPlus
  8. Thread地址(IPv6 and RLOC16)
  9. mysql 22001_SQLException: #22001你知道这个错误码吗
  10. Scratch《跳一跳》游戏源码.sb