版本: 2022.3
语言: 英语
升级到Unity 2020 LTS
Unity的界面

升级到Unity 2019 LTS

注意:按照版本顺序遵循本节中的建议。例如,如果您需要将项目从2020升级到2022,请阅读2021年升级指南,查看在阅读2022年升级指南之前是否需要做出任何更改。

此页列出了从Unity 2018任何版本升级到2019 LTS时可能影响现有项目的Unity 2019版本中的更改。如果您是从Unity 2017版本升级,请首先查阅升级到Unity 2018 LTS指南。

请注意,2019 LTS 也称为 2019.4

页面概述


轻量级渲染管道(LWRP)变为通用渲染管道(URP)

轻量级渲染管道一系列操作,将场景内容转换为屏幕上的图像。Unity允许您选择预构建的渲染管道或编写自己的渲染管道。 更多信息
术语表中查看
(LWRP)在Unity 2019.3及更高版本中现在是通用渲染管道(URP)。

如果您的项目使用LWRP,您需要将您的项目升级以使用URP。有关升级过程的分步指南,请参阅LWRP到URP升级指南

回到顶部

ShaderUtil更新

ShaderUtil.ClearShaderErrors()已替换为ShaderUtil.ClearShaderMessages(),以实现命名一致性,并现在标记为已弃用。当您在Unity 2019.4中打开它们时,您的现有项目脚本将自动升级。

回到顶部

动画C#作业

动画C#作业正从 UnityEngine Expenses.Animations 移动到 UnityEngine.Animations。

Unity 2019.4自动更新了您的大多数脚本,除了以下具有Animator jobs扩展方法的脚本:

  • BindStreamTransform
  • BindStreamProperty
  • BindCustomStreamProperty
  • BindSceneTransform
  • BindSceneProperty
  • OpenAnimationStream
  • CloseAnimationStream
  • ResolveAllStreamHandles
  • ResolveAllSceneHandles

您必须手动添加使用UnityEngine.Animations;语句到这些脚本中。

回到顶部

脚本渲染管道(SRP)API更改

未记录的RenderPipeline.beginCameraRenderingRenderPipeline.beginFrameRendering事件已移除。您应使用来自RenderPipelineManager类的这些事件替换。

已移除RenderPipeline静态受保护函数BeginFrameRenderingBeginCameraRendering。您必须替换为参数为ScriptableRenderContext的签名。此外,现在还有要调用的EndCameraRenderingEndFrameRendering方法。

回到顶部

可寻址对象

AsyncLoad 已废弃。请使用 Async.LoadAssetAsync 代替。

回到顶部

新的资产导入管道

新的 Asset 导入管道从 Unity 2019.3 开始可用。如果您现有的项目,您可以使用编辑器中的 项目设置窗口 升级到新资产导入管道。

选择 版本 2 将告诉编辑器您现在想使用新的资产导入管道与该项目一起使用,并且重新启动项目将使用新的资产导入管道代码重新导入。这本质上与删除您的 Library 文件夹相同,但不会删除它。当切换到使用资产导入管道 V2 时,原始资产导入管道的导入结果不会删除,因为 V2 会创建自己的文件夹结构来存储其导入结果。在 Unity 2019.2 或更早版本中创建的项目将默认继续使用其原始的资产导入管道。当您首次在 Unity 2019.3 中打开此类项目时,您将获得升级到新资产导入管道的选项。如果您拒绝,则您的项目将继续使用原始的资产导入管道。此外,所选的版本存储在项目的 EditorSettings.asset 文件中,以便进行版本控制。

使用新的资产导入管道创建的新项目

当使用 Unity 2019.3 或更高版本创建新项目时,新的资产导入管道已成为新的默认工作方式。您将创建的所有新项目都将使用它。

新资产导入管道的行为变更

同じアセットの複数のバージョンが Library フォルダーにキャッシュされています
Unity 2019.2 (元の资产导入管道)まででは、Library フォルダーはアセットの GUID でファイル名が構成されていました。したがって、プラットフォーム間の切り替えにより、Library フォルダーのインポート結果が無効になり、切り替えごとに再インポートされることがありました。

Asset Import Pipeline V1

一日に数回プラットフォーム間で切り替える必要がある場合、これはプロジェクトのサイズによっては数時間かかることがありました。あなたの中にはその問題に対する修正方法を見つけた人もいますが、それは機械上のプラットフォームごとにプロジェクトのコピーを持つなど、効果的に拡張することができませんでした。新しい资产导入管道では、特定のアセットの依存関係をトラッキングすることで、すべての依存関係をハッシュして、アセットのインポート結果のリビジョンを作成できるようにしました。これにより、アセットごとに複数のリビジョンを持つことができ、GUID とファイル名のマッピングに影響を与えないようになりました。この要件がないため、異なる設定で動作するインポート結果を持つことができます。高速プラットフォーム切り替えのために、プラットフォームごとにインポート結果を持つことができ、プラットフォームの切り替えが非常に高速になります。

