Unity2017新特性
一、Timeline
增加了Timeline是一款强大的可视化新工具,可用于创建影视内容,例如过场动画、预告片、游戏试玩视频等等。
二、Cinemachine
Cinemachine是一个高级相机系统,您可以像电影导演一样,在Unity中合成镜头,无需编写任何代码,引领您进入程序化摄影时代。
三、Post-processing
Post-processing可以很方便地为场景应用各种逼真滤镜,使用电影工业级技术、控件和颜色空间格式来创造高质量视觉效果,让画面更生动、更逼真,助您描绘更好的视觉故事。
四、Unity Teams
我们发布了Unity Teams,它由一系列简化创作者协作流程的功能和解决方案组成,包含Collaborate多人协作(现已发布)和Cloud Build云构建。
五、粒子系统优化
Unity 2017.1对粒子系统和Progressive Lightmapper进行了大量改进,提供了更多选择来实现您的艺术愿景并控制性能。不同平台可采用不同的渲染品质,例如i
六、Progressive Lightmappe
七、Deferred Rendering
OS平台上的Deferred Rendering,和PC上的NVIDIA VRWorks。
八、NVIDIA VRWorks
Unity 2017.1可以通过数据驱动的实时操作,随时获得丰富的分析数据。深入了解您的用户与您作品的互动情况,并实时做出相应的调整,迎合他们的习惯,无需重新部署新版本。在Unity 2017中,您可以更好地为用户提供更佳的游戏体验。
九、2D Sprite Atlas
在Unity 5.6中,我们为2D游戏开发者对工具和工作流程进行了重大改进。Unity 2017.1中引入了 2D Sprite Atlas ,这是一种新的Asset,将取代Sprite Packer。随着它的出现,新改进的工作流程可以在运行时更好地控制精灵的打包和使用。图集是Unity中2D工作流程的重要组成部分,而精灵图集不仅提供了更简单的图集创建和管理方式,还有相应的脚本API,可获得更多的控制和用途。
十、Animation窗口优化
我们对Animation窗口进行了全面修改,改进了关键帧的工作流程,使动画制作更方便和熟练,并支持与Animator状态机进行交互。Performance Recording是一个实验性功能。
十一、Playables API
Playables API通过使用树状结构的PlayableGraph组织和评估数据来源,提供一种创建工具、特效或其他游戏机制的方法。PlayableGraph允许您混合和修改多个数据源,合成为单一输出后播放。
在Unity 2017.1中,我们增加了对环绕立体声音频剪辑的支持,这是全方位环绕音频技术,它(除了水平面外)还覆盖了听众上方和下方的声源。
十二、UnityEditor.IMGUI.Controls
我们在UnityEditor.IMGUI.Controls中添加了一个 新的ArcHandle类 ,它可以在场景视图中交互式地编辑弧线。还加入了名为SearchField的新IMGUI控件,它带有普通和工具栏用户界面风格,但也可以自行定制。
十三、Visual Studio支持
改进了对Visual Studio的支持,包括Mac OS,Unity安装程序现在可以选择在Windows上安装Visual Studio Community 2017(而非Visual Studio Community 2015)。安装速度显著提高也更轻量
十四、场景与Asset Bundle改进
场景与Asset Bundle改进,我们对游戏中的场景和Asset Bundle进行了一些改进。更改底层架构使场景和Asset Bundle加载速度更快,从而使玩家体验更加流畅。我们还创建了一个工具,Asset Bundle浏览器——以帮助创建和优化Asset Bundle。
Asset Bundle浏览器:Asset Bundle浏览器的Beta版与Unity 2017.1一同发布。该工具允许您在Unity项目中查看和编辑Asset Bundle的配置。它的目的是替换当前选择Asset的工作流,并在检视窗口中手动设置Asset Bundle的工作流程。现在您可以集中查看所有的Asset Bundle配置。通过使用上下文菜单和拖放功能,配置、修改和分析相关资源包。
十五、脚本运行时升级(实验性)
脚本运行时升级(实验性):畅享 C# 6和.NET 4.6:在Unity 2017.1中,我们引入了实验性版本的脚本运行时内核,该内核已升级到Mono/.NET 4.6运行时。它包含了许多修复、性能改进,可以使用C# 6。我们相信它会提高游戏的整体性能。
十六、模型导入器改进
模型导入器改进:从像Maya这样流行的数字内容创作(DCC)工具导入Asset的过程是首批重要的改进对象,这使得DCC工作流程变得更加轻松。最终提高了艺术家和设计师的生产力,减少了程序员的麻烦。
十七、Progressive Lightmapper改进
Progressive Lightmapper改进:Unity 2017.1增加了Progressive Lightmapper中对烘焙LOD的支持。在烘焙LOD时,Enlighten和Progressive Lightmapper之间的主要区别在于,使用Progressive Lightmapper不必在LOD周围放置光照探针来获得反射光。在完全烘焙分辨率下,间接光照将为LOD提供更优质的烘焙光照贴图,您也可以避免为它们设置光照探针的繁琐过程。(Unity 5.6中也有此功能。)
十八、实时阴影改进
实时阴影改进:我们优化了在稳定模式下,级联定向光源阴影投射器的选择。这意味着生成阴影贴图时会产生更少的Draw Call。这增益是与场景和配置相关的。例如,在四个级联光的情况下,可以看到Draw Call数量显著下降。根据太阳/摄像机的方向,场景中可以减少50%的阴影投射器。
粒子系统改进:我们引入了精灵集成,粒子碰撞力(可以推动碰撞器),大量形状方面的改进,包括一个新的形状类型,噪音模块增加了新选项,以及其他一些较小的特性和增强。因为增加了新的控制和约束,例如速度与对齐,使得在2D中使用粒子更加轻松。可以使用粒子来获得比以往更多的特效和动画效果,包括光线的线条和尾迹。
十九、Windows Store
Windows Store现在改名为Universal Windows Platform:Unity现在支持Windows商店的Universal Windows Platform(UWP)应用模式,支持为Xbox One、Windows 10、Windows Phone 10和HoloLens进行构建。
二十、底层原生插件渲染扩展
底层原生插件渲染扩展:我们已经扩展了底层渲染插件API,并提供了一些很酷的新特性:
现在可以将用户数据发送到回调函数。
我们已经扩展了插件将接收回调的可能事件列表。
二十一、着色器编译器进程中添加了钩子
我们在着色器编译器进程中添加了钩子,可以在发送到编译器之前对着色器打补丁。支持创建自定义关键字所控制的自定义变体。
VR: NVIDIA VRWorks
本页列出了 2017.1 中从早期版本的 Unity 升级时可能会影响现有项目的任何更改。
例如:
- 数据格式的更改可能需要重新烘焙。
- 对任何现有函数、参数或组件值的含义或行为的更改。
- 弃用任何功能或特性。(建议使用其他方法。
UnityWebRequestTexture.GetTexture() 不可读参数更改
这个方便的 API 有一个错误,其中 nonReadable 的工作方式与它应该的相反方式,即将其设置为 true 将导致可读纹理,反之亦然。现在,此问题已得到纠正,参数按照记录的方式工作。请注意,如果直接创建 DownloadHandlerTexture,则不会受到影响。
*粒子系统*
伸*广告牌*
枢轴参数更改
X 轴枢轴现在在拉伸广告牌上是准确的。您可能需要在受影响的项目上重新配置透视设置。
Y 轴枢轴现在也很准确,Unity 会在您升级项目时自动重新配置这些枢轴。
*着色*
宏观UNITY_APPLY_DITHER_CROSSFADE变化
该宏用于实现LOD的
片段着色器中的交叉淡入淡出对象。以前,您需要将整个片段 IN 结构传递给它。现在你只需要将屏幕位置向量传递给它。
请记住,自 2017.1 以来,为 指令添加了新选项,该指令可以自动生成抖动代码。dithercrossfade``#pragma surface
现在,在Unity 2017.1中,NVIDIA VRWorks通过以下特性,为虚拟现实提供了一种全新高度的视觉保真度、性能和响应能力:
本页列出了 2017.2 中从早期版本的 Unity 升级时可能会影响现有项目的任何更改。
例如:
- 数据格式的更改可能需要重新烘焙。
- 对任何现有函数、参数或组件值的含义或行为的更改。
- 弃用任何功能或特性。(建议使用其他方法。
现在,当 MonoBehaviour 添加到*游戏对象*
在编辑器中
MonoBehaviour.OnValidate 在现场
加载,当游戏对象被复制或值在检查员
.现在,在编辑器中向游戏对象添加 MonoBehaviour 时也会调用它。
脚本:反序列化后现在调用 InitializeOnLoad 回调
InitializeOnLoad 的回调时间已更改。它以前在调用 Unity API 时可能导致现有序列化对象的对象状态无效。现在,在反序列化和创建所有对象之后调用它。作为创建对象的一部分,必须调用默认构造函数。此更改意味着对象构造函数现在在 InitializeOnLoad 静态构造函数之前调用,而 InitializeOnLoad 以前在某些对象构造函数之前调用。
例:
[System.Serializable]
public class SomeClass
{
public SomeClass()
{
Debug.Log("SomeClass constructor");
}
}
public class SomeMonoBehaviour : MonoBehaviour
{
public SomeClass SomeClass;
}
[InitializeOnLoad]
public class SomeStaticClass
{
static SomeStaticClass()
{
Debug.Log("SomeStaticClass static constructor");
}
}
这在以前会导致:
(InitializeOnLoad)(
对象构造函数)SomeStaticClass static constructor``SomeClass constructor
进行此更改后,它现在将是:
(对象构造函数) (InitializeOnLoad)
SomeClass constructor``SomeStaticClass static constructor
**新增功能*法线贴图*
支持 BC5 格式的类型。**
到目前为止,Unity支持RGB法线贴图或swizzled AG法线贴图(x在alpha通道中,y在绿色通道中),具有不同压缩
格式。现在支持 RG 法线贴图(红色通道为 x,绿色通道为 y)。 UnpackNormal(解包正常)着色
功能已升级为允许使用 RGB、AG 和 RG 法线贴图,而无需添加着色器变体。为了能够做到这一点,UnpackNormal 函数依赖于将法线贴图的未使用通道设置为 1。也就是说,一个旋转的AG法线贴图必须编码为(1,y,1,x)和RG(x,y,0,1)。Unity 法线贴图编码器强制执行它。
如果用户使用的是未经修改的 Unity,则无需进行升级。但是,如果用户已经完成了自己的法线贴图着色器或自己的编码,他们可能需要考虑需要将 swizzled AG 法线贴图编码为 (1, y, 1, x)。如果用户在解压缩法线贴图之前在 swizzled AG 中混合法线贴图,他们可能需要使用 UnpackNormalDXT5nm 而不是 UnpackNormal。
始终在编辑器中启动时预编译托管程序集 (.dll) 和程序集定义文件程序集。
在编辑器启动时加载预编译的托管程序集 (.dll) 和程序集定义文件程序集,即使其他程序中存在编译错误脚本
.这对于应始终在启动时加载的编辑器扩展程序集非常有用,而不管项目中的其他脚本编译错误如何。
*标识3*
排放。
如果您使用的是预先计算的实时 GI 或烘焙 GI,则在早期版本的 Unity 中设置的强光自发光材质现在看起来可能会更加强烈,因为它们的范围不再受限制。之前使用的 RGBM 编码为伽玛空间的有效范围为 97,线性颜色空间的有效范围为 8。HDR 颜色选择器的最大范围为 99,因此可以将某些材质设置为比看起来更强烈。 升级后,发射颜色将作为真正的 HDR 16 位浮点值传递给 GI 系统(范围现在为 64K)。在内部,实时 GI 系统使用 rgb9e5 共享指数格式,该格式可以表示这些强度值,但烘焙光照贴图
受其 RGBM 编码的限制。烘焙光照贴图的 HDR 将在以后的版本中添加。
VR 到 XR 重命名。
UnityEngine.VR.* 命名空间已重命名为 UnityEngine.XR.*。所有名称中带有 VR 的类型也已重命名为其 XR 版本。例如:UnityEngine.VR.VRSettings 现在是 UnityEngine.XR.XRSettings,等等。
API 更新程序已配置为自动将现有脚本和程序集更新为新的类型名称和命名空间。如果不想使用 API 更新程序,也可以手动更新命名空间和类型。
命名空间更改:
- UnityEngine.VR -> UnityEngine.XR
- UnityEngine.VR.WSA -> UnityEngine.XR.WSA
- UnityEngine.VR.WSA.Input -> UnityEngine.XR.WSA.Input
- UnityEngine.VR.WSA.Persistence -> UnityEngine.XR.WSA.Persistence
- UnityEngine.VR.WSA.Sharing -> UnityEngine.XR.WSA.Sharing
- UnityEngine.VR.WSA.WebCam -> UnityEngine.XR.WSA.WebCam
UnityEngine.VR 类型更改:
- VRDevice -> XRDevice
- VRNodeState -> XRNodeState
- VRSettings -> XRSettings
- VRStats -> XRStats
- VRNode -> XRNode
都VR.*
分析器
条目也已更改为 .XR.*
UnityEngine.dll 现在为每个 UnityEngine 模块拆分为单独的 dll。
UnityEngine.dll(包含所有公共脚本 API)已分成涵盖引擎不同子系统的代码模块。这使得 Unity 代码库具有更清晰的内部依赖关系,更适合内部工具,并使代码库更具可剥离性。分离的模块包括 UnityEngine。对撞机
现在位于 UnityEngine.PhysicsModule.dll 和 UnityEngine.Font 中,现在位于 UnityEngine.TextRendering.dll 中。
此更改通常不会影响任何现有项目,并且脚本现在会自动针对正确的程序集进行编译。Unity 现在包含一个 UnityEngine.dll 程序集文件,其中包含引用 DLL 的所有预编译程序集的所有 UnityEngine 类型的类型转发器,该文件通过将文件转发到其新位置来确保向后兼容性。
但是,在一种情况下,现有代码可能会因此更改而中断。也就是说,如果代码使用反射来获取 UnityEngine 类型,并假定所有类型都位于同一程序集中。这意味着此类代码将失败,因为 Collider 和 Font 现在位于不同的程序集中:
System.Type colliderType = typeof(Collider);
System.Type fontType = colliderType.Assembly.GetType("Font");
由于使用了类型转发器,从“UnityEngine”程序集获取 Collider 或 Font 类型仍然有效,如下所示:
System.Type.GetType("UnityEngine.Collider, UnityEngine")
Unity 仍然捆绑了一个完全单体的 UnityEngine.dll,其中包含 Unity 编辑器的托管/UnityEngine.dll 文件夹中的所有 UnityEngine API。这可确保任何现有的 Visual Studio/MonoDevelop的
引用 UnityEngine.dll 的解决方案将继续生成,而无需更新以引用新的模块化程序集。应继续使用此程序集在自定义解决方案中引用 UnityEngine API,因为模块的内部拆分可能会发生变化。
标准着色器中的材质平滑度。
使用标准着色器的 GGX 版本的纯平滑材质现在可以接收镜面反射高光,从而增加此类材质的真实感。
本页列出了 2017.3 中从早期版本的 Unity 升级时可能会影响现有项目的任何更改。
例如:
- 数据格式的更改可能需要重新烘焙。
- 对任何现有函数、参数或组件值的含义或行为的更改。
- 弃用任何功能或特性。(建议使用其他方法。
***光照贴图*
强度和发射材料*启发*
**
2017.2 中引入的一个错误增加了场景
具有自发光材质的静态网格体。烘焙材质和实时发光材质都是一样的。此问题现已在 2017.3 中修复,因此强度现在与 2017.1 相似。
此更改会影响您在 2017.2 中构建的任何项目,然后升级到 2017.3 或更高版本。
PassType.VertexLMRGBM 已弃用
在 Unity 2017.3 中,着色
传递 VertexLMRGB 将被忽略。例如: Tags { "LightMode" = "VertexLMRGBM" }
相反,请使用支持所有类型的光照贴图编码的 DecodeLightmap 着色器函数提供或更新 VertexLM 着色器通道。内置的移动着色器现在也使用 DecodeLightmap 着色器函数。
在桌面平台上使用内置移动着色器(如 Mobile 或 VertexLit)的现有项目中,照明输出可能会发生变化。这是因为 RGBM 编码值的最大范围已从 [0, 8] 更改为 [0, 5]。