codecamp

Unity 故障排除

本节提供有关以下问题的信息:

  • Package Manager 窗口中的错误消息
  • Missing MonoBehaviour errors
  • Package Manager 缺失或者窗口无法打开
  • 将 Unity 升级到新版本后出现的问题
  • 包安装失败
  • 无法识别包
  • Windows 上加载 hostfxr.dll 时出错
  • 重置项目的包配置
  • Git URL 的身份验证问题

如果遇到与网络有关的问题,也可以运行 Unity Package Manager Diagnostics 工具。有关更多信息,请参阅网络问题

Package Manager 窗口中的错误消息

在 Package Manager 遇到问题时,Package Manager 窗口中会显示错误指示符:

  • 系统范围的问题

状态栏中显示的错误消息表示 Package Manager 检测到与特定包无关的问题。例如,如果 Package Manager 无法访问包注册表服务器,则将在状态栏中显示以下消息:

网络错误消息网络错误消息

如果您的网络无法访问包注册表服务器,可能是因为网络存在连接问题。您或系统管理员修复网络错误后,状态栏将清空。

If your network connection is working, but you are not signed into your Unity account, the Package Manager doesn’t display any Asset Store packages. When you try to use the My Assets scope, the Package Manager displays an error in the status bar:

已注销 Unity 帐户已注销 Unity 帐户

列表视图中单击 Sign in 按钮可通过 Unity Hub 登录到您的 Unity 帐户。

  • 包特有的问题

如果特定的包在加载或安装时出现问题(例如,在确定要加载的包版本时),则损坏的包旁边的包列表中将显示错误图标 (img) (A)。要找出问题所在,请打开损坏的包的详细信息视图以查看详细的错误消息 (B)

依赖关系错误消息依赖关系错误消息

Missing MonoBehaviour errors

While building, if there are a lot of errors about Missing Behavior, the UnityLinker might be mistakenly stripping out a component that it thinks is unreferenced. It often does this because the stripping level is too aggressive. For example, if you have a prefab in an AssetBundle that references the SpriteShape component in the 2D SpriteShape package, the object might be missing and might generate compiler warnings.

To fix this, you can either lower the stripping level for the UnityLinker or declare the package’s assemblies inside the link.xml file in order to preserve them from being stripped:

<linker>
    <assembly fullname="Unity.2D.SpriteShape.Runtime" preserve="all"/>
    <assembly fullname="Unity.2D.Common.Runtime" preserve="all"/>
 </linker>

For more information on stripping levels and the UnityLinker, see Managed code stripping.

Package Manager 缺失或者窗口无法打开

如果您的 package.manifest 文件有格式错误,则在 Unity 控制台中将出现类似以下错误:

Failed to resolve packages: The file [<project-path>/Packages/manifest.json] is not valid JSON:
  Unexpected token '}' at 44:1
  }

You can use the information contained in the error message to fix the JSON. There are a number of online validators that you can use to try to correct the problem. Once you save the corrected file, Unity reloads the Package Manager window.

As of 2019.3, your manifest.json file should not contain any references to the com.unity.package-manager-ui package. You can either reset your project’s package configuration or remove the following line from the manifest’s dependencies list:

    "com.unity.package-manager-ui": "2.1.1",

If you are still experiencing problems, check to see if your project manifest uses “exclude” as a package version. This is an obsolete value for the dependencies property. If you find any lines like these, remove the entire line. Package Manager only installs packages that are explicitly included as a dependency in your project, so once you remove that entry, Package Manager ignores the package and doesn’t install it.

如果 Package Manager 仍然无法加载,请遵循无法识别包重置项目的包配置下的步骤进行操作。

将 Unity 升级到新版本后出现的问题

当您将项目升级到更高的 Unity 版本时,Package Manager 会自动将不兼容的包更新为更高的兼容版本。但是,如果您的包不能编译,则 Package Manager 会在控制台中显示错误消息。

要处理这些消息,请阅读错误消息并尽可能解决所有问题。例如,一个包可能缺少对另一个包或版本的依赖。在这种情况下,您可以尝试自己安装该包。

您也可以按照以下顺序来尝试每个解决方案,直到找到可行的解决方案:

  • 备份项目下的 Packages 文件夹,然后再删除该文件夹。
  • 备份项目的 Packages 文件夹中的包来源文件,然后将它们删除,只留下 manifest.json 文件。然后尝试重新加载项目。
  • 创建一个新的空项目。如果 Package Manager 窗口加载成功,请将失败项目中的 Library/PackageCache/com.unity.package-manager-ui@<version> 文件夹替换为新创建的项目中的同一个文件夹。
  • 作为最后的选择,您可以重置项目(重置为默认的包配置),然后将包逐个添加回来,直到问题得到解决为止。

包安装失败

如果您尝试从注册表安装新的包但无法安装,可能是由于权限问题所致。

必须对缓存文件夹具有完整权限:

  • Windows:C:\Users\yourname\AppData\Local\Unity\cache
  • MacOS:~/Users/Library/Unity/cache

It might be a problem with the network. Check your firewall and proxy settings.

