升级到Unity 5.4

徘徊边缘 提交于 2020-11-26 04:24:17

升级到Unity 5.4

当将项目从Unity 5.3升级到Unity 5.4时,有一些更改,您应该注意哪些可能会影响您现有的项目。

网络:多人服务API更改

许多更改联网API

网络:WebRequest不再实验

该WebRequest接口已经从推广UnityEngine.Experimental.Networking到UnityEngine.Networking。使用统一5.2和5.3的项目UnityWebRequest将必须被更新。

场景视图:音频映射不会自动应用

与图像效果ImageEffectTransformsToLDR属性将如果发现不再直接应用到场景图。一个新的属性存在应用效果的场景观点:ImageEffectAllowedInSceneView。5.4标准资产已升级,以反映这种变化。

着色器:重命名的变量

为了一致性,重命名了一些内置着色器变量:

_Object2World_World2Object现在unity_ObjectToWorldunity_WorldToObject

_World2Shadow现在unity_WorldToShadow [0] _World2Shadow1unity_WorldToShadow [1]等。

_LightMatrix0现在unity_WorldToLight

_WorldToCamera_CameraToWorld_Projector_ProjectorDistance_ProjectorClip_GUIClipTextureMatrix现在都前缀统一

当导入它们时,变量引用将在.shader和.cginc文件中自动重命名。但是,导入后,着色器在Unity 5.3或更早版本中不可用,无需手动重命名变量。

着色器:均匀数组

在Unity 5.4中,处理着色器属性数组的方式已更改。现在有“原生”浮法/矢量/矩阵阵列着色器支持(通过MaterialPropertyBlock.SetFloatArray,Shader.SetGlobalFloatArray等等)。这些新的API允许最多1023个元素的数组。

使用数为后缀名字指的是单独的数组元素的老办法已被弃用(例如_Colors0,_Colors1在这两个)Material和MaterialPropertyBlock。这种特性,与序列化Material不再能够设置数组元素(但如果任何均匀阵列的名字是由多个后缀它仍然有效)。

着色器:5.4中的其他变化

默认着色器编译目标已更改为“#pragma target 2.5”(DX9上为SM3.0,WinPhone上为DX11 9.3功能级别)。您仍然可以使用“#pragma target 2.0”来定位DX9 SM2.0和DX11 9.1功能级别。

大多数内置着色器目标2.5:值得注意的例外是Unlit,VertexLit和固定函数着色器。在实践中,这意味着大多数内置着色器和新创建的着色器,默认情况下,不会对PC的GPU见2004年之前是由工作的这篇博客文章的详细信息。

在Material类的构造函数Material(string),这是已经过时,停止工作在5.4。使用它将打印错误并导致洋红色错误着色器。

用于计算屏幕空间定向光阴影的内部着色器已移至图形设置。如果您通过在项目中拥有该着色器的副本来使用自定义版本的定向光影,则将不再使用它。相反,选择在你的自定义着色器编辑>项目设置>图形

反射探头在两个纹理之间共享一个采样器。如果你在你的着色器手动取样它们,并得到一个“未声明的标识符samplerunity_SpecCube1”的错误,你需要从修改代码UNITY_PASS_TEXCUBE(unity_SpecCube1)来UNITY_PASS_TEXCUBE_SAMPLER(unity_SpecCube1,unity_SpecCube0)。

UnityEditor.ShaderUtil.ShaderPropertyTexDim已弃用; 使用Texture.dimension。

ComputeBuffers

ComputeBuffers在自动转换的OpenGL着色器中的数据布局已更改为与DirectX ComputeBuffers的布局匹配。如果你在OpenGL中使用ComputeBuffers,删除任何调整数据的代码,以匹配以前的OpenGL特定的布局规则。请参阅计算着色器的详细信息。

可玩性:迁移到5.4

可玩性现在是结构而不是类。

该Playable结构是手柄原生Playable类,而不是指向本地Playable类。

非空的Playable结构并不能保证可玩可用。使用.IsValid方法,以验证您可播放的都可以使用。

这用于返回null空输入任何方法/输出将立即恢复Playable.Null。

Playable.Null 是无效的Playable。

Playable.Null可以传递给AddInput,SetInput并SetInputs预留空输入,或隐式地断开连接的输入。

使用Playable.Null或任何无效可玩作为输入的任何方法,或调用一个无效的可播放的方法将抛出适当的例外的操作。

Playables与比较null是毫无意义的现在。与比较Playable.Null。

Playables必须使用分配Create要使用这个类的静态方法。

Playables必须使用取消分配.Destroy上播放的处理方法。

不解除分配的游戏将泄漏。

Playables转变为结构避免装箱/拆箱(以提高性能拳击更多信息)。

浇铸Playable到一个对象,隐含或明确地,将引起装箱/拆箱,从而降低性能。

继承可Playable类将导致子类的实例的装箱/取消装箱。