Asset Import Pipeline V2

キャッシュと Unity アクセルレータ
ほとんどのインポーターが、キャッシュの確実性を向上させるために大幅な修正を受けました。このため、Unity アクセルレータを使用すると、インポート結果が中央ストレージにアップロードされ、他のマシンが同じアセットに対する他のマシン上での作業を利用することができます。動的依存関係を持つアセットも今やキャッシュできます(例:ネストされたプレハブ、シェーダーなど)。インポーターや関連するファイルの更なるリストについては、新しい AssetDatabase マニュアルページを確認してください。

スクリプトインポーターのキャッシュ
ScriptedImportersや登録された依存関係を持つインポーターは、古い资产导入管道ではキャッシュされませんでした。

旧版の動作

使用旧的资产导入管道时,切换平台会使所有导入无效,因为导入结果基于GUID,因此每次切换平台都会覆盖导入结果。

新行为

在新的资产导入管道中,切换平台不会使导入无效,因为代表导入结果的磁盘文件是其内容的哈希值,因此确保在切换平台时内容不同,导致新的文件,从而保留两个版本的导入结果,并简单地在一者之间切换,无需导入任何内容。

调用OnPostProcessAllAssets的次数

在旧的资产导入管道中,调用OnPostProcessAllAssets函数的次数是不确定的。这意味着对于相同的更改,此函数可能被调用一次或多次。在新的资产导入管道中,对于检测到的脚本更改(.cs文件),将调用一次OnPostProcessAllAssets,对于非脚本更改(例如.png、.fbx、.wav文件),也将调用一次。

同步脚本编译

在旧的资产导入管道中,可以在编译过程中触发编译并进入播放模式。在某些情况下,节省了大量时间,但不同步的编译可能导致不确定的结果。在新的资产导入管道中,已更改此行为,使得资产导入管道驱动大部分脚本编译,因此需要确定的方法,从而锁定编辑器直到脚本编译完成。

回到顶部

瓦片地图编辑器现在是包

现在瓦片图一个允许您使用瓦片和网格叠加快速创建2D层的GameObject。更多信息
词汇表中查看
编辑器已作为包可用。此包在新版本Unity项目中自动安装,这些项目使用2D项目模板创建。有关安装包的更多信息,请参阅添加和删除包

所有公共类都已移动到UnityEditor.Tilemaps命名空间。Unity将引用这些类的脚本编译到“Unity.2D.Tilemap.Editor”Assembly Definition Asset中。这些包括

  • GridBrush
  • GridBrushEditorBase
  • GridBrushEditor
  • GridSelection

Unity将尝试更新脚本中相关的Tilemap using语句,但请检查并修改,如有必要。

如果您使用脚本引用Tilemap工具类,这些脚本属于Assembly Definition,则应在Assembly Definition下将“Unity.2D.Tilemap.Editor”Assembly Definition作为Assembly Definition Reference添加。Unity可能会为您自动设置此值,但如果没有,请更改它。

Assembly definition for the Tilemap Editor
瓦片图编辑器的Assembly Definition

如果您从以前的Unity版本编译了引用Tilemap工具类的预编译程序集,则在使用它们时将遇到这些更改导致的错误。如果可能,请更新并重新编译这些程序集以针对新的Tilemap工具类程序集进行编译。

如果您从以前的Unity版本编译了引用Tilemap工具类的预编译程序集,则需要更新和重新编译这些程序集以引用新的Tilemap工具类程序集。

导入预编译程序集时这些问题的例子(作为控制台窗口中的错误)

在检查{预编译程序集}卸载损坏的程序集{预编译程序集}时无法提取{预编译程序集中的类}基类型的{Class in Precompiled Assembly}类,此程序集可能导致运行时崩溃

这些错误可能是因为从瓦片工具类(如GridBrush)继承导致的。

使用预编译程序集时这些问题的例子(作为控制台窗口中的错误)

TypeLoadException: Could not resolve type with token 01000011 (from typeref, class/assembly UnityEditor.GridBrush, UnityEditor, Version=0.0.0.0, Culture=neutral, PublicKeyToken=null)
Error: Could not load signature of {Method in Precompiled Assembly) due to: Could not resolve type with token 01000011 (from typeref, class/assembly UnityEditor.GridBrush, UnityEditor, Version=0.0.0.0, Culture=neutral, PublicKeyToken=null) assembly:UnityEditor, Version=0.0.0.0, Culture=neutral, PublicKeyToken=null type:UnityEditor.GridBrush member:(null) signature:<none>

这些错误可能是因为创建或调用瓦片工具类(如GridBrush)的方法导致的。

回到顶部

SpriteTooling现在是包