有时,学校、政府机关或受网络保护的工作场所等机构环境会设置代理服务器来控制网络与互联网之间的通信,并使用自己的服务器证书,而 Unity 或 Package Manager 无法识别这些证书。请与您的网络管理员联系。

无法识别包

如果看到很多编译错误,可能表明 Unity 无法识别现有项目中的包。在这种情况下,可能缺少 .NET 组件。

对于 Windows:

1.下载并安装 Visual Studio 2017 版本 15.9.0 或更高版本,并在 Other Toolsets 下面选中 .NET Core cross-platform development workload。 2.下载并安装 .NET SDK v2.2.101 组件。

对于 MacOS:

1.下载并安装 .NET SDK v2.2.101 组件。

2.在 Visual Studio 中安装所有建议的更新

3.使用 homebrew 来计划和安装 mono

​```shell
  brew update
    brew install mono # optional
    brew upgrade mono
​```

4.如有必要,删除项目下的 Library/obj/temp 文件夹,然后重新启动 Unity。

5.如果仍然遇到困难,请尝试重新启动计算机。

Windows 上加载 hostfxr.dll 时出错

如果控制台报告说找到了 hostfxr.dll 库,但 Unity 无法从 C:\<path_to_app>\hostfxr.dll 加载该库,那么可以通过安装 KB2999226KB2533623 补丁在 Windows 7 或 Windows Server 2008 R2 上修正此错误。

重置项目的包配置

如果一个项目有太多的包问题,则可以将项目重置为 Unity 的 Editor 版本的默认包配置。此操作将重置项目中的所有包。这可能无法解决问题的根源,但是可以帮助您找出问题所在。

注意:您无法撤消对包配置的重置操作,因此请确保首先备份 manifest.json 文件,或者确保您的项目处于源代码控制之下。此外,还可以采取其他预防措施,包括:克隆项目,在克隆版本上测试操作之后再继续。

要恢复为默认包配置,请从 Help 菜单中选择 Reset Packages to defaults

Help > Reset Packages to defaultsHelp > Reset Packages to defaults

重置项目的克隆版本

在执行最终更改之前,您也可以测试是否可以恢复为默认包:

1.要克隆项目,请复制粘贴项目文件夹,然后重命名项目文件夹以便于识别(例如,如果您的项目名为 MyProject,则可以使用类似 clone_MyProject 的名称)。

2.加载新克隆的项目。

3.从 Help 菜单中,选择 Reset Packages to defaults

根据项目的大小,这可能需要几分钟。

4.检查是否成功重置了包。如果成功,则表示您可以安全地对原始项目执行操作。

Git URL 的身份验证问题

如果使用 SSH 协议通过 Git URL 来安装包,即使您正在后台运行 ssh-agent 并且您的 PID 环境变量已正确设置,也可能会遇到来自 Git 的身份验证错误。

尽管您的脚本可以在后台成功启动 ssh-agent,但是导出的环境变量仅适用于运行脚本的 Bash shell 以及之后由该脚本启动的任何子进程。这是因为您的脚本无法更改父进程、无关进程或先前创建的子进程中的环境变量。即使脚本位于 .bashrc 中,也只会在 Bash shell 中执行。

通过双击 Unity 图标或使用 Hub 启动 Unity 或 Unity Hub(在 Windows 和 macOS 中)时,不会在 shell 中运行,因此不会执行脚本。这意味着 Unity Editor 进程不会设置这些变量,因此 Unity 调用的 Git 进程最终也不会设置这些变量。

要解决此问题,可以执行以下操作之一:

  • Open a Bash shell first (before opening the Hub) and manually launch the Unity Editor from that shell.
  • 如果您使用的是 Windows,则可以使用 setx 命令在 Hub 进程启动之前在 Windows 注册表中永久设置环境变量。如果您可以确保脚本在启动时运行一次,并且 Hub 不会与 Windows 一起启动,则此解决方案最有效。例如:

  # Expose env variables to native windows
    setx SSH_AGENT_PID "$SSH_AGENT_PID"
    setx SSH_AUTH_SOCK "$SSH_AUTH_SOCK"
Unity Resolution and conflict
Unity 包清单
温馨提示
下载编程狮App,免费阅读超1000+编程语言教程
取消
确定
目录

Unity 包

Unity 的 Package Manager

Unity Configuration

Unity Package Manage 窗口

Unity 查找包

Unity 添加和移除包

Unity 检查包

Unity 包的脚本API

Unity Resolution and conflict

Unity 项目清单

Unity 故障排除

Unity 创建自定义包

Unity 包清单

使用Unity

安装 Unity

Unity 许可证和激活

启动 Unity

Unity Upgrading Unity

Unity Legacy Upgrade Guides

升级到 Unity 5.4

升级到 Unity 5.0

Unity 的界面

Unity Scene 视图

Unity 游戏对象定位

Unity Inspector 窗口

Unity 资源工作流程

Unity 使用 Asset Store

Unity 资源数据库

Unity AssetBundle

Unity 脚本与资源

