【问题标题】:Use c# to animate instead of Animator in UnityUnity中使用c#代替Animator制作动画
【发布时间】:2020-05-24 16:54:43
【问题描述】:

好吧,我知道 Unity 中的动画制作系统对很多事情都非常有用,但我发现自己在代码中拥有自己的状态机,不知何故动画制作者提供的状态机由于混合时间而不准确,也许我不知道,所以我经常发现我的角色在动画状态机中处于状态 2,而在我自己的状态机中处于状态 0,这很疯狂,因为当它即将结束动作时,我似乎无法使其在极限情况下匹配。所以我想知道是否有办法只用代码说“从A帧到B帧播放这个动画”然后循环或不循环,这对我来说会好得多,当然我会失去所有的混合功能,但实际上我会更好,到目前为止,我在文档中所能找到的所有内容都是指使用动画师。非常感谢您对此提供的任何帮助 =)

编辑:忘记补充我找到了 Animation.Play 但显然这仅播放保存在单独文件中的动画,例如当我们使用动画时间轴记录某个动作时,但我有一个有很多帧的角色,我不要认为它在这种情况下有用(或者在我的测试中它至少找不到指定的动画,也许我错过了一些东西)

【问题讨论】:

    标签: c# unity3d state


    【解决方案1】:


    首先,您可以使用 Animator 来创建自己的状态机。实际上,您不需要为您的目的使用两个不同的状态机。 (观看此视频here
    关于你的问题,我在这里找到了一个很好的答案:Link

    据我所知,您可以执行 AnimationState.normalizedTime 它以 0 到 1 的比例返回动画的进度。所以如果 你有一个 30 帧的动画,你想要第 15 帧,你可以这样做 (normalizedTime == 0.5)* 或者更好更可靠的选择是 使用在特定帧上触发的 AnimationEvents。

    *如果我们处理浮点数,你将无法做到这一点——你只能得到近似值,否则你必须检查更大的值 然后或等于 0.4 并且小于或等于 0.6,因为 动画可能比当前帧速率或 归一化时间值可能是 0.50000001,因为 浮动值。

    【讨论】:

    • 这太棒了,感谢一百万 =),不知道为什么我看过的关于动画师的所有教程和网站总是告诉在播放器中插入代码,创建类似并行状态机的东西正如您所说,我们可以将动画状态机用于我们自己的目的,在具有进入和退出功能的状态中插入代码,甚至能够知道动画所在的帧,我认为正如所说的那样,事件可能更可靠因为它是不可跳过的,对吧?所以即使动画跳帧也会触发事件,如果我错了,请纠正我
    • 嘿 asdronin,欢迎您 ^_^ 我认为您是对的。使用 Animator 或您自己的状态机并不重要。它们都基于 Unity 动画系统,据说动画事件应该在情况下触发 (forum.unity.com/threads/…)
    • 太棒了,再次感谢,我想我会花时间看看它在动画中的哪个位置,也许现在事件已经修复,但我想我觉得如果它超过 0.5 或其他时间更安全然后做一些事情,可能会花费更多时间,但肯定会更精确,我喜欢我制作的东西的准确性,即使它的质量低,我的游戏最终还是准确的 =)。非常感谢 Mohammad,你用这个信息发现了我​​一个全新的世界 =)。祝你的项目和一切顺利 =)
    • 祝兄弟好运,随时联系我:)
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2015-11-25
    • 1970-01-01
    • 1970-01-01
    • 2018-09-10
    • 2022-01-15
    • 1970-01-01
    • 2021-12-24
    相关资源
    最近更新 更多