我有一个附有动画制作器的gameObject,它有动画曲线,我需要从代码中动态地改变关键帧的值。我如何访问它们?
s71maibg1#
在实时会话中已经问过这个问题了。答案是你不能,因为动画文件是运行动画控制器的核心。他们给我的另一种方法是使用传统的SpriteRenderer。动画控制器不支持值的动态改变。相反,他们提供了Animator让你从动画文件动态改变路径,所以如果你不喜欢使用SpriteRenderer,考虑制作不同的动画文件和路径到你的Animator。
oyxsuwqo2#
如果“dynamically”仍然表示editor-time,则可以使用UnityEditor.AnimationUtility,它提供了获取和设置曲线、关键帧等的方法。用户可以使用AnimationUtility.GetCurveBindings()或AnimationUtility.GetObjectReferenceCurveBindings()检索绑定。使用AnimationUtility.GetObjectReferenceCurve()用户可以获取关键帧,进行修改并使用AnimationUtility.SetObjectReferenceCurve()应用它在运行时-可能仅使用变通方法。例如,通过某个自定义脚本中的某个动画中继值,然后在更新时将所需的值应用于实际属性()--一种自定义约束。在其中,你可以通过运行时的代码应用自定义修改。但是在编辑器时间和动画时,预览会被破坏,因为你不会直接动画属性,但只有那个中继值。也许可以在自定义约束行为中使用[ExecuteInEditMode]和AnimationMode.InAnimationMode()来模拟预览。但所有这些都是实验性的。
2条答案
按热度按时间s71maibg1#
在实时会话中已经问过这个问题了。答案是你不能,因为动画文件是运行动画控制器的核心。
他们给我的另一种方法是使用传统的SpriteRenderer。
动画控制器不支持值的动态改变。相反,他们提供了Animator让你从动画文件动态改变路径,所以如果你不喜欢使用SpriteRenderer,考虑制作不同的动画文件和路径到你的Animator。
oyxsuwqo2#
如果“dynamically”仍然表示editor-time,则可以使用UnityEditor.AnimationUtility,它提供了获取和设置曲线、关键帧等的方法。
用户可以使用AnimationUtility.GetCurveBindings()或AnimationUtility.GetObjectReferenceCurveBindings()检索绑定。使用AnimationUtility.GetObjectReferenceCurve()用户可以获取关键帧,进行修改并使用AnimationUtility.SetObjectReferenceCurve()应用它
在运行时-可能仅使用变通方法。
例如,通过某个自定义脚本中的某个动画中继值,然后在更新时将所需的值应用于实际属性()--一种自定义约束。在其中,你可以通过运行时的代码应用自定义修改。但是在编辑器时间和动画时,预览会被破坏,因为你不会直接动画属性,但只有那个中继值。也许可以在自定义约束行为中使用[ExecuteInEditMode]和AnimationMode.InAnimationMode()来模拟预览。但所有这些都是实验性的。