【问题标题】:runtimeAnimationController hash not found in animationClips在 animationClips 中找不到 runtimeAnimationController 哈希
【发布时间】:2019-01-31 21:53:32
【问题描述】:

我有一个脚本,它告诉我 runtimeAnimationController 当前正在为角色播放哪个动画剪辑。

我在某些角色上使用此脚本时没有任何问题,但现在我有一个角色在动画剪辑列表中找不到当前动画的哈希值。

我不知道这个问题的原因可能是什么。

我认为我的代码是绝对安全的。 当我在 Visual Studio 中创建断点并检查动画剪辑列表时,我可以看到当前正在播放的哈希确实不在列表中。

当前播放动画的hash也不为0,当动画控制器播放不同的动画时,它确实会发生变化。

有人知道为什么在找不到哈希的情况下会出现这种情况吗?

我的意思是当一个动画正在播放时,这个动画必须在动画剪辑列表中,对吧?

非常感谢您的帮助!

private void pTellAnim()
{

    AnimatorStateInfo stateInfo = _animator.GetCurrentAnimatorStateInfo(0);
    int iCurrentAnimationHash = stateInfo.shortNameHash;

    foreach (AnimationClip nClip in _animator.runtimeAnimatorController.animationClips)
    {
        int iHash = Animator.StringToHash(nClip.name);
        if (iHash == iCurrentAnimationHash)
        {
            Debug.Log("Currently playing " + nClip.name + "\n");
            return;
        }
    }

    Debug.Log("Clip not found for hash " + iCurrentAnimationHash.ToString() + "!!!!\n");
}

【问题讨论】:

  • @Foggzie _animator.layerCount 返回 1。
  • 好的,很高兴知道。你有什么理由使用GetCurrentAnimatorStateInfo 而不是GetCurrentAnimatorClipInfo?您正在将状态信息的哈希值与剪辑的哈希值进行比较。根据我假设您正在尝试做的事情,您似乎应该使用 later 函数,并检查它返回的 AnimatorClipInfo 对象数组。它们每个都有一个.clip 属性。
  • @Foggzie 谢谢。你的方法对我来说很好。我在一篇旧的 Unity 帖子中找到了我的方法,我猜当时您的方法并不存在。也许您可以将您的评论作为答案?
  • @Foggzie 我认为问题在于动画不是“独立”动画,但仍附加到网格/装备。您认为我应该发布错误报告,还是我的方法不再使用?
  • 好主意!有时我在 cmets 中闲逛太多:P 而且我不会报告错误;我不认为状态信息哈希与剪辑哈希对齐是预期的行为。

标签: c# unity3d


【解决方案1】:

您将AnimatorStateInfo 的哈希值与剪辑的哈希值进行比较。您应该改用_animator.GetCurrentAnimatorClipInfo(0),并检查它返回的AnimatorClipInfo 对象数组。它们每个都有一个.clip 属性。

【讨论】:

    猜你喜欢
    • 2012-08-02
    • 1970-01-01
    • 2014-03-07
    • 1970-01-01
    • 2020-06-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多