Unity 创建游戏玩法

Uinty 场景

Unity Scene Templates

Unity 游戏对象

Unity 原始对象和占位对象

Unity 预制件

Unity 层

Unity 约束

Unity 发布构建

Unity 编辑器功能

Unity Project Settings

Unity 版本控制

无标题文章

Unity 基于文本的场景文件

Unity 扩展编辑器

无标题文章

Uinty Profiler overview

Uinty The Profiler window

Uinty 了解 Unity 中的优化

Unity 导入

Unity 导入模型

Unity Model Import Settings 窗口

Unity Rig 选项卡

UnityAnimation 选项卡

Unity SpeedTree Import Settings 窗口

Unity 在 Unity 外部创建资源

Unity 输入

Unity 移动设备输入

Unity 2D

Unity 精灵

Unity Sprite Editor

Unity 精灵图集

Unity 主精灵图集和变体精灵图集

Unity 准备要分发的精灵图集

Unity Tilemap

Unity Tilemap workflow

Unity 在瓦片地图上绘制

Unity 等距瓦片地图

Unity 可编程瓦片

Unity 可编程画笔

Unity 2D 物理系统参考

Unity 2D 碰撞体

Unity 2D 关节

Unity 2D 效应器

Unity 图形

Unity 渲染管线

Unity 内置渲染管线

Unity 内置渲染管线中的渲染路径

Unity 可编程渲染管线

Unity 摄像机

Unity 摄像机技巧

Unity 遮挡剔除

Unity 摄像机参考

Unity 光照

Unity 光源

Unity 光源

Unity 光照模式

Unity Cookies (filename: Cookies.md)

Unity 阴影

Unity Lighting Settings Asset

Unity 光照模式

Unity Light Explorer 窗口

Unity 光照贴图

Unity 渐进光照贴图程序

Unity 光照贴图 UV

Unity 使用 Enlighten(已弃用)的实时全局光照

Unity 光照探针

Unity 反射探针

Unity 预计算的光照数据

Unity 网格、材质、着色器和纹理

Unity 网格组件

Unity 文本网格

Unity 程序化网格几何体

Unity 创建和使用材质

Unity 纹理

Unity 导入纹理

Unity Texture compression formats

Unity 编写着色器

Unity 标准着色器

Unity 材质参数

Unity 旧版着色器

Unity 普通着色器系列

Unity 透明着色器系列

Unity 透明镂空着色器系列

Unity 自发光着色器系列

Unity 反光着色器系列

Unity 着色器参考

Unity 编写表面着色器

Unity 编写顶点和片元着色器

Unity ShaderLab 语法

ShaderLab:SubShader

Unity 高级 ShaderLab 主题

Unity 粒子系统

Unity 创建环境

Unity 天空

Unity 视觉效果组件

Unity 高级渲染功能

Unity 优化图形性能

Unity 颜色空间

Unity 图形教程

Unity 物理系统

Unity Scripting

Unity Setting Up SCripting Environment

Unity Scripting concepts

Unity Important Classes

Unity architecture

Unity Overview of .NET in Unity

Unity Scripting backends

Unity Code reloading in the Unity Editor

Unity 脚本序列化

Unity Script compilation

Unity Assembly definitions

Unity 多玩家和联网

Unity 音频

Unity 动画

Unity 用户界面 (UI)

Unity 导航和寻路

Unity 服务

Unity Setting up your project for Unity services

Unity Organizations

Unity Analytics

Unity Analytics Dashboard

Unity Analytics 事件

Unity 自定义事件

Unity Remote Settings

Unity 在 Unity 项目中使用 Remote Settings

Unity 变现

Unity 升级 Unity Analytics

Unity Analytics 和欧盟一般数据保护条例 (GDPR)

Unity Cloud Build

Unity Cloud Content Delivery

Unity IAP

Unity 设置 Unity IAP

Unity 跨平台指南

Unity 应用商店指南

Unity 实现应用商店

Unity 应用商店模块

Unity Collaborate

Unity XR

Unity 单通道立体渲染(双宽渲染)

Unity XR SDK

Unity Provider setup

Unity Subsystems

Unity Interfaces

Unity 开源代码仓库

Unity Asset Store 发布

Unity 平台开发

Unity 实验性

Unity 旧版主题

关闭

MIP.setData({ 'pageTheme' : getCookie('pageTheme') || {'day':true, 'night':false}, 'pageFontSize' : getCookie('pageFontSize') || 20 }); MIP.watch('pageTheme', function(newValue){ setCookie('pageTheme', JSON.stringify(newValue)) }); MIP.watch('pageFontSize', function(newValue){ setCookie('pageFontSize', newValue) }); function setCookie(name, value){ var days = 1; var exp = new Date(); exp.setTime(exp.getTime() + days*24*60*60*1000); document.cookie = name + '=' + value + ';expires=' + exp.toUTCString(); } function getCookie(name){ var reg = new RegExp('(^| )' + name + '=([^;]*)(;|$)'); return document.cookie.match(reg) ? JSON.parse(document.cookie.match(reg)[2]) : null; }