【问题标题】:Unity - how to fast forward to a percentage of animation?Unity - 如何快进到动画的百分比?
【发布时间】:2018-04-06 23:22:28
【问题描述】:

好的,我已经查找了与 Unity 的 Animator 相关的所有内容,我知道您可以使用 https://answers.unity.com/questions/1418940/how-can-i-know-a-percent-of-animation.htmlhttps://answers.unity.com/questions/181903/jump-to-a-specific-frame-in-an-animation.html 跳转到特定帧并获取动画百分比

不过,我还没有看到任何关于这方面的内容 - 就像在游戏 Causality(使用 Unity 制作)中一样,我需要做一些类似于 Magic jump 在滚动网站上所做的事情:https://www.magicleap.com

我在 Blender 中的模型上创建了一个动画,我需要根据其 y 轴位置快进/转到动画的某个百分比,而不是运行它。

现在我可以在 y 轴上向上/向下拖动我的模型,并且我有一个最大值和最小值 transform.position.y,模型可以继续前进(就像一个小车)

Vector3 goTo = new Vector3 (transform.position.x, (initObjPos.y+touchDiff), transform.position.z);
                if (goTo.y >= maxHeight) { //max = 0.251f in y, and min?
                    transform.position = new Vector3 (transform.position.x, maxHeight, transform.position.z);
                } else if (goTo.y <= minHeight) {
                    transform.position = new Vector3 (transform.position.x, minHeight, transform.position.z);
                } else { //lower
                    transform.position = goTo;
                }

这是我需要动画在 y 位置为最大值时以 100% 完成,在最小高度为 0% 并且能够在用户拖动时来回移动的可视化:

这可能吗?

【问题讨论】:

  • 你知道总帧数吗?如果是这样,我认为它已经解决了。
  • 是的,我愿意 - 每个型号可能有不同的编号,但如果有 100 帧,你会如何做到这一点?
  • 您是否为此使用单个动画?
  • 基本上,既然您提到了因果关系,您希望您的动画由滑块之类的东西“驱动”?
  • @Galandil 是的 - 基本上我的对象在最大和最小之间移动就像一个滑块。

标签: c# animation unity3d percentage lerp


【解决方案1】:

对于每个状态,动画器中都有一个切换开关,可以通过浮点参数获取normalizedTime。顾名思义,将其值设置为 0 将给出 0% 的动画和 100% 的动画。可以通过

来设置参数的值
animator.SetFloat ("AnimStateTime", 0.5f);

如果要平滑过渡,请使用

animator.SetFloat ("AnimStateTime", 0.5f, 1, 10 * Time.deltaTime);

【讨论】:

  • 这会确保对象不会跳到这个浮动,而是“快进”到它吗?
  • 它将跳转到该动画持续时间。如果你想要一个平滑的“跳跃”,你必须通过脚本手动完成,并将更新循环中的中间值发送给动画师
  • 我忘了,其实有`SetFloat(string name, float value, float dampTime, float deltaTime)`会自动为你做平滑处理。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-06-16
  • 2012-08-01
相关资源
最近更新 更多