问题显示:
动画的fbx其实是从951帧——1021帧
但是在UE里的SectionRange的显示是1020*帧数
形成的原因:
UE中所有的FrameNumber其实是用"Tick"类型存储的,而我的本地项目设置的1帧是800tick,所以该Fbx只有968001Tick,转换成帧数是1210.00125帧
而在UE引擎的算法里,如果取小数点之后的帧数几乎接近于0时,UE就不予计算而是以一个*号结尾显示用于提醒确实不是整帧
解决办法:
由于这个算法运用到了UE的所有模块,很多处都使用了这个方式其实并不造成任何影响,但放在Sequencer里的显示会让美术觉得少了一帧,所以我们只修改在Sequencer的显示部分。
一开始想到的方法是只要实际的帧数和强制取整后的帧数不一样(代表有小数点之后的被省略了),就向上取整,但这个方法没考虑到一个问题,其实我们传进去的还是Tick不是Frame,没有经过Tick到Frame这步计算的数值其实是对的
改进方法:
解决第一个问题的最后效果:
如果这里把这个1211输入值按一下回车确认一下,那么Section轨道里的sequencer帧数就对了,说明我们只改了这个SectionRangeEnd的显示,没有触发改了数值后对轨道中的Section的影响
最终找到了SectionRange行程的代码块
这里的sequencerLength非常特殊,他不是一个按照sequencer秒、Tick来计算的单位,而是以Sequencer自己的15帧为一个单位化成一个单位长度
修改源码在进入sectionRange之前就判断这个最后算出来的tick数是否可以被他设置的TickRagte整除,不能整除,就加成能整除的