Version: 2019.3
升级到 Unity 2019.1
升级到 Unity 2018.2

升级到 Unity 2018.3

本页面列出了从早期版本的 Unity 升级到 2018.3 版时可能对现有项目造成影响的更改


改进了预制件

  • 预制件自动升级到新预制件系统
  • 预制件工作流程已更改,从而支持预制件嵌套。要编辑预制件,现在需要在预制件模式下将其打开。无法再在 Project Browser 中编辑预制件。
  • 还可以在预制件模式中进行结构更改,例如删除游戏对象、为游戏对象重设父子关系或将变换组件替换为 RectTransform。或者,如果希望完全移除预制件实例与预设件资源的链接,从而能够根据需要重建生成的普通游戏对象,则可以将预制件实例解压缩。无法再将预制件实例断开连接。
  • 用于创建游戏对象的 Editor 工具应该使用 ObjectFactory.CreateGameObject 来确保当前正在预制件模式下编辑预制件资源时,游戏对象最终位于预制件场景中。
  • 作为安全预防措施,具有 [ExecuteInEditMode] 属性的脚本使 Editor 在进入播放模式时退出预制件模式(如果打开的预制件上的任何脚本具有该属性)。有关如何使此类脚本与预制件模式兼容的详细信息,请参阅 ExecuteInEditMode 和新的 ExecuteAlways 属性的脚本参考页面。
  • 无法再通过脚本对预制件资源进行任意修改,因为预制件现在是导入的资源。现在需要使用 PrefabUtility.LoadPrefabContentsPrefabUtility.SaveAsPrefabAssetPrefabUtility.UnloadPrefabContents
  • 如果使用 AssetDatabase.AddObjectToAsset 将额外资源添加到预制件,现在必须在添加必备对象后调用 PrefabUtility.SavePrefabAsset

USS flex 简化扩展现在遵循 CSS 标准

  • USS flex 指令现在最多接受三个表示 flex-growflex-shrinkflex-basis 的参数。flex-shrink 和 flex-basis 参数是可选参数。如果省略,flex-basis 默认为 0,flex-shrink 默认为 1。
  • 在 2018.3 版之前,flex: N 等同于 flex N 0 auto。现在遵循 CSS 标准,等同于 flex: N 1 0。为了保留旧语义,您应该在 USS 文件中将所有 flex: N 指令替换为 flex: N 0 auto

支持记录托管用户线程中未处理的异常

  • 在 2018.3 版之前,Unity Editor 不会记录托管用户线程中抛出的未处理异常。在 2018.3 版之后,托管用户线程中抛出的未处理异常将记录在 Unity Editor 控制台中。
  • 因为日志记录现在包含所有托管用户线程,所以您可能会看到项目中始终已经抛出但直到现在还没有发送到控制台的异常。

现在已在 DirectX(11 和 12)中反转 VFACE 着色器变量

  • 以前渲染到立方体贴图时,DirectX 和其他图形 API 之间的 VFACE 着色器变量不一致。现在具有相同行为。
  • 如果在 DirectX 着色器中使用了 VFACE 布尔着色器变量来渲染立方体贴图,则必须在代码中翻转逻辑。
  • 请参阅问题 ID 1027670

将 PhysX 从 3.3.1 升级到 3.4.2

物理行为已改变,一些项目的行为可能会不同于新版本。特别是以下情况:

  • Persistent Contact Manifold 模式中,触点面片现在最多包含 6 个触点。在以前版本中,每个面片最多包含 5 个触点,因此现在有所增加。现在可以使用新代码将面片合并在复合体中,并可以使用新代码选择触点。碰撞看起来比以前精确得多。如果项目依赖于特定触点布局,可能需要对其进行处理以便与新代码兼容。凸面体与网格和图元碰撞时,最有可能注意到这一点。
  • 现在使用一种新算法来计算__与地形的触点。此算法在以前作为特殊情况,但现在与用于 MeshColliders 的网格图元代码相同。此算法稳健,更准确,性能也好。但不支持 TerrainData.thickness,这意味着现在有可能出现地形穿隧效应。要避免此问题,必须在快速移动的对象上启用连续碰撞检测。在此之前,如果发现一个物体的深度不超过地形下的 TerrainData.thickness,则会自动冒出,但法线一直不正确。为了保留以前这种行为,请取消选中 Physics 设置中的 Enable Unified Heightmaps__ 选项。
  • 负网格缩放在任何情况下都不再直接导致网格烘焙。不再烘焙凹面网格。然而,凸面网格仍然需要进行缩放才能烘焙。引入此变更后,负缩放将在 scale.x * scale.y * scale.z < 0 时反转网格法线。另外,就像以前一样,诸如倾斜和截断之类的非普通缩放仍然需要进行烘焙。
  • 已弃用__凸面网格膨胀__,因为新的凸面外壳计算算法 (Quickhull) 更能容忍输入网格中的各种缺陷,似乎不再需要该功能。

