Version: 6000.3
语言: 中文
分析仪范围和诊断
优化

安全模式

概述

Unity 的安全模式是 Unity 编辑器在打开存在脚本编译错误的项目时可以进入的模式。安全模式旨在为解决编译错误提供最佳环境,以便您可以快速将项目恢复到功能状态。

在安全模式下,Unity 提供了最小版本的编辑器用户界面,功能有限。它仅导入与脚本相关的资源,并阻止导入非脚本资源(例如模型、材质、纹理和预制件)。这是因为安全模式不适用于内容制作,仅用于解决编译错误。

安全模式绝不允许托管代码从项目或其包运行。这意味着您自己的脚本一段代码,允许您创建自己的组件、触发游戏事件、随时间修改组件属性以及以您喜欢的任何方式响应用户输入。更多信息
请参阅术语表
例如编辑器脚本资产后处理器脚本导入器不会运行。安全模式还禁用装配覆盖,以及突发Roslyn 分析器。这可确保处于安全模式的编辑器始终功能齐全且可靠,即使它打开项目时处于非常损坏的状态也是如此。

当 Unity 检测到没有更多编译错误时,它会自动退出安全模式。当它退出安全模式时,Unity 会完整导入你的项目,编辑器会恢复其正常的完整功能。

编译错误的常见原因

在以下情况下,可能会遇到编译错误的一些常见情况:

  • 将项目从旧版本的 Unity 升级到较新版本。
  • 在与创建项目不同的 Unity 版本中打开项目。
  • 打开缺少 存储 Unity 的各种类型的功能和资产的容器,包括编辑器或运行时工具和库、资产集合和项目模板。包是 Unity 包管理器可以跨 Unity 项目共享的独立单元。大多数情况下,这些包称为,但有时也称为 Unity 包管理器 (UPM) 包更多信息
    请参阅术语表
    ,或包的错误版本。
  • 打开一个在您自己的脚本中存在错误的项目。
  • 版本控制用于管理文件更改的系统。您可以将 Unity 与最常见的版本控制工具结合使用,包括 Perforce、Git、Mercurial 和 PlasticSCM。更多信息
    请参阅术语表
    ,其中拉取的最新更改包含编译错误。

在没有安全模式的情况下打开存在编译错误的项目可能会导致多种问题。例如包是在 Unity 中共享和重用的资产集合。Unity 包管理器 (UPM) 可以在项目中显示、添加和删除包。这些包是 Unity 包管理器的原生软件,并提供了提供 Unity 功能的基本方法。但是,Unity 包管理器也可以显示您从 Asset Store 下载的 Asset Store 包更多信息
请参阅术语表
可能无法正常加载或运行,并且您的资源可能导入不正确,从而导致缓存服务器中的缓存工件不正确。

在这些情况下,您通常不想等待项目的其余部分导入后才能解决错误。安全模式提供了自行解决这些脚本相关问题的工具,或者使用版本控制将项目更新到解决错误的较新版本,而无需等待项目的完全导入。

进入安全模式

当您打开存在编译错误的项目时,编辑器会显示一个对话框,询问您是否要进入安全模式:

进入安全模式?对话框提示您打开存在编译错误的项目时进入安全模式
进入安全模式?对话框提示您打开存在编译错误的项目时进入安全模式

此时,您有三个选择:

  • 进入安全模式
  • 忽略错误并打开项目
  • 退出统一

在大多数情况下,应选择“进入安全模式”来解决项目中的错误(或者,如果您正在使用版本控制,则拉取包含错误修复的更改)。安全模式为解决编译错误提供了最佳环境,因此您可以在 Unity 导入项目的其余部分之前快速将项目恢复到功能状态。

但是,在某些情况下,您可能不想进入安全模式,在这种情况下,您可以退出 Unity 或忽略错误。

注意:你可以在 编辑>首选项(Edit Preferences) > 资产管线(Asset Pipeline) > 显示进入安全模式对话框(Show Enter Safe Mode Dialog) 中禁用此对话框。如果禁用该对话框,Unity 会在打开出现编译错误的项目时自动进入安全模式。

在不进入安全模式的情况下退出

安全模式专为修复编译错误而设计。如果您作为团队的一部分处理 Unity 项目,但您不对导致错误的脚本负责,并且不知道该怎么做,则应在对话框中选择“退出”,并联系团队中的程序员寻求建议。

忽略错误并继续导入

在某些情况下,您不需要项目处于可用状态(例如,如果您打开一个旧项目以复制某些部分,或者只是检查它的配置方式)。在这种情况下,您可以忽略错误并在损坏状态下打开项目。

如果您选择“忽略”,并且以后想要在安全模式下打开项目,您可以关闭并重新打开 Unity 以再次访问“进入安全模式”对话框。

忽略编译错误的含义

