共计 2245 个字符,预计需要花费 6 分钟才能阅读完成。
1)Timeline 技能编辑器如何提取关键帧信息
2)Mesh 资源开启 R / W 内存的翻倍问题
3)UI 的 Animator 动画对 Canvas.SendWillRenderCanvas() 耗时影响
4)对 Shader 变体的了解
这是第 281 篇 UWA 技术常识分享的推送。明天咱们持续为大家精选了若干和开发、优化相干的问题,倡议浏览工夫 10 分钟,认真读完必有播种。
UWA 问答社区:answer.uwa4d.com
UWA QQ 群 2:793972859(原群已满员)
Script
Q:最近在用 Unity 做一个技能编辑器,让策动能够在 Timeline 编辑器里编辑技能动画、施法特效、受击动画、受击特效和播放声音等等。编辑这些都没什么问题,我想依据编辑好的 Timeline 导出一系列行为节点,在 Editor 的环境下导出成配置(蕴含所有行为节点)。当初我不分明怎么获取 Timeline 里第 m 帧开始某动画 x,第 n 帧完结这些行为。同时怎么能给动画打上对应 Tag?
A:Timeline 的组成如下图:
每个 Track 对应一个 TrackAsset 其实就是一个 PlayableAsset,整个 Timeline 也是一个 TimelineAsset,外面存了所有 Track 的数据:
对于每个 Clip 的开始和完结工夫在 TimelineClip 中能够获取:
感激羽飞 @UWA 问答社区提供了答复
Mesh
Q:为什么 Profiler 中显示开启网格的 Read/Write 没有使其内存翻倍,而仅仅是回升了一点?
A:如果是 FBX 中的网格资源,则该网格资源很有可能除了本身网格的顶点数据外,还带有动画和骨骼信息。而当开启 FBX 的 Read/Write 时,仅会使网格资源本身的内存翻倍,而动画和骨骼信息不会,且 Profiler 并不能将他们离开统计,从而产生了整体没有翻倍的景象,如图。
开启 Read/Write:
没开 Read/Write:
这一点能够通过将 FBX 设置中 Animation Type 设置为 None、勾销 Import Animation 勾选、勾销 Import Materials 勾选证实。此时 Profiler 中该网格资源内存显著降落,并根本合乎开启 Read/Write 前后内存翻倍了。
值得一提的是,在较新版本的 Unity 中(图截自 2020.3),选中网格资源是能够看到其内存的实践大小和具体组成部分的。
感激 Faust@UWA 问答社区提供了答复
UGUI
Q:对 UGUI 增加 Animator 动画会造成 UI 更新耗时吗?如果 Animator 组件处于 Active 状态但没有进行 Loop 会有继续耗时吗?
A:在 Unity 2018.4 版本中对于这个问题试验如下:
步骤 1,场景中为一个 UI 增加批改 Scale 的动画,并复制 1000 个;
步骤 2,增加了其 Position 和 Color 属性的动画;
步骤 3,批改了所在 Canvas 的 Render Mode 为 Overlay 模式和 Camera 模式;
步骤 4,批改了所在 Canvas 的 Pixel Perfect 为关上。只进行 1 的状况下无论动画是否 Loop,Canvas.SendWillRenderCanvas()都只会在刚开始时有一段高耗时。
而批改 2 之后的所有状况下,开启 Loop 时 Canvas.SendWillRenderCanvas()始终具备高耗时。但敞开 Loop 后,播放完一次动画后 Canvas.SendWillRenderCanvas()的耗时就始终靠近于 0 了,如图:
而此时动画零碎自身的 Animator.Update()耗时依然很高,如图:
总的来说,从 2018.4 上的这次试验来看,现版本的 UGUI 不会被不在播放状态的 Animator 影响而造成 Canvas.SendWillRenderCanvas()耗时。
感激 Faust@UWA 问答社区提供了答复
Shader
Q:除了不倡议应用 Standard Shader 外,还有其余的 Unity 默认的 Shader 不举荐应用吗?比方官网的 Universal Render Pipeline/Particles/Unlit 有 6 个变体,其中也用到了雾效的计算。然而咱们我的项目中没有用到雾效,而且这个 Shader 用得十分多,这类状况是否有必要本人弄一个简洁版?
A:对于 Shader 变体数量次要影响的是 Shader 的内存(尽管变体数量和内存并不是齐全的线性关系),如下 PPS 中的 Uber 变体数为 3.74K 很高:
次要是因为有很多 multi_compile 的 Keywords,倡议手动删除一些不必的(或应用 shader_feature 代替),能够大大降低变体数量:
以上示例就是简略粗犷的优化对内存影响较大的 Shader,当然最好是通过 SVC 对我的项目中所有 Shader 的所有变体进行治理,但工作量绝对会大很多。
感激羽飞 @UWA 问答社区提供了答复
封面图来源于
Animation Rigging: Advanced Setups
展现了 Unity 动画索具包的高级设置和用例。
明天的分享就到这里。当然,生有涯而知无涯。在漫漫的开发周期中,您看到的这些问题兴许都只是冰山一角,咱们早已在 UWA 问答网站上筹备了更多的技术话题等你一起来摸索和分享。欢送酷爱提高的你退出,兴许你的办法恰能解他人的当务之急;而他山之“石”,也能攻你之“玉”。
官网:www.uwa4d.com
官网技术博客:blog.uwa4d.com
官网问答社区:answer.uwa4d.com
UWA 学堂:edu.uwa4d.com
官网技术 QQ 群:793972859(原群已满员)