zl程序教程

您现在的位置是:首页 >  工具

当前栏目

Unity3d 编辑器(UNITY_EDITOR)最新全平台编译(#define 指令) 2021用于系统平台判定和(U3d)版本

编辑器平台系统 版本 编译 最新 Unity 2021
2023-09-27 14:27:29 时间

相关编译

Unity 的__平台相关的编译 (Platform Dependent Compilation)__ 功能包括一些预处理器指令,可让您对脚本进行分区,从而为受支持平台之一专门编译和执行一段代码。

您可以在 Unity Editor 中运行此代码,这样便可专门为目标平台编译代码并在 Editor 中对其进行测试。

最新#define指令

Unity 最新支持(2021.1)支持对脚本使用的平台 #define 指令如下:

在这里插入图片描述

UNITY_EDITOR 在使用了Editor后常常需要的判定:

#if UNITY_EDITOR
[ExecuteInEditMode]
[CustomEditor(typeof(Tscls))]
public class TsclsEditor : Editor
{
}
# endif

不然打包时会报错。

UNITY_IPHONE已弃用,用 UNITY_IOS替代。

使用样例代码

# if UNITY_EDITOR
    Debug.Log("Unity Editor");

# elif UNITY_IOS
    Debug.Log("Unity iPhone");

# else
    Debug.Log("Any other platform");

# endif

Unity3d 版本判定

可用代码判定所使用的Unity3d Editor 版本。 如果版本号为 X.Y.Z__(例如,2.6.0),Unity 将使用以下格式公开三个全局 #define 指令:__UNITY_X、UNITY_X_Y 和 UNITY_X_Y_Z。

下面是 Unity 2019.4.14 版本的 #define 指令示例:

在这里插入图片描述

选择性编译代码

从Unity 5.3.4开始,你可以根据Unity的早期版本选择性地编译代码,以编译或执行给定的代码部分。给定与上面(X.Y)相同的版本格式,Unity公开了一个全局#define格式为UNITY_X_Y_OR_NEWER,可以在这使用。

在这里插入图片描述

可使用 DEVELOPMENT_BUILD #define 来确定脚本是否正在启用了“Development Build”选项的情况下构建的播放器中运行。
还可根据脚本后端有选择地编译代码。

平台自定义 #define 指令

您也可以向内置的 #define 指令集合中添加您自己的指令。打开 Player 设置的 Other Settings 面板,并导航到 Scripting Define Symbols 文本框。
在这里插入图片描述

输入要为该特定平台定义的符号名称,以分号分隔。随后可以将这些符号用作 #if 指令中的条件,就像内置条件一样。

全局自定义 #define 指令

您可以定义自己的预处理器指令来控制在编译时包含的代码。为此,必须将包含额外指令的文本文件添加到 Assets 文件夹。文件名取决于您使用的语言。扩展名为 .rsp

C#(播放器和 Editor 脚本) <项目路径>/Assets/mcs.rsp
举例来说,如果在 mcs.rsp 文件中包含单行 -define:UNITY_DEBUG,则 #define 指令 UNITY_DEBUG 将作为 C# 脚本的全局 #define 指令存在,但 Editor 脚本除外。

每次对 .rsp 文件进行更改时,都需要重新编译才能使更改生效。可通过更新或重新导入单个脚本(.js 或 .cs)文件来完成此操作。

注意:如果你想只修改全局的#define指令,请在播放器设置中使用脚本定义符号,因为这涵盖了所有的编译器。如果你选择.rsp文件,你需要为Unity使用的每个编译器提供一个文件。

包含在 Editor 安装文件夹中的 mcs 应用程序的“Help”部分中描述了 .rsp 文件的使用方法。可通过运行 mcs -help 获取更多信息。

请注意,.rsp 文件需要与正在调用的编译器匹配。例如:

当针对 .NET 3.5 Equivalent(已弃用)脚本运行时版本时,mcs 与 mcs.rsp 一起使用,
以.NET 4为目标。等效的脚本运行时版本编译器,csc与csc.rsp一起使用。