浅析Timeline结构

结构

PlayableDirector Timeline
PlayableGraph Graph
TrackGroup TrackGroup
TrackAsset AnimationTrack PlayableTrack CinemachineTrack CustomTrack
TimelineClips TimelineClips TimelineClips TimelineClips
PlayableAsset AnimationClip (Motion) CustomPlayableAsset CinemachineShot CustomClip
PlayableBehaviour PlayableBehaviour PlayableBehaviour CinemachineShotPlayable PlayableBehaviour

每天一点UWA:第十三周

Gameplay

求教一个屏幕后处理的问题。我们期望角色不受屏幕后处理影响,所以目前采用双相机的方案,根据Layer划分,但是这种情况下角色的影子也就没有办法投影到地表上,请问这种需求有什么好的实现方式?

  • 可以尝试根据地表模型的局部细节来动态生成接受阴影的网格(比如Fast Shadow Receiver插件),这样既可以保证地表模型进行屏幕后处理操作,同时也可以生成相关角色的动态阴影。

Shader合并与Variant

前言

  • 写这个的起因是因为看了唐建伟大佬在UWA上发表的文章合并Shader系列_如何合并渲染状态。看完后受益良多,但是也对文中这样合并shader会不会产生shader的变种(shader variant)有所担心,因此在UWA的问答上提出了问题,最后唐建伟也做出了回答,经过大佬授权在这里根据回答进行一些总结,想看原文的可以直接点击链接。

每天一点UWA:第十二周

UI

对于UGUI文字花屏问题,有什么推荐的解决方法吗?

每天一点UWA:第十一周

字体

优化字体资源

方向:内存和数量峰值

  • 主要是因为在字体资源的使用过程中采用了不同的方式。比如一开始的UI没有考虑使用AssetBundle,从而直接从Resources或者其它文件夹加载了字体资源。而后面的UI又依赖了AssetBundle中的字体,虽然也没有主动load,但是因为unity在load asset的时候会自动加载(有待验证)所以导致字体资源又被加载一次。从而峰值数量会不止一个。
  • 内存:很多情况下我们对于一个字体库中的字体只是用了个别的,但是却加载了整个字体库。

每天一点UWA:第十周

AssetBundle

AssetBundle中的脚本

  • 首先,需要说明的是,脚本本身的内容是不会被打包到AssetBundle文件中的,AssetBundle文件储存的仅是脚本的索引信息。因此,即便有多个AssetBundle中都存在UIAtlas这一脚本索引,对堆内存也几乎是不产生影响的,且不会产生冗余问题。
  • 其次,脚本被当做资源且会产生依赖这一现象,仅在Unity 4.x版本中出现,而在Unity 5.0以后,脚本之间将不会产生依赖关系。因此,如果你目前还在使用Unity 4.x版本进行开发,那么依赖关系打包时确实需要注意这个问题,即依次Push A和B进行打包时,如果AssetBundle之间存在相同脚本,那么B会对A的脚本产生依赖。

每天一点UWA:第九周

AssetBundle

关于AssetBundle依赖的问题

  • 如果Panel A和Panel B,它们均依赖一个共享Atlas C。如果在加载完AtlasC后卸载它所在的AssetBundle,再创建A和B,此时会失败。因为他们的依赖关系在AssetBundle上。

请教一下,SerializedFile的卸载规则是什么呢?会跟随这AssetBundle一起卸载么?

  • 绝大部分的SerializedFile均由AssetBundle产生,当AssetBundle被卸载时,与其对应的SerializedFile也将销毁。

每天一点UWA:第八周

AssetBundle

打包AssetBundle的时候,我发现切换场景时,即使打同一个场景的AssetBundle,它们的Hash值都是不一样的,可能是什么原因造成的呢?

  • 目前很可能是Shader Stripping造成的,其原理可见文档
  • 简单来说就是根据当前场景对Shader进行简化,因此如果打包时包含的场景的Lightmap或Fog设置不同,打出来的AssetBundle包也有可能是不同的。可以尝试通过把Graphics Settings中的Shader Stripping设置进行修改来避免这个问题。

Prefab目前,只能通过Unload(True)和Resources.UnloadUnusedAssets卸载。

每天一点UWA:UI优化小结

说明

  • 经过一个半月的学习,对UI的优化有了一些心得,同时也希望把零散的知识点总结到一起,因此有了这个专题。

那些需要关注的性能指标函数

UGUI参考的函数

  • 1、Canvas.SendWillRenderCanvases()
    该API为UI元素自身发生变化(比如被Enable或者被缩放,移动并不算)时所产生的调用。发生在canvas被渲染之前。

  • 2、Canvas.BuildBatch
    该API为UI元素合并的Mesh需要改变时所产生的调用。通常之前所提到的Canvas.SendWillRenderCanvases()的调用都会引起Canvas.BuildBatch的调用。另外,Canvas中的UI元素发生移动也会引起Canvas.BuildBatch的调用。

每天一点UWA:第七周

UI

NPOT采用 ToLarger 的模式拉成POT,如果是UI界面(开启Pixel Perfect)的话,可能显示时会有较大视觉损失。

在Unity 5.x版本下,我们在用UGUI的过程中发现它把图集都打进了包里,这样就不能自动更新了,请问图集怎么做自动更新呢?

  • 在Unity 5.x中UGUI使用的Atlas确实是不可见的,因此无法直接将其独立打包。
  • 建议,可以把Packing Tag相同的源纹理文件,打到同一个AssetBundle中(设置一样的AssetBundle Name),从而避免Atlas的冗余。同时这样打包可以让依赖它的Canvas的打包更加自由,即不需要把依赖它的Canvas都打在一个AssetBundle中,在更新时直接更新Atlas所在的AssetBundle即可。
Your browser is out-of-date!

Update your browser to view this website correctly. Update my browser now

×