Loading... # Unity宏整理 整理一下常用的宏,免得老需要跑去文档查。这里只记录平时用得比较多的。 ## 宏定义 if 的语法 非常简单,直接上例子: ```C# #if UNITY_EDITOR Debug.Log("Unity Editor"); #elif UNITY_IOS Debug.Log("Unity iOS"); #elif UNITY_ANDROID Debug.Log("Unity Android"); #else Debug.Log("Any other platform"); #endif ``` 和平时的 `if` 逻辑差不多,注意一下写法即可。 ## 常用编辑器环境限制相关宏 ### UNITY_EDITOR 此宏修饰的代码只有在编辑器环境下运行和编译,不分是哪个平台的编辑器环境。 ### UNITY_EDITOR_WIN 此宏修饰的代码只有在 Windows 平台下的编辑器环境才会运行/编译。 ### UNITY_EDITOR_OSX 此宏修饰的代码只有在 MacOS 平台下的编辑器环境下才会运行/编译。 ## 运行平台限制相关宏 ### UNITY_STANDALONE_OSX 此宏修饰的代码只有在打包目标平台、运行平台是 MacOS 平台情况下运行/编译。 ### UNITY_STANDALONE_WIN 此宏修饰的代码只有在打包目标平台、运行平台是 Windows 平台情况下运行/编译。 ### UNITY_IOS **注意不要**打成`UNITY_iOS`。限制代码只在打包目标是 iOS 平台的时候编译,只在 iOS 平台运行。 ### UNITY_IPHONE 废弃的宏,取而代之的是 `UNITY_IOS`,效用和 `UNITY_IOS` 一样。 ### UNITY_ANDROID 限制代码只在打包目标是安卓平台的时候编译,只在安卓平台运行。 ### UNITY_64 只有在打包目标平台/运行平台是 64 位 的时候运行/编译。 ## 编辑器版本限制相关宏 这类宏用于限制代码在某个版本的编辑器上才能运行,通常 Unity 版本格式是 `X.Y.Z`,对应的宏是 `UNITY_X`、`UNITY_X_Y`、`UNITY_X_Y_Z`,例如说: ```C# #if UNITY_2019 // do something here // 限制引擎版本为 2019,只要 X 是 2019 的版本都可以执行这个宏修饰的代码 #endif #if UNITY_2019_4 // do something here // 限制引擎版本为 2019.4,只要 X.Y 是 2019.4 的版本都可以执行整个宏修饰的代码 #endif #if UNITY_2019_4_14 // do something here // 限制引擎版本为 2019.4.14,只有 2019.4.14 版本的引擎可以执行 #endif ``` 其他版本的同理,此外还有限制比 `X.Y.Z` 版本新的宏 `UNITY_X_Y_OR_NEWER`,版本号的格式和前面限制版本的宏格式一致,只是后面多了个 `_OR_NEWER`。 ## 编译限制相关的宏 ### ENABLE_MONO 当使用的脚本后端是 Mono 时 Unity 会定义此宏。 ### ENABLE_IL2CPP 当使用的脚本后端时 IL2CPP 时 Unity 会定义此宏。 ### NET_2_0 编译脚本的目标 API 兼容性是 .NET 2.0 的时候 Unity 会定义此宏。 ### NET_2_0_SUBSET 编译脚本的目标 API 兼容性是 .NET 2.0 Subset 的时候 Unity 会定义此宏。 ### NET_LEGACY 编译脚本目标 API 兼容性是 .NET 2.0 或者 .NET 2.0 Subset 的时候 Unity 会定义此宏。 ### NET_4_6 目标 API 兼容性是 .Net 4.x 的时候会定义此宏。 ### NET_STANDARD_2_0 目标兼 API 容性是 .NET Standard 2.0 的时候会定义此宏。 ### NET_STANDARD_2_1 目标兼 API 容性是 .NET Standard 2.1 的时候会定义此宏。 ### NET_STANDARD 目标兼 API 容性是 .NET Standard 2.1 的时候会定义此宏。 ### ENABLE_INPUT_SYSTEM 在 Player Settings 中开启了 Input System 选项时会定义此宏。 ### ENABLE_LEGACY_INPUT_MANAGER 在 Player Settings 中开启了 Input Manager 选项时会定义此宏。 ## 如何自定义宏 ### Player Settings 里面设置 ![20240313114332](https://images-1300215216.cos.ap-guangzhou.myqcloud.com/Blog/20240313114332.png) 将自己想要添加的宏输入到上图中红框内即可。 ### 通过脚本设置 #### PlayerSettings.SetScriptingDefineSymbols 可以在 C# 脚本中调用此函数来设置自定义的宏,此函数定义是: ```C# public static void SetScriptingDefineSymbols(BuildTargetGroup targetGroup, string defines); public static void SetScriptingDefineSymbols(BuildTargetGroup targetGroup, string[] defines); ``` `defines` 要传入的是用分号隔开的宏,例如`XXX;YYY`,或者宏的文本数组。 ## 总结 实际内容很简单,完整的 Unity 内置的宏可以到官方文档去查,这里就不多作介绍了。 ## 参考 1. [Unity 官方文档:Conditional compilation](https://docs.unity3d.com/Manual/PlatformDependentCompilation.html) 2. [PlayerSettings.SetScriptingDefineSymbolsForGroup](https://docs.unity3d.com/ScriptReference/PlayerSettings.SetScriptingDefineSymbolsForGroup.html) 最后修改:2024 年 03 月 13 日 © 允许规范转载 打赏 赞赏作者 支付宝微信 赞 随缘