我试图通过在另一个对象上设置的特定开始和结束关键帧来驱动约束0-1。动画师可以更改这些开始和结束关键帧位置。
例如,如果对象上的第一个键是第10帧而最后一个是第100帧,则约束将在第10帧处于强度0处,然后在第100帧处处于强度1处。
同样,如果对象上的第一个键位于0而最后一个键位于20,则约束将在第0帧处于强度0处,然后在第20帧处处于第1位。
理想情况下,约束也可以在动画曲线中读取,因此它可以是线性转换,慢速转换等。
我遇到的主要问题是如何动态读取开始和结束关键帧,以便在用户更改时间时,约束权重更新。似乎表达式可能是要走的路,但我觉得它们的播放速度会慢一些。我不是脚本工作的粉丝,但这也许是一种方式。我想我在一天结束时要查找的是animCurve的开始和结束关键帧的输出值。
答案 0 :(得分:2)
这个有点棘手,因为通常的方法 - 表达式或驱动键 - 将无法正常工作:动画曲线的“开始”和“结束”不是可以通常方式访问的属性。
您可以使用使用getAttr来获取关键时间的表达式来尝试它。这是一个基本的例子:
float $start = `getAttr pCube1_translateX.keyTimeValue[0].keyTime`;
float $end = `getAttr pCube1_translateX.keyTimeValue[1].keyTime`;
float $pct = (frame - $start) / ($end - $start);
$pct = clamp(0, 1, $pct);
float $lerp = linstep(0, 1, $pct);
pCube2.translateZ = $lerp;
在pCube2
的translateX频道的第一个和第二个键之间的间隔期间,这将在Z和0之间移动pCube1
。
这很有效 - 但它超级脆弱,除非你想扩展它以获得密钥数量并在每帧$end
更新索引值。
我建议将问题翻到头上并将某个项目从第3个人工参数上移开。然后,您可以使用更传统的表达式或SDK。