版本:2022.3
语言:英语
条件编译
程序集定义

自定义脚本符号

C#指令 允许您根据是否定义了某些 脚本符号,有选择地包括或排除编译中的代码。

除了内置的脚本符号(与平台编辑器版本和其他其他杂项系统环境场景相关)之外,您还可以指定自己的自定义脚本符号,无论是通过编辑器 用户界面(用户界面)允许用户与您的应用程序进行交互。Unity目前支持三个UI系统。 更多信息
词汇表中查看
,通过脚本来实现,或者通过资产文件。

通过编辑器设置脚本符号

要使用编辑器设置或删除定义指令,请转到 编辑 > 项目设置 > 播放器。然后在 其他设置 面板中,向下滚动至 脚本编译

The Scripting Define Symbols settings in the Project Settings window. This example shows two custom symbols defined in the list.
项目设置窗口中的脚本定义符号设置。此示例显示了列表中定义的两个自定义符号。

您可以通过使用 +- 按钮,并在字段中输入您的新符号的名称,将您自己的自定义脚本符号添加到 脚本定义符号 列表。选择 应用 后,您的新脚本符号被应用,并且Unity会使用这些新符号重新编译您的项目中的 脚本一段代码,允许您创建自己的组件、触发游戏事件、随时间修改组件属性,并按您喜欢的方式响应用户输入。 更多信息
词汇表中查看

复制定义 按钮将当前的自定义脚本符号集合从列表中复制到剪贴板作为一个分号分隔的值字符串。

通过脚本定义脚本符号

您可以使用以下API来定义脚本符号

为编辑器脚本编译设置脚本符号

如果您需要通过编辑器中的脚本定义脚本符号,从而使您的编辑器脚本受到影响,则必须使用 PlayerSettings.SetScriptingDefineSymbolsForGroup。然而,关于此操作操作有一些重要的细节需要注意。

重要:此方法不会立即生效。从脚本中调用此方法不会立即应用和重新编译您的脚本。要使您的主意根据脚本符号的变化生效,您必须允许控制权返回到编辑器,然后它异步重新加载脚本并根据您的新符号及其所执行的指令重新编译它们。

例如,如果您在编辑器脚本中使用此方法,然后在同一脚本中的下一行立即调用 BuildPipeline.BuildPlayer,那么在那个时刻,Unity仍在使用旧的脚本符号运行您的编辑器脚本,因为它们尚未与新符号一起重新编译。这意味着如果您有作为构建播放器执行的一部分运行的编辑器脚本,它们将使用旧的脚本符号,并且您的播放器可能不会按您期望的方式构建。

批量模式设置脚本符号

上述提到的 Unity 编译异步性质对于编写将在 Unity 编辑器中以批处理模式在持续集成(CI)服务器上运行的编辑器脚本也非常重要。这是因为当编辑器以批处理模式运行时,它会运行“无头软件”,因此没有会因新脚本符号而重新编译的编辑器循环。正因为如此,你不应在批处理模式的 CI 服务器上使用编辑器脚本来设置脚本符号,因为这些脚本不会重新编译,所以它们不会被应用。

相反,如果你需要在批处理模式下运行的编辑器中定义特定符号,你必须确保从开始就使用正确的符号启动编辑器。你可以通过使用下面的方法,指定符号使用 csc.rsp 资产文件而不是使用编辑器脚本来完成。

通过资产文件设置脚本符号

你可以在项目中通过文本资产设置自定义脚本符号。为此,你必须在项目“Assets”文件夹的根目录下添加一个名为 csc.rsp 的定义自定义脚本符号的文本文件。该特殊文件会在 Unity 启动时被读取,并在编译任何代码之前应用。

例如,如果你在 csc.rsp 文件中包含单行 -define:UNITY_DEBUG,则除了编辑器脚本之外,C# 脚本将包含全局定义的脚本符号 UNITY_DEBUG。

每次你更改 .rsp 文件时,都需要重新编译以使其生效。你可以通过更新或重新导入单个脚本文件来完成此操作。

注意:如果你想修改全局脚本符号,请通过 Player SettingsUnity 最终构建的最终游戏的各种特定玩家选项的设置。 更多信息
请查看 术语表
窗口中的 Scripting Define Symbols 来添加它们(如上所述),因为这将涵盖所有编译器。如果你选择 .rsp 文件,则需要为 Unity 使用的每个编译器提供一个文件。

条件编译
程序集定义