ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

Timeline技能编辑器如何提取关键帧信息

2022-01-17 10:33:40  阅读:252  来源: 互联网

标签:关键帧 Canvas 动画 Timeline Shader 编辑器 内存 UWA


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(原群已满员)

标签:关键帧,Canvas,动画,Timeline,Shader,编辑器,内存,UWA
来源: https://www.cnblogs.com/uwatech/p/15767628.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有