精灵工具包(精灵编辑器窗口)现在是一个包。有关安装包的更多信息,请参阅 添加和删除包

  • 默认情况下,此包不会添加到新创建的Unity项目,除非使用2D项目模板创建新项目。
  • 在升级到Unity 2019.1时,此包将被添加到预先存在的Unity项目(2019.1及以前版本)。如果您的项目不使用2D精灵且不需要使用精灵工具包,您可以将其移除。精灵2D图形对象。如果您习惯于3D工作,精灵基本上就是标准的纹理,但在开发过程中,有专门的技巧用于组合和管理精灵纹理,以实现效率和便利性。 更多信息
    详见 术语表
  • 作为将精灵工具包转换为包的一部分,实验性的命名空间已被移除。如果您项目中的脚本引用与精灵工具包相关的类,请在升级后确保它们使用了正确的命名空间,例如,如果需要,请添加“using UnityEditor.U2D.Sprites”。
  • 如果您在脚本中引用了Assembly定义中的Sprite类,您需要在您的Assembly定义下添加“Unity.2D.Sprite.Editor”Assembly定义作为Assembly定义引用。
Assembly definition for the Sprite Tooling
精灵工具包的Assembly定义

回到顶部

Unity UI现在是包

Unity UI(UGUI)现在是一个包,com.unity.ugui。您可以通过包管理器(菜单:窗口 > 包管理器)访问它。

Unity UI(用户界面)允许用户与您的应用程序交互。Unity目前支持三个UI系统。 更多信息
详见 术语表
是随Unity一起提供的核心包。您不需要在新项目中安装它。当您将使用2019.2b1或更早版本创建的现有Unity项目升级到Unity 2019.2时,此包将自动添加。自动定义引用自动获得对uGUI汇编的引用。如果您在Unity 2019.2上安装了旧版本的Unity,请确保删除位于 \Editor\Data\UnityExtensions\Unity 中的GUISystem文件夹。否则,您可能会遇到类重新定义错误。由于Unity通过包提供它,因此不再将Unity UI源代码发布到Bitbucket。Unity UI API文档不再包含在主要的Scripting API参考中。您可以从Unity UI包文档的Scripting API部分访问它。

回到顶部

UI元素现在是标准功能而不是实验性

有关更多信息,请参阅 UI Elements 2019.1升级指南

回到顶部

移除.NET 3.5等效脚本运行时

脚本运行时版本的.NET 3.5等效选项已移除。项目将在2019.2中打开时自动迁移到使用.NET 4.x等效选项。

回到顶部

照明改进

在2019.1之前,间接强度滑块只会影响在使用递进式光照贴图在场景中使用的光源对静态对象影响的预先渲染的纹理。光照贴图叠加在场景几何体上,以创建光照效果。更多信息
词汇表中查看
时生成的光照贴图。对于EnlightenGeomerics推出的一种照明系统,在Unity中用于光照贴图和Enlighten实时全局照明。更多信息
词汇表中查看
,它既影响光照探针存储有关光在您的场景中如何穿过空间的信息。给定空间内排列的一组光照探针可以改进该空间内移动对象和静态LOD景观的光照。更多信息
词汇表中查看
,也影响光照贴图。现在所有后端都将间接强度值应用于光照贴图和光照探针。在再次烘焙光照后,您可能会注意到如果修改了间接强度值,探针会变得更亮。在升级后最好在再次烘焙光照贴图之前清除烘焙数据。

回到顶部

UnityAPICompatibilityVersionAttribute构造函数更改

接受单个字符串参数的构造函数现在已过时。有关受支持的重载信息,请参阅文档

回到顶部

变更系统要求

使用Unity 2019 LTS创建的项目需要macOS 10.12或Ubuntu 16.04或更新的版本。

回到顶部

多人游戏(UNet)高级API已移动到包

游戏的多玩家高级API为Unity游戏构建多玩家功能的一种系统。它是基于底层传输实时通信层构建的,并处理许多多玩家游戏所需的常见任务。更多信息
词汇表中查看
已从扩展改为包。这不会影响NetworkTransport类(底层API)。所有原本位于Unity引擎中的依赖项都已移动到该包。这意味着高级API现在是独立的,除了几个在此次迁移中无法迁移的分析器一个窗口,帮助您优化游戏。它显示在游戏中的各个区域花费的时间。例如,它可以报告在渲染、动画或您的游戏逻辑中花费的时间百分比。更多信息
词汇表中查看
钩子。

包含高级API的老项目将自动添加包以防止编译错误。这不会发生在新项目中,您可以从包管理器窗口添加它。有关多玩家高级API文档

回到顶部

已移除UNITY_ADS指令

自2019.4起,Unity不再自动定义UNITY_ADS。您可以选择在脚本中停止使用UNITY_ADS,或为它创建一个新的自定义全局#宏。有关如何创建新自定义全局#宏的指南,请参阅平台相关编译页面。

升级到Unity 2020 LTS
Unity的界面