【问题标题】:Delete animation of a certain bone for a number of frames Unity3d删除某个骨骼的动画若干帧Unity3d
【发布时间】:2015-06-11 10:24:31
【问题描述】:

我有一个 Mecanim 的动画。我想知道一旦我按下 LateUpdate() 函数中的某个键,我如何才能在接下来的几帧中只删除右手的动画

void LateUpdate () 
    {
        if (Input.GetKeyDown (KeyCode.D)) 
        {
            //delete the next lets say 100 frames of only the right-hand
        }
    }

如果有人可以请建议如何做到这一点?

【问题讨论】:

  • 他们已经有一个组件。在 Biped 部分中,您可以控制“重量”
  • @Aizen 感谢您的评论。我想删除某个骨骼的帧,以便在间隙之前/之后的间隙中发生插值。正如人们在这里向我建议的那样,删除框架将解决我在这里找到的问题gamedev.stackexchange.com/questions/102252/…
  • 错误。这是一个 hacky 方法。而且它不是对称的。你用的是什么动画?你说的是人形机器人,所以我猜是 Mecanim?
  • 很好,但我想知道为什么你在 Mecanim 中遇到丢帧问题,因为 Mecanim 已经对动画有很好的控制,特别是设置为肢体的组合动画。您是否已经学习过完整的 Mecanim 组件教程?

标签: unity3d unityscript


【解决方案1】:

评论越来越大,所以我将它粘贴在这里。

https://www.youtube.com/watch?v=Xx21y9eJq1U

在此视频中尝试检查 44:51 ish 或其他内容。这就是你所需要的。然后用脚本控制它何时激活。

这是一个Masking。您可以屏蔽动画等。看完这个你就会明白了。

【讨论】:

  • 这不是我要找的,你发送的是添加两层不同的动画。但我正在寻找的是删除当前动画中特定肢体的一些帧。这样我就可以在这里找到我想做的事情gamedev.stackexchange.com/questions/102252/…
  • 在您的评论链接上。代码在 Update() 上运行,这会干扰 Mecanim。你可以做到,但就像我说的那样,这是一种 hacky 方式。现在,如果您坚持使用它,您所要做的就是将 frame = 设置为您想要的。然后。在 If else 语句上。您甚至不必确定它是奇数还是偶数。只做动画["Walk"].weight = 0.0f;然后另一个 if 框架是 = 到某事。动画[“步行”].weight = 1.0f;
  • 但这会暂停整个动画,对吧?不是只有右臂吗?这会暂停动画还是插入权重设置为 0 的帧?
  • 嗯,不,您可以控制要停止的帧。只需获取要停止的特定部分的组件即可。动画重量只是一个例子。如果你想超越框架,你总是可以使用一个非常简单的逻辑,比如。 if(frame == 10) 然后将其设为 100,这样它将跳过 90 帧。如果你愿意,你可以使用 IEnumerable yielding 来暂停它并等待帧经过并重新执行它。
猜你喜欢
  • 2013-01-09
  • 2012-10-17
  • 2014-10-16
  • 2014-09-23
  • 2017-05-05
  • 2011-04-02
  • 2021-06-09
  • 2017-05-03
  • 1970-01-01
相关资源
最近更新 更多