【发布时间】: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 而且我不会报告错误;我不认为状态信息哈希与剪辑哈希对齐是预期的行为。