已将 AssetBundle.mainAsset 属性标记为“过时”

  • 在 5.0 版之前的 Unity 版本中,用户必须使用 AssetBundleBuildAssetBundle API 来构建 Asset Bundle,而这需要提供一个对象(在使用 AssetBundle 的 mainAsset 属性加载时返回该对象)。
  • AssetBundle.BuildAssetBundle API 在 Unity 5.0 中标记为过时,已被 AssetBundle.BuildAssetBundles 替代,后者改变了从 AssetBundle 获取资源的方式。
  • 现在需要通过 AssetBundle.LoadAsset API 来获取资源名称或者路径才能从 AssetBundle 获取内容。请参阅关于“构建 AssetBundles”、“本机使用 AssetBundles”以及 AssetBundle 脚本 API 的文档。

升级使用 NavMesh 组件的项目

  • 如果将项目从 2018.2 或更早版本转移到 2018.3b 且项目使用从 Unity 的 GitHub 代码仓库获取的 NavMesh 组件,则现在需要使用此分支

粒子系统错误修复

Unity 2018.3 包含一些粒子错误修复,这可能会影响在以前版本中创建的项目。

  • 对公告牌粒子采用非均匀变换缩放时,Y 轴和 Z 轴会发生反转。现在,此问题已得到修复。
  • 对网格粒子采用非均匀变换缩放时,在缩放后会应用旋转。这是 2017.x 中的回归问题。在 5.6 版和更低版本中的表现是正常的,但在 2017 版周期中遭到破坏。修复此问题可以更正 5.6 及更低版本中创建的内容,但会改变 2017.x 版中创建的内容。
  • 球形风区对粒子的影响与树相反。此问题已经得到修正,所以球形风区现在会排斥而不是吸引粒子。可以通过取消外力乘数 (External Forces Multiplier) 或风区 (Wind Zone) 强度来恢复先前行为。Unity 无法自动更改这一点,因为具有树或定向风区的场景可能会受到不当影响。

C# 编译器升级到 Roslyn

在 2018.3 版之前,Unity Editor 在编译项目中的 C# 文件时使用 Mono C# 编译器 (mcs)。从 2018.3 版开始,以新脚本运行时 (.NET 4.x Equivalent) 为目标的项目使用 Roslyn C# 编译器 (csc)。切换到 Roslyn 后可能会发现行为差异:


已移除 UnityScript 和 Boo 脚本编译器

在 Editor 中无法再编译 UnityScript (.js) 和 Boo (.boo) 脚本文件。

有关更多信息,请参阅发表于 2017 年 8 月的这篇博客文章;并可使用 unityscript2csharp 工具将 UnityScript 转换为 C#。


Animator 根运动 (Root Motion) 播放已更改

Animator 根运动播放功能已稍作更改,旨在纠正在 Animation 窗口中创作根运动动画 (Root Motion Animations) 时出现的某些不一致之处。

  • 不再需要为 AnimationClip(动画剪辑)生成根运动曲线。根运动的应用现在仅取决于 Animator.applyRootMotion

2018.2 到 2018.3 的等效情况

情况 生成根运动 Animator.applyRootMotion 2018.2 2018.3
A 在根变换 (Root Transform) 上累计应用根运动。 与 2018.2 相同
B 应用 AnimationClip 中编写的位置 (Position)、旋转 (Rotation) 和缩放 (Scale) 曲线。 与 2018.2 相同
C* 无根变换运动 应用 AnimationClip 中编写的位置 (Position)、旋转 (Rotation) 和缩放 (Scale)。
D* 无根变换运动 在根 (Root) 上累计应用根运动。

对于情况 C 和 D,要在 2018.3 中获得相同的结果,您需要实现 OnAnimatorMove,然后在不想应用根运动的情况下放弃 Animator.deltaPositionAnimator.deltaRotation

如果项目使用 applyRootMotion 使根变换上的位置 (Position)、旋转 (Rotation) 和缩放动画 (Scale Animation) 进行“静音”,则需要手动覆盖根变换 (Root Transform) 属性。

升级到 Unity 2019.1
升级到 Unity 2018.2