【发布时间】:2016-08-16 14:56:16
【问题描述】:
如果我有一堆可能是非线性但有序的值:1、3、8、12,然后我添加了一个新值,比如 5 什么是存储它的最佳收集类型(速度超过其他任何东西)在 3 到 8 之间并给我索引,这样我就可以直接检查该值后面和前面的内容。这是一个动画系统,我正在存储关键帧,我需要知道前面和后面的内容,以便正确插入值
目前我正在使用哈希表(字典),关键是存储关键帧的帧号,值是我想要的位置。
因此,使用这种方法,它对于在进行更改时更新关键帧非常有用,但是在制作动画时,如果我将 soem 数据放在 5 中,则找到 3 和 8 让我遍历整个列表以找出当前条目,然后存储上一个并迭代到下一个..(更不用说每次我向字典添加内容时,它都需要按键排序才能正常工作)。
只是寻找一些建议来解决这个相当开放的问题。
要深入了解我当前的动画工具结构:
我有一个称为时间轴的组件,它是 KeyframeProperties 记录的内容。因此,在关键帧属性中,您将调用 record() 并询问它所连接的时间线是否可以记录到当前插槽中,如果可以,它将返回记录关键帧的索引,然后返回关键帧属性将该索引存储到它当前拥有的字典中,其中包含动画师的当前数据。当您选择播放动画时,您调用了timeline.play() 函数,它将处理遍历所有连接的属性并调用keyframeproperty.advanceframe(int frame#)。这就是为什么我需要上一帧和下一帧,因为在不知道这一点的情况下,当帧#被传入时,没有办法知道动画的下一个插值目标应该在哪里..
示例:传入一个 4 并且属性中最近的两个关键帧在 3 和 7,动画应该将起始位置设置为第 3 帧数据,然后通过 0.25 (1/(7-3 ) = 0.25)
【问题讨论】:
-
每帧有一个条目的数组怎么样。数组索引 == 帧号。任何数组位置都可以为空或包含关键帧属性。
-
仍然存在需要注意关键帧属性中下一个最近帧的问题。这意味着我将遍历所有数组以找到下一个和上一个条目。要记住,在关键帧属性中推进一帧时,如果传入一个不存在的帧,它需要直接在之前和前面找到帧,以便找出它应该在动画中的位置
-
你在说什么尺寸?两个分配的插槽之间的平均距离和最大距离是多少?
-
puu.sh/os7mF/e0d87fb291.png 时间线的平均值始终为 0。但是,可以将对象的关键帧插入该时间线内的任何位置。使用这张图片,如果我想从 3 到 13 开始制作动画。它会遍历并从 3s 位置动画到 4s,因为这两个都是实际的关键帧,而从 4 到 5 你必须假设从第 4 帧和第 13 帧位置之间的差异以及第 5 帧的位置
-
是的,但我的意思是,这些数字有多大?如果在下一帧之前只有 10 帧或 100 帧,这应该不是问题。如果您有 10,000 或 100,000,这可能是个问题。请记住,今天的 CPU 每秒执行数十亿次操作。
标签: c# animation optimization unity3d collections