如果您选择忽略错误,Unity 将继续导入其余资源并完全打开您的项目。这里的潜在影响包括:

  • 您的项目可能不处于可用状态。在错误得到解决之前,你可能无法进入播放模式或创建项目的构建。此外,项目中的任何包可能无法正确加载,或者根本无法加载。

  • Unity 可能需要导入您的资源两次;一次在启动时,在解决项目的编译错误后再一次。这会增加在可用状态下加载项目所需的时间。

  • 如果你的项目使用可编写脚本的渲染管线,则你的渲染管线 获取场景内容并将其显示在屏幕上的一系列作。Unity 允许您从预构建的渲染管道中进行选择,或编写自己的渲染管道。更多信息
    请参阅术语表
    可能无法加载,从而导致视觉问题,例如错误着色器

  • 脚本编译错误可能会导致项目中出现次要错误。例如,如果项目中的脚本导入器由于编译错误而无法加载,则您的资产可能会以不正确的状态导入。

安全模式旨在帮助您避免所有这些问题。

处于安全模式的编辑器

在安全模式下,Unity 提供了一个功能有限的最小编辑器界面。

处于安全模式的 Unity 编辑器
处于安全模式的 Unity 编辑器

Unity 编辑器在工具栏Unity 编辑器顶部的一排按钮和基本控件,允许您以各种方式(例如缩放、翻译)与编辑器交互。更多信息
请参阅术语表
部分,它取代了标准编辑器工具栏。工具栏指示您处于安全模式,并提供退出安全模式按钮,该按钮允许您忽略剩余错误并退出安全模式。横幅还指示您的项目是否使用预览包预览包正在开发中,尚未准备好投入生产。预览版中的包可能处于开发的任何阶段,从初始阶段到接近完成。
请参阅术语表
.

Unity 编辑器在安全模式下保留了与代码编辑器的集成,因此您可以双击脚本资产或控制台错误打开其关联的脚本,并且可以通过“资产”菜单打开 C# 项目。它还保留了与版本控制系统的集成。

安全模式下的受限窗口集

编辑器在安全模式下显示有限的窗口选择。这些都是:

  • 控制台窗口
  • 项目窗口
  • 检查器一个Unity 窗口,显示有关当前选定游戏对象、资产或项目设置的信息,允许您检查和编辑值。更多信息
    请参阅术语表
  • 包管理器窗口

这些是唯一可用的窗口,因为它们与修复编译错误有关。安全模式下没有其他窗口可用。

安全模式下的编辑器菜单

编辑器主菜单中的可用选项在安全模式下仅限于有限的一组。您只能查看和选择与使用脚本相关的菜单选项;用于创建和处理其他内容的常规选项不可用。例如,您无法创建或打开场景场景包含游戏的环境和菜单。将每个唯一的场景文件视为一个独特的关卡。在每个场景中,你放置你的环境、障碍物和装饰品,基本上是将你的游戏设计和构建成碎片。更多信息
请参阅术语表
,或创建非脚本资源,例如基元形状、灯光或相机在场景中创建特定视点图像的组件。输出要么绘制到屏幕上,要么作为纹理捕获。更多信息
请参阅术语表
.这游戏对象Unity 场景中的基本对象,可以表示角色、道具、风景、相机、航路点等。游戏对象的功能由附加到它的组件定义。更多信息
请参阅术语表
组件(Component) 菜单不存在,并且 窗口(Window) 菜单仅提供一组受限的窗口。

在安全模式下显示的受限编辑器菜单,显示用于创建资产的可用选项。
在安全模式下显示的受限编辑器菜单,显示用于创建资产的可用选项。

安全模式下的项目窗口

在安全模式下,项目窗口一个窗口,显示您的内容Assets文件夹(项目选项卡)更多信息
术语表中查看
与安全模式之外的正常行为相比,有一些功能差异。

主要区别在于您只能选择与编译相关的资产。其他资产类型不可选择。它们在“项目”窗口中仍显示为灰色条目,但您无法选择或编辑它们。

具体而言,您可以与之交互的与编译相关的资产类型包括:

  • C# 文件 (.cs)
  • DLL 文件 (.dll)
  • 程序集定义 (.asm)
  • 响应文件 (.rsp)
  • 规则集文件 (.rulesset)

此外,不可选择资产的图标不会显示资产内容的预览。相反,它们显示一个通用图标来表示资产的类型。

项目(Project) 窗口显示不可选择资产的通用图标。
项目(Project) 窗口显示不可选择资产的通用图标。

创建(+)菜单按钮被禁用,并且项目窗口上下文菜单的可用选项集减少。

项目窗口中的创建 (+) 菜单按钮,在安全模式下禁用
项目窗口中的创建 (+) 菜单按钮,在安全模式下禁用

退出安全模式

解决所有编译错误后,Unity 会自动退出安全模式。然后,Unity 会继续打开您的项目并导入您的资源。

要在仍有编译错误的情况下退出安全模式,请选择安全模式工具栏中的退出安全模式按钮。不建议这样做(请参阅忽略编译错误的影响),Unity 会提示您一个对话框以确认您的决定。

安全模式工具栏中的退出安全模式按钮
安全模式工具栏中的退出安全模式按钮

如果您在项目中仍然存在错误时退出安全模式,并且稍后想要返回安全模式,您可以关闭并重新打开 Unity 以再次访问“进入安全模式”对话框。

批处理模式下的安全模式

在批处理模式下,如果您的项目中存在编译错误,Unity 会自动退出,除非您使用-ignoreCompilerErrors 命令行参数

分析仪范围和诊断
优化