由于只有动画可现在,ScriptPlayable■找被取代CustomAnimationPlayables。

不再可能从基本Playables派生。只需在您的自定义Playables中聚合Playables。

Oculus Rift:从Unity 5.3升级您的项目

按照这些说明从Unity 5.3升级您的Oculus VR项目:

重新启用虚拟现实支持。

打开播放器设置。(菜单:编辑>项目设置>播放器

选择其他设置和检查虚拟现实支持复选框。使用复选框下方显示为每个构建目标添加和删除虚拟现实设备的虚拟现实SDK列表。

删除魔环Spatializer

取出魔环Spatializer(:从菜单通过音频设置窗口,您的项目中的音频插件编辑>项目设置>音频),使用Spatializer插件下拉菜单。它可能与本地空间化方法冲突并阻止构建。

重新排序兄弟姐妹

出现了变化,当同级GameObjects在Unity 5.4重新排序时所触发的事件。同级GameObjects是GameObjects所有在层级窗口共享相同的父。在统一之前的版本,不断变化的兄弟GameObjects的顺序将导致每一个兄弟姐妹收到一个OnTransformParentChanged电话。在5.4中,同级的GameObjects不再得到这个调用。相反,家长收到游戏物体到一个单一的呼叫OnTransformChildrenChanged。

这意味着,如果你在你的项目中,依赖于代码OnTransformParentChanged当兄弟姐妹重新排序被调用时,将不再发生这些调用,你需要更新你的代码时,父对象接收到采取行动OnTransformChildrenChanged调用来代替。

这改变了,因为新的行为提高了性能。

在运行时重新排列大的GameObject层次结构

由于变换部件的优化,使用Transform.SetParent或DestroyING包括1000+ GameObjects层次的零部件现在可能需要很长时间。调用SetParent不推荐或以其他方式在运行时重新安排如此大的层次结构。

Windows应用商店

为所有.NET脚本后端SDK更新了生成的Visual Studio项目格式。这解决了当没有在生成的项目已经改变过度重建。您可能需要删除现有生成* .csproj的,尤其是当它与“生成C#项目”选项选中建成,所以团结可以再生的。

脚本序列化错误

有两个新的脚本序列化的错误赶上时统一API从构造函数和字段初始化反序列化(负载)时被调用。反序列化可能发生在不同的线程主线程,因此它是不安全的反序列化期间调用统一的API。有在(脚本序列化)脚本的连载]页的统一手册中的底部的更多细节。

支持视网膜屏幕

编辑器现在支持Mac OS X上的Retina分辨率,具有高分辨率文本,UI和3D视图。

编辑器GUI现在在点空间中而不是像素空间中定义。在标准分辨率显示器上,没有变化,因为每个点是一个像素。然而,在Retina显示器上,每个点是两个像素。目前的屏幕UI规模可作为EditorGUIUtility.pixelsPerPoint。由于Unity可以有多个窗口,每个在不同像素密度的监视器上,该值可能在视图之间变化。

如果编辑器代码使用常规的编辑器/ GUI /布局方法,很有可能您不需要更改任何内容。

如果你正在使用Screen.width/height,改用EditorWindow.position.width/height替代。这是因为屏幕大小以像素为单位,但UI是以点数来定义的。对于在检查中显示自定义编辑,使用EditorGUIUtility.currentViewWidth,它正确地占了滚动条的存在。

如果您在UI中显示其他内容(例如RenderTexture),则可能是以点数计算其大小。要支持Retina分辨率,您需要将点大小转换为像素大小。有在新方法EditorGUIUtility此。

如果您使用的是带有自定义背景GUIStyles,你可以通过把一个纹理用整整翻了一倍尺寸变成了'GUIStyleState.scaledBackgrounds“阵列添加的背景纹理视网膜版本。

与动力不足的图形硬件Mac电脑可能会由于增加了分辨率3D体验的看法慢得令人无法接受编辑的帧速率。视网膜的支持可以通过选择上Unity.app“获取信息”在Finder,并检查“打开低分辨率”被禁用。

物理学:网格和物理转换漂移

有:

如果拒绝物理学的变化包含无效(非有限)顶点,则变更。

通过不发送冗余转换更新来避免物理变换漂移。

5.3的行为是动画系统始终发送变换更新消息动画曲线这是不变的。这些消息唤醒了刚体和固定这被证明在5.3风险很大。

5.4的行为是,如果没有位置变化,Rigidbody不会醒来(大多数人会期望的)。

如果您的项目依赖于始终唤醒Rigidbody的5.3行为,它可能无法按5.4中的预期工作。

Web播放器

Unity Web Player目标已从Unity 5.4中删除。如果您的项目升级到5.4,您将无法将其部署到Web播放器的平台。

如果您有需要维护的旧版Web Player项目,请不要将其升级到5.4或更高版本。

升级到Unity 5.5

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!