Unity3D Unity3D :自定义脚本符号 推荐:将NSDT场景编辑器加入你的3D工具链 3D工具集:NSDT简石数字孪生 自定义脚本符号 C# 指令允许您根据是否定义某些脚本符号,有选择地在编译中包含或排除代码。 除了内置脚本符号(与平台、编辑器版本和其他杂项系统环境方案相关)之外,您还可以使用编辑器 UI、脚本或资产文件指定自己的自定义脚本符号。 通过编辑器设置脚本符号 要通过编辑器设置或删除定义指令,请转到>播放器>编辑项目设置。然后在“其他设置”面板中,向下滚动到“脚本编译”。 您可以使用 + 和 - 按钮在“脚本定义符号”列表中添加和删除您自己的自定义脚本符号,然后在字段中键入新符号的名称。选择“应用”时,将应用新的脚本符号,Unity 将使用这些新符号重新编译项目中的脚本。 “复制定义”按钮将列表中的当前自定义脚本符号集作为分号分隔值字符串复制到剪贴板中。 通过脚本定义脚本符号 您可以使用以下 API 定义脚本符号: * PlayerSettings.SetScriptingDefineSymbolsForGroup * BuildPlayerOptions.extraScriptin
Unity3D Unity3D :条件编译 推荐:将NSDT场景编辑器加入你的3D工具链 3D工具集:NSDT简石数字孪生 条件编译 Unity 对 C# 语言的支持包括指令的使用,这些指令允许您根据是否定义某些脚本符号有选择地在编译中包含或排除代码。 您可以在 Microsoft C# 预处理器指令页上更广泛地了解这些指令在 C# 中的工作方式。 Unity 具有一系列内置脚本符号,这些符号表示可在脚本中用于有选择地在编译中包含或排除部分代码的选项。 例如,在为 Windows 独立平台构建播放器时设置的内置脚本符号为 。您可以使用特殊类型的 if 语句检查此符号是否定义,如下所示:UNITY_STANDALONE_WIN #if UNITY_STANDALONE_WIN Debug.Log("Standalone Windows"); #endif 和前面的哈希 () 字符表示这些语句是“指令”,在编译过程中处理,而不是在运行时处理。#ifendif 因此,在上面的示例中,调试行仅包含在项目的 Windows 独立版本中进行编译。
Unity3D Unity3D :特殊文件夹和脚本编译顺序 推荐:将NSDT场景编辑器加入你的3D工具链 3D工具集:NSDT简石数字孪生 特殊文件夹和脚本编译顺序 Unity 保留了一些项目文件夹名称来指示内容具有特殊用途。其中一些文件夹会影响脚本编译的顺序。这些文件夹名称为: * Assets * Editor * Editor default resources * Gizmos * Plugins * Resources * Standard Assets * StreamingAssets 请参阅特殊文件夹名称了解有关这些文件夹的更多信息。 预定义的程序集 Unity 根据脚本文件在项目文件夹结构中的位置,以四个不同的阶段编译脚本。Unity 为每个阶段创建一个单独的 CSharp 项目文件 (.csproj) 和一个预定义的程序集。(如果没有符合编译阶段的脚本,Unity 不会创建相应的项目文件或程序集。) 当脚本引用在不同阶段编译的类(因此位于不同的程序集中)时,编译顺序很重要。基本规则是无法引用在当前阶段之后的阶段编译的任何内容。在当前阶段或早期阶段编译的所有内容则是完全可用的。 编译阶段如
Unity3D Unity3D :脚本序列化 推荐:将NSDT场景编辑器加入你的3D工具链 3D工具集:NSDT简石数字孪生 脚本序列化 序列化是将数据结构或游戏对象状态转换为 Unity 以后可以存储和重建的格式的自动过程。 在 Unity 项目中组织数据的方式会影响 Unity 序列化数据的方式,这可能会对项目的性能产生重大影响。本页概述了 Unity 中的序列化以及如何针对它优化项目。 本文档涵盖以下主题: * 序列化规则 * 自定义序列化 * Unity 如何使用序列化 * 序列化错误 * 序列化最佳实践 序列化规则 Unity 中的序列化程序专门设计用于在运行时高效运行。因此,Unity 中的序列化与其他编程环境中的序列化行为不同。Unity 中的序列化程序直接处理 C# 类的字段,而不是其属性,因此字段必须符合一些规则才能序列化。以下部分概述了如何在 Unity 中使用字段序列化。 若要使用字段序列化,必须确保字段: * 是公共的,或者具有序列化字段属性 * 不是静态的 * 不是常量 * 不是只读的 * 具有可序列化的字段类型: * 基元数据类型(整数、浮点数、
Unity3D Unity3D :启动时运行 Editor 脚本代码 推荐:将NSDT场景编辑器加入你的3D工具链 3D工具集:NSDT简石数字孪生 启动时运行 Editor 脚本代码 有时,若能够在 Unity 启动时立即在项目中运行一些 Editor 脚本代码而无需用户进行操作,这会很有用处。为实现此目的,可将 InitializeOnLoad 属性应用于具有静态构造函数的类。静态构造函数是一个与类同名的函数,声明为 static,没有返回类型或参数(有关更多信息,请参阅此处): using UnityEngine; using UnityEditor; [InitializeOnLoad] public class Startup { static Startup() { Debug.Log("Up and running"); } } 在使用任何静态函数或类实例之前始终会调用静态构造函数,但 InitializeOnLoad 属性可确保在 Editor 启动时调用该函数。 如何使用这种技术的一个例子是在 Editor 中设置常规回调(在某种程度上相当于“帧更新”
Unity3D Unity3D :禁用 Domain Reload 和 Scene Reload 的详细信息 推荐:将NSDT场景编辑器加入你的3D工具链 3D工具集:NSDT简石数字孪生 禁用 Domain Reload 和 Scene Reload 的详细信息 禁用 Domain Reload 和 Scene Reload 时,Unity 会跳过什么 从较高的角度看,进入运行模式包括以下主要阶段: * 备份当前场景。这仅在场景被修改后发生。这样当退出运行模式时,Unity 将场景恢复为运行模式开始前的状态。 * Domain Reload。通过重新加载脚本域来重置脚本状态。 * Scene Reload。通过重新加载场景重置场景状态。 * Update Scene。这会发生两次;一次没有渲染,一次有渲染。 Domain Reload 和 Scene Reload 的组合任务会重置脚本域并模拟应用程序在播放器中运行时的启动行为。如果在 Project Settings 中禁用这些步骤,Unity 会跳过这些步骤。
Unity3D Unity3D :场景重新加载 推荐:将NSDT场景编辑器加入你的3D工具链 3D工具集:NSDT简石数字孪生 场景重新加载 默认情况下已启用场景重新加载。这意味着,进入运行模式时,Unity 会销毁所有现有的场景游戏对象并从磁盘重新加载场景。Unity 执行此操作所需的时间随场景复杂性而增加,这意味着随着项目日益复杂,在按下 Play 按钮到场景完全载入编辑器之间必须等待更长的时间。 禁用场景重新加载后,该过程将花费更少的时间。这使您可以更快地迭代项目的开发。Unity 不会从磁盘重新加载场景,而是仅重置场景的已修改内容。这样可避免卸载和重新加载场景所造成的时间和性能影响。Unity 仍然会调用相同的初始化函数(例如 OnEnable、OnDisable 和 OnDestroy),就像刚加载时一样。 跳过场景重新加载的效果 要禁用场景重新加载: 1. 转到编辑器>编辑>项目设置 2. 确保已启用“进入播放模式选项”。 3. 禁用重新加载场景 有关详细信息,请参阅如何配置播放模式 在禁用场景重新加载时,在编辑器中启动应用程序所花费的时间不再表示在所构建的版本中启动的时间。因此,如果想对项目
Unity3D Unity3D :域重新加载 推荐:将NSDT场景编辑器加入你的3D工具链 3D工具集:NSDT简石数字孪生 域重新加载 域重新加载将重置脚本状态,默认情况下会启用域重新加载。此功能为您提供了全新的脚本状态,并会在您每次进入运行模式时重置所有静态字段和已注册的处理程序。这意味着每次在 Unity Editor 中进入运行模式时,您的项目就会采用与在构建后首次启动时非常相似的方式开始运行。 域重新加载需要一定的时间,并且随着项目中脚本的数量和复杂性的增加,需要的时间也会增加。如果需要很长时间才能进入运行模式,那么对项目进行快速迭代将变得越来越困难。因此,Unity 提供了关闭“域重新加载”的选项。 禁用域重新加载 要禁用域重新加载: 1. 转到编辑器>编辑>项目设置 2. 确保已启用“进入播放模式选项”。 3. 禁用重新加载域 有关详细信息,请参阅如何配置播放模式 禁用域重新加载后,进入运行模式的速度会更快,因为 Unity 不会每次都重置脚本状态。但是,这种情况下就需要由您自己来确保在进入运行模式时脚本状态会重置。为此,需要添加代码以便在运行模式启动时重置脚本状态。 禁用域重新加载后,
Unity3D Unity3D :可配置的进入运行模式 推荐:将NSDT场景编辑器加入你的3D工具链 3D工具集:NSDT简石数字孪生 可配置的进入运行模式 运行模式是 Unity 的核心功能之一。借助运行模式,可通过工具栏 中的 Play 按钮直接在 Editor 中运行项目。进入运行模式时,项目将像构建后一样启动并运行。退出运行模式时,运行模式期间在 Editor 中所做的任何更改都会重置。 在 Editor 中进入运行模式时,Unity 将执行两项重要操作,以确保项目在 Editor 中的启动方式与在构建后的启动方式相同: * 重置脚本状态(也称为“域重新加载”) * 重新加载场景 执行这两个操作需要花费一些时间,并且随着脚本和场景变得越来越复杂,时间也会随之增加。 在开发游戏或应用程序时,快速进入和退出运行模式的能力是一个重要考虑因素。进入和退出运行模式的速度越快,进行更改和测试更改的速度就越快。 由于开发过程中快速的迭代速度很重要,并且由于重置场景和脚本状态的时间可能会成为障碍,因此 Unity 允许配置进入运行模式时执行的操作,从而可以选择禁用“域重新加载”和/或“场景重新加载”
Unity3D Unity3D :Unity链接器 推荐:将NSDT场景编辑器加入你的3D工具链 3D工具集:NSDT简石数字孪生 Unity链接器 Unity 生成过程使用称为 Unity 链接器的工具去除托管代码。Unity 链接器是为使用 Unity 而自定义的 IL 链接器版本。Unity 链接器的自定义 Unity 引擎特定部分不公开可用。 Unity 链接器负责托管代码剥离和部分引擎代码剥离过程,这是通过 IL2CPP 脚本后端提供的单独过程,用于删除未使用的引擎代码。有关更多信息,请参阅 PlayerSettings.StripEngineCode]。 Unity 链接器的工作原理 Unity 链接器分析项目中的所有程序集。首先,它标记根类型、方法、属性和字段。例如,添加到场景中的游戏对象的 MonoBehavior 派生类是根类型。 然后,Unity 链接器会分析它已标记以标识的根,并标记这些根所依赖的任何托管代码。完成此静态分析后,通过应用程序代码的任何执行路径都无法访问任何剩余的未标记代码,Unity 链接器会将其从程序集中删除。 Unity
Unity3D Unity3D :托管代码剥离 推荐:将NSDT场景编辑器加入你的3D工具链 3D工具集:NSDT简石数字孪生 托管代码剥离 在构建过程中,Unity 会通过称为托管代码剥离的过程删除未使用或无法访问的代码,这可以显著减小应用程序的最终大小。托管代码剥离从托管程序集中删除代码,包括从项目中的 C# 脚本生成的程序集、属于包和插件的程序集以及 .NET Framework 中的程序集。 Unity 使用名为 Unity 链接器的工具对项目程序集中的代码执行静态分析。静态分析标识在执行期间无法访问的任何类、类的一部分、函数或函数的一部分。此分析仅包括在构建时存在的代码,因为在 Unity 执行静态分析时运行时生成的代码不存在。 您可以使用托管剥离级别设置配置 Unity 为项目执行的代码剥离级别。要防止 Unity 删除代码的特定部分,请使用注释来指示 Unity 链接器应保留代码库的哪些部分。有关更多信息,请参阅 Unity 链接器。 配置托管代码剥离 “托管剥离级别”属性确定 Unity 链接器在分析和剥离应用程序代码时遵循的规则集。将设置从“最小”增加到“高”
Unity3D Unity3D :脚本限制 推荐:将NSDT场景编辑器加入你的3D工具链 3D工具集:NSDT简石数字孪生 脚本限制 Unity 在支持的所有平台之间提供通用的脚本 API 和体验。但是,有些平台存在固有的限制。为帮助您了解这些限制,下表描述了每个平台和脚本后端适用的限制: .NET 4.x 等效脚本运行时 平台(脚本后端)提前编译无线程.NET Core 类库子集Android (IL2CPP)✔Android (Mono)iOS (IL2CPP)✔独立平台 (IL2CPP)✔独立平台 (Mono)通用 Windows 平台 (IL2CPP)✔通用 Windows 平台 (.NET)✔WebGL (IL2CPP)✔✔ 提前编译 有些平台不允许生成运行时代码。因此,任何依赖于在目标设备上即时 (JIT) 编译的托管代码都将失败。相反,必须提前
Unity3D Unity3D :托管堆栈跟踪与 IL2CPP 推荐:将NSDT场景编辑器加入你的3D工具链 3D工具集:NSDT简石数字孪生 托管堆栈跟踪与 IL2CPP 当托管代码中发生异常时,该异常的堆栈跟踪可以帮助您了解发生异常的原因。但是,在某些情况下,如下所述,托管堆栈跟踪可能不会按预期显示。堆栈跟踪会根据构建配置而有所不同。 调试版本 使用调试版本配置时,IL2CPP 会报告可靠的托管堆栈跟踪,并在调用堆栈中包含每个托管方法。该堆栈跟踪不包含原始 C# 源代码中的行号。 发布版本 使用发布版本配置时,IL2CPP 可能会生成缺少一个或多个托管方法的调用堆栈。这是因为 C++ 编译器已经内联了缺少的方法。方法内联通常对运行时的性能有好处,但可能会使调用堆栈更难理解。IL2CPP 始终在调用堆栈上提供至少一个托管方法。此方法便是发生异常的方法。调用堆栈上还包括其他未内联的方法。 源代码行号 在调试或发布配置中,IL2CPP 调用堆栈不包含源代码行号信息。 由3D建模学习工作室整理翻译,转载请注明出处! 上一篇:Unity3D :Windows 运行时支持 (mvrlink.com) 下一篇:Unity3D
Unity3D Unity3D :Windows 运行时支持 推荐:将NSDT场景编辑器加入你的3D工具链 3D工具集:NSDT简石数字孪生 Windows 运行时支持 Unity 在通用 Windows 平台平台上包括对 IL2CPP 的 Windows 运行时支持。使用 Windows 运行时支持直接从托管代码(脚本和 DLL)调用本机系统 Windows 运行时 API 以及自定义 .winmd 文件。 要在 IL2CPP 中自动启用 Windows 运行时支持,请访问 Player 设置(Edit> Project Settings,然后选择 Player类别),导航到 Configuration 部分,并将 Api Compatibility Level 设置为 .NET 4.6
Unity3D Unity3D :Linux IL2CPP 交叉编译器 推荐:将NSDT场景编辑器加入你的3D工具链 3D工具集:NSDT简石数字孪生 Linux IL2CPP 交叉编译器 Linux IL2CPP 交叉编译器是一组 sysroot 和工具链包,允许您在任何独立平台上构建 Linux IL2CPP Players,而无需使用 Linux Unity 编辑器或依赖 Mono。 如果您满足先决条件,当您选择 Linux 构建目标时,Unity 会自动为您安装这些包。如果您想退出此过程并使用您自己的 sysroot 和工具链包,请转到 Edit > Project Settings > Toolchain Management,并禁用 Install Toolchain package automatically 复选框。如果已经安装了这些包,还需要从 Package Manager 中将其移除。 警告:设置其他 IL2CPP
Unity3D Unity3D :处理 IL2CPP 附加参数的平台特定设置 推荐:将NSDT场景编辑器加入你的3D工具链 3D工具集:NSDT简石数字孪生 处理 IL2CPP 附加参数的平台特定设置 如果您的项目设置了其他 IL2CPP 参数,则针对多个平台进行编译可能无法按预期工作,尤其是在针对 Linux 进行交叉编译时。 若要确定是否已设置任何其他 IL2CPP 参数,请执行下列操作之一: * 检查环境变量是否已设置。IL2CPP_ADDITIONAL_ARGS * 在 中,检查编辑器脚本是否具有名为 的值。ProjectSettings/ProjectSettings.assetadditionalIl2CppArgs 请注意,用于设置其他 IL2CPP 参数的方法全局应用于所有平台,如果为所需平台以外的平台设置,则可能会导致编译问题。使用挂钩(如下所示)确保仅为需要它们的平台设置 IL2CPP 参数。IPreprocessBuildWithReport IPreprocessBuildWithReport hook 使用挂钩生成脚本或使用“生成”对话框设置其他参数:IPreprocessBuildWithReport cla
Unity3D Unity3D :IL2CPP概述 推荐:将NSDT场景编辑器加入你的3D工具链 3D工具集:NSDT简石数字孪生 IL2CPP概述 IL2CPP(中间语言到C++)脚本后端是Mono后端的替代方案。IL2CPP 为跨更多平台的应用程序提供更好的支持。IL2CPP 后端将 MSIL(Microsoft 中间语言)代码(例如,脚本中的 C# 代码)转换为C++代码,然后使用该C++代码为所选平台创建本机二进制文件(例如,.exe、.apk 或 .xap)。 这种类型的编译称为提前 (AOT) 编译,其中 Unity 在构建本机二进制文件时专门为目标平台编译代码。Mono 后端使用一种称为实时编译 (JIT) 的技术在运行时编译代码。 在此页面上: * 使用 IL2CPP 构建项目 * IL2CPP 的工作原理 * 优化 IL2CPP 构建时间 * 使用 IL2CppSetOption
Unity3D Unity3D :单声道概述 推荐:将NSDT场景编辑器加入你的3D工具链 3D工具集:NSDT简石数字孪生 单声道概述 Mono 脚本后端使用一种称为实时编译 (JIT) 的技术在运行时编译代码。Unity 使用开源 Mono 项目的一个分支。 某些平台不支持 JIT 编译,因此 Mono 后端并非在每个平台上都有效。其他平台支持 JIT 和 Mono,但不支持提前编译 (AOT),因此无法支持 IL2CPP 后端。当平台可以同时支持两个后端时,Mono 是默认的。有关详细信息,请参阅脚本限制。 Mono 支持托管代码的调试。有关更多信息,请参见在 Unity 中调试 C# 代码。 使用 Mono 构建项目 您可以通过以下两种方式之一更改 Unity 用于构建应用程序的脚本后端: * 通过编辑器中的播放器设置菜单。执行以下步骤,通过播放器设置菜单更改脚本后端:
Unity3D Unity3D :C# 编译器 推荐:将NSDT场景编辑器加入你的3D工具链 3D工具集:NSDT简石数字孪生 C# 编译器 为了在 Unity 项目中编译 C# 源代码,Unity Editor 使用 C# 编译器。 C# 编译器C# 语言版本罗斯林C# 9.0 编辑器将一组默认选项传递给 C# 编译器。若要在项目中传递其他选项,请参阅有关平台相关编译的文档。 不受支持的功能 C# 9.0 * 抑制发出局部sinit标志 * 协变返回类型 * 模块初始值设定项 * 非托管函数指针的可扩展调用约定 * 仅初始化二传手 如果尝试在项目中使用不受支持的功能,编译将生成错误。 记录支持 C# 9 初始化和记录支持附带了一些注意事项。 * 该类型是完整记录支持所必需的,因为它使用仅初始化资源库,但仅在 .NET 5 及更高版本中可用(Unity 不支持)。用户可以通过在自己的项目中声明类型来解决此问题。
Unity3D Unity3D :引用其他类库程序集 推荐:将NSDT场景编辑器加入你的3D工具链 3D工具集:NSDT简石数字孪生 引用其他类库程序集 如果 Unity 项目使用 Unity 默认不编译的 .NET 类库 API 的一部分,则可以向 C# 编译器提供要在编译期间引用的其他程序集的列表。行为取决于项目使用的 .NET 配置文件。有关详细信息,请参阅 .NET 配置文件支持。 .NET 标准配置文件 如果项目使用 .NET 标准配置文件,则默认情况下会引用 .NET 类库 API 的所有部分。不能引用其他程序集。如果 API 的一部分似乎缺失,则它可能不包含在 .NET Standard 中。尝试改用 .NET Framework 配置文件。若要避免在更改配置文件时出现编译问题,请参阅在配置文件之间切换。 .NET 框架配置文件
Unity3D Unity3D :稳定脚本运行时-已知限制 推荐:将NSDT场景编辑器加入你的3D工具链 3D工具集:NSDT简石数字孪生 稳定脚本运行时:已知限制 Unity 支持新版的 .NET 运行时。使用 .NET 运行时的时候,可能会遇到以下问题: 代码大小 稳定脚本运行时随附比旧版脚本运行时更大的 .NET 类库 API。这意味着代码大小通常更大。这种大小增加可能很明显,特别是在大小受限和提前 (AOT) 平台上。 要减少代码大小的增加幅度,请执行以下操作: 1. 尽可能选择最小的 .NET 配置文件(请参阅 .NET 配置文件支持)。.NET Standard 2.0 配置文件大小大约只有 .NET 4.x 配置文件的一半,因此请尽可能使用 .NET Standard 2.0 配置文件。 在 Unity
Unity3D Unity3D :.NET 配置文件支持 推荐:将NSDT场景编辑器加入你的3D工具链 3D工具集:NSDT简石数字孪生 .NET 配置文件支持 Unity 支持两个 .NET 配置文件:.NET Standard 和 .NET Framework。 每个配置文件都提供一组不同的 API,以便 C# 代码可以与 .NET 类库交互。 “API 兼容级别”属性有两个设置: * .NET Standard:.NET Standard 2.1,由 .NET Foundation 发布。 * 由 Microsoft 发布的 .NET Framework 4.8,以及 .NET Standard 2.1 中的其他 API。 默认情况下,
Unity3D Unity3D :Unity 中的 .NET 概述 推荐:将NSDT场景编辑器加入你的3D工具链 3D工具集:NSDT简石数字孪生 Unity 中的 .NET 概述 Unity 使用开源 .NET 平台来确保您使用 Unity 创建的应用程序可以在各种不同的硬件配置上运行。.NET 平台支持多种语言和 API 库。 脚本后端 Unity 有两个脚本后端;单声道和IL2CPP(中间语言到C++),每种都使用不同的编译技术: * Mono 使用即时 (JIT) 编译,在运行时按需编译代码。 * IL2CPP 使用提前(AOT)编译,并在运行之前编译整个应用程序。 使用基于 JIT 的脚本后端的好处是编译时间通常比 AOT 快得多。 默认情况下,Unity 在支持 Mono 的平台上使用 Mono 后端。为应用程序构建播放器时,可以选择要使用的脚本后端。要通过编辑器执行此操作,请转到>
Unity3D Unity3D :重要的类 - Gizmos 和 Handles 推荐:将NSDT场景编辑器加入你的3D工具链 3D工具集:NSDT简石数字孪生 重要的类 - Gizmos 和 Handles Gizmos 和 Handles 类用于在 Scene 视图和 Game 视图绘制线条和形状以及交互式手柄和控件。这两个类共同提供了一种方法来扩展这些视图中显示的内容,并构建交互式工具以您喜欢的任何方式编辑项目。例如,您可以在游戏中围绕非玩家角色创建一个可拖动的圆圈辅助图标,代表它可听到或看到玩家的区域,而不必在 Inspector 中输入数字。 本页面提供了 Gizmos 和 Handles 类的简单概述。有关 Gizmos 和 Handles 类每个成员的完整文档和详尽参考,请参阅 Gizmos 和 Handles 脚本参考页面。 Gizmos Gizmos 类允许您将线条、球体、立方体、图标、纹理和网格绘制到 Scene 视图中,在开发项目时用作调试、
Unity3D Unity3D :重要的类 - Debug 推荐:将NSDT场景编辑器加入你的3D工具链 3D工具集:NSDT简石数字孪生 重要的类 - Debug Debug 类用于可视化编辑器中的信息,这些信息可以帮助您了解或调查项目运行时发生的情况。例如,您可以使用该类在控制台窗口中打印消息,在 Scene 视图和 Game 视图中绘制可视化线条,以及在编辑器中从脚本暂停运行模式。 此页面概述了 Debug 类及其使用该类编写脚本时的常见用法。有关 Debug 类的每个成员的详尽参考,请参阅 Debug 脚本参考。 记录错误、警告和消息 Unity 本身有时会将错误、警告和消息记录到控制台窗口。Debug 类使您能够从您自己的代码中执行完全相同的操作,如下所示: Debug.Log("This is a log message."); Debug.LogWarning("This is a warning message!"